diff --git a/.eslintrc.json b/.eslintrc.json index c8b8e4efeb..ce639c6c68 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,7 +6,8 @@ }, "extends": "eslint:recommended", "parserOptions": { - "sourceType": "module" + "sourceType": "module", + "ecmaVersion": 2017 }, "rules": { "accessor-pairs": "error", diff --git a/lib/core/config.js b/lib/core/config.js index 26743320c4..a77185d6bd 100644 --- a/lib/core/config.js +++ b/lib/core/config.js @@ -1,8 +1,10 @@ -var fs = require('./fs.js'); -var File = require('./file.js'); -var Plugins = require('./plugins.js'); -var utils = require('../utils/utils.js'); -var path = require('path'); +const fs = require('./fs.js'); +const File = require('./file.js'); +const Plugins = require('./plugins.js'); +const utils = require('../utils/utils.js'); +const path = require('path'); + +const httpContractDir = '.embark/contracts/'; var Config = function(options) { this.env = options.env; @@ -142,6 +144,43 @@ Config.prototype.loadContractsConfigFile = function() { this.contractsConfig = this._mergeConfig(configFilePath, configObject, this.env); }; +Config.prototype.getExternalContractUrl = function (contract) { + let url; + const RAW_URL = 'https://raw.githubusercontent.com/'; + const MALFORMED_ERROR = 'Malformed Github URL for '; + if (contract.file.startsWith('https://github')) { + const match = contract.file.match(/https:\/\/github\.[a-z]+\/(.*)/); + if (!match) { + this.logger.error(MALFORMED_ERROR + contract.file); + return ''; + } + url = `${RAW_URL}${match[1].replace('blob/', '')}`; + } else if (contract.file.startsWith('git')) { + // Match values + // [0] entire input + // [1] git:// + // [2] user + // [3] repository + // [4] path + // [5] branch + const match = contract.file.match( + /(git:\/\/)?github\.[a-z]+\/([a-zA-Z0-9_\-.]+)\/([a-zA-Z0-9_\-7]+)\/([a-zA-Z0-9_\-\/.]+)#?([a-zA-Z0-1_\-.]*)?/ + ); + if (!match) { + this.logger.error(MALFORMED_ERROR + contract.file); + return ''; + } + let branch = match[5]; + if (!branch) { + branch = 'master'; + } + url = `${RAW_URL}${match[2]}/${match[3]}/${branch}/${match[4]}`; + } else { + url = contract.file; + } + return url; +}; + Config.prototype.loadExternalContractsFiles = function() { let contracts = this.contractsConfig.contracts; for (let contractName in contracts) { @@ -149,10 +188,14 @@ Config.prototype.loadExternalContractsFiles = function() { if (!contract.file) { continue; } - if (fs.existsSync(contract.file)) { - this.contractsFiles.push(new File({filename: contract.file, type: "dapp_file", basedir: '', path: contract.file})); + if (contract.file.startsWith('http') || contract.file.startsWith('git')) { + const url = this.getExternalContractUrl(contract); + const localFile = httpContractDir + path.basename(url); + this.contractsFiles.push(new File({filename: localFile, type: File.types.http, basedir: '', path: url})); + } else if (fs.existsSync(contract.file)) { + this.contractsFiles.push(new File({filename: contract.file, type: File.types.dapp_file, basedir: '', path: contract.file})); } else if (fs.existsSync(path.join('./node_modules/', contract.file))) { - this.contractsFiles.push(new File({filename: path.join('./node_modules/', contract.file), type: "dapp_file", basedir: '', path: path.join('./node_modules/', contract.file)})); + this.contractsFiles.push(new File({filename: path.join('./node_modules/', contract.file), type: File.types.dapp_file, basedir: '', path: path.join('./node_modules/', contract.file)})); } else { this.logger.error("contract file not found: " + contract.file); } @@ -216,6 +259,7 @@ Config.prototype.loadEmbarkConfigFile = function() { }).map((dir) => { return dir.split("*.")[0]; }); + this.contractDirectories.push(httpContractDir); this.buildDir = this.embarkConfig.buildDir; this.configDir = this.embarkConfig.config; @@ -258,7 +302,7 @@ Config.prototype.loadFiles = function(files) { return (file[0] === '$' || file.indexOf('.') >= 0); }).filter(function(file) { let basedir = findMatchingExpression(file, files); - readFiles.push(new File({filename: file, type: "dapp_file", basedir: basedir, path: file})); + readFiles.push(new File({filename: file, type: File.types.dapp_file, basedir: basedir, path: file})); }); var filesFromPlugins = []; @@ -291,7 +335,7 @@ Config.prototype.loadPluginContractFiles = function() { contractsPlugins.forEach(function(plugin) { plugin.contractsFiles.forEach(function(file) { var filename = file.replace('./',''); - self.contractsFiles.push(new File({filename: filename, type: 'custom', resolver: function(callback) { + self.contractsFiles.push(new File({filename: filename, type: File.types.custom, resolver: function(callback) { callback(plugin.loadPluginFile(file)); }})); }); diff --git a/lib/core/file.js b/lib/core/file.js index 98e49c0c5c..09498fc928 100644 --- a/lib/core/file.js +++ b/lib/core/file.js @@ -1,8 +1,11 @@ -let fs = require('./fs.js'); +const async = require('async'); +const fs = require('./fs.js'); +const path = require('path'); +const request = require('request'); class File { - constructor(options) { + constructor (options) { this.filename = options.filename; this.type = options.type; this.path = options.path; @@ -10,13 +13,53 @@ class File { this.resolver = options.resolver; } - content(callback) { - if (this.type === 'embark_internal') { + downloadFile (callback) { + const self = this; + async.waterfall([ + function makeTheDir(next) { + fs.mkdirp(path.dirname(self.filename), (err) => { + if (err) { + return next(err); + } + next(); + }); + }, + function downloadTheFile(next) { + request(self.path) + .on('response', function (response) { + if (response.statusCode !== 200) { + next('Getting file returned code ' + response.statusCode); + } + }) + .on('error', next) + .pipe(fs.createWriteStream(self.filename)) + .on('finish', () => { + self.path = self.filename; + self.type = File.types.dapp_file; + next(); + }); + }, + function readFile(next) { + fs.readFile(self.path, next); + } + ], (err, content) => { + if (err) { + console.error('Error while downloading the file', err); + return callback(''); + } + callback(content.toString()); + }); + } + + content (callback) { + if (this.type === File.types.embark_internal) { return callback(fs.readFileSync(fs.embarkPath(this.path)).toString()); - } else if (this.type === 'dapp_file') { + } else if (this.type === File.types.dapp_file) { return callback(fs.readFileSync(this.path).toString()); - } else if (this.type === 'custom') { + } else if (this.type === File.types.custom) { return this.resolver(callback); + } else if (this.type === File.types.http) { + this.downloadFile(callback); } else { throw new Error("unknown file: " + this.filename); } @@ -24,4 +67,11 @@ class File { } +File.types = { + embark_internal: 'embark_internal', + dapp_file: 'dapp_file', + custom: 'custom', + http: 'http' +}; + module.exports = File; diff --git a/lib/core/fs.js b/lib/core/fs.js index 7a92126948..d196d99c80 100644 --- a/lib/core/fs.js +++ b/lib/core/fs.js @@ -7,6 +7,10 @@ function mkdirpSync() { return fs.mkdirpSync.apply(fs.mkdirpSync, arguments); } +function mkdirp() { + return fs.mkdirp.apply(fs.mkdirp, arguments); +} + function copySync() { return fs.copySync.apply(fs.copySync, arguments); } @@ -19,6 +23,10 @@ function writeFileSync() { return fs.writeFileSync.apply(fs.writeFileSync, arguments); } +function readFile() { + return fs.readFile.apply(fs.readFile, arguments); +} + function readFileSync() { return fs.readFileSync.apply(fs.readFileSync, arguments); } @@ -54,9 +62,15 @@ function dappPath() { return utils.joinPath(utils.pwd(), ...arguments); } +function createWriteStream() { + return fs.createWriteStream.apply(fs.createWriteStream, arguments); +} + module.exports = { mkdirpSync: mkdirpSync, + mkdirp, copySync: copySync, + readFile, readFileSync: readFileSync, appendFileSync: appendFileSync, writeFileSync: writeFileSync, @@ -65,5 +79,6 @@ module.exports = { existsSync: existsSync, removeSync: removeSync, embarkPath: embarkPath, - dappPath: dappPath + dappPath: dappPath, + createWriteStream }; diff --git a/lib/modules/solidity/index.js b/lib/modules/solidity/index.js index a4f5c035d5..424ab59d2d 100644 --- a/lib/modules/solidity/index.js +++ b/lib/modules/solidity/index.js @@ -27,6 +27,10 @@ class Solidity { } file.content(function(fileContent) { + if (!fileContent) { + self.logger.error('Error while loading the content of ' + filename); + return fileCb(); + } input[filename] = {content: fileContent.replace(/\r\n/g, '\n')}; fileCb(); }); diff --git a/lib/tests/run_tests.js b/lib/tests/run_tests.js index 5ac47a005e..0c41d1e7e7 100644 --- a/lib/tests/run_tests.js +++ b/lib/tests/run_tests.js @@ -1,12 +1,12 @@ -var utils = require('../utils/utils.js'); +const utils = require('../utils/utils.js'); module.exports = { run: function(filepath) { - var Mocha = require('mocha'), - fs = require('fs'), + const Mocha = require('mocha'), + fs = require('fs-extra'), path = require('path'); - var mocha = new Mocha(); + const mocha = new Mocha(); if (filepath) { if (filepath.substr(-1) === '/') { @@ -60,11 +60,14 @@ module.exports = { }; // Run the tests. - let runner = mocha.run(function(failures){ - process.on('exit', function () { - process.exit(failures); // exit with non-zero status if there were failures + let runner = mocha.run(function(failures) { + // Clean contracts folder for next test run + fs.remove('.embark/contracts', (_err) => { + process.on('exit', function () { + process.exit(failures); // exit with non-zero status if there were failures + }); + process.exit(); }); - process.exit(); }); runner.on('suite', function() { diff --git a/package-lock.json b/package-lock.json index 188cefdf9e..3eca91aa38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -89,7 +89,7 @@ "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "integrity": "sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA=", "dev": true }, "ansi-regex": { @@ -228,7 +228,7 @@ "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=" }, "asynckit": { "version": "0.4.0", @@ -1074,7 +1074,7 @@ "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=" }, "bn.js": { "version": "4.11.8", @@ -1439,7 +1439,7 @@ "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", "dev": true }, "clap": { @@ -1647,7 +1647,7 @@ "commander": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8=" }, "commondir": { "version": "1.0.1", @@ -1695,7 +1695,7 @@ "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" }, "convert-source-map": { "version": "1.5.1", @@ -1795,7 +1795,7 @@ "boom": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", "requires": { "hoek": "4.2.1" } @@ -1828,7 +1828,7 @@ "css-loader": { "version": "0.28.11", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "requires": { "babel-code-frame": "6.26.0", "css-selector-tokenizer": "0.7.0", @@ -2012,7 +2012,7 @@ "decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", "requires": { "file-type": "5.2.0", "is-stream": "1.1.0", @@ -2022,7 +2022,7 @@ "decompress-tarbz2": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", "requires": { "decompress-tar": "4.1.1", "file-type": "6.2.0", @@ -2034,14 +2034,14 @@ "file-type": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=" } } }, "decompress-targz": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", "requires": { "decompress-tar": "4.1.1", "file-type": "5.2.0", @@ -2189,7 +2189,7 @@ "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=", "dev": true, "requires": { "esutils": "2.0.2" @@ -2245,7 +2245,7 @@ "ejs": { "version": "2.5.8", "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", - "integrity": "sha512-QIDZL54fyV8MDcAsO91BMH1ft2qGGaHIJsJIA/+t+7uvXol1dm413fPcUgUb4k8F/9457rx4/KFE4XfDifrQxQ==" + "integrity": "sha1-KraVRhnyJeYZO3rF98OcSP7+Q4A=" }, "electron-to-chromium": { "version": "1.3.37", @@ -2424,7 +2424,7 @@ "eslint": { "version": "4.13.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.1.tgz", - "integrity": "sha512-UCJVV50RtLHYzBp1DZ8CMPtRSg4iVZvjgO9IJHIKyWU/AnJVjtdRikoUPLB29n5pzMB7TnsLQWf0V6VUJfoPfw==", + "integrity": "sha1-AFXgAURkx+t4eMr1Se8pQZkrRE8=", "dev": true, "requires": { "ajv": "5.5.2", @@ -2487,7 +2487,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "1.9.1" @@ -2496,7 +2496,7 @@ "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", "dev": true, "requires": { "ansi-styles": "3.2.1", @@ -2507,7 +2507,7 @@ "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", "dev": true, "requires": { "ms": "2.0.0" @@ -2516,13 +2516,13 @@ "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=", "dev": true }, "globals": { "version": "11.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", - "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "integrity": "sha1-uFx5M0lWHBYHajwTVJI4onlF8bw=", "dev": true }, "has-flag": { @@ -2534,7 +2534,7 @@ "js-yaml": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "integrity": "sha1-WXwai9VxUvJtYizkEXhRpR9euu8=", "dev": true, "requires": { "argparse": "1.0.10", @@ -2553,7 +2553,7 @@ "supports-color": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", "dev": true, "requires": { "has-flag": "3.0.0" @@ -2574,7 +2574,7 @@ "espree": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "integrity": "sha1-sPRHGHyKi+2US4FaZgvd9d610ac=", "dev": true, "requires": { "acorn": "5.5.3", @@ -2621,7 +2621,7 @@ "eth-lib": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", + "integrity": "sha1-8LD9FE+GXS1r+CV6QABPLnXKHdY=", "requires": { "bn.js": "4.11.8", "elliptic": "6.4.0", @@ -2936,7 +2936,7 @@ "finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=", "requires": { "debug": "2.6.9", "encodeurl": "1.0.2", @@ -4205,7 +4205,7 @@ "got": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "integrity": "sha1-BUUP2ECU5rvqVvRRpDqcKJFmOFo=", "requires": { "decompress-response": "3.3.0", "duplexer3": "0.1.4", @@ -4552,12 +4552,12 @@ "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==" + "integrity": "sha1-FAn5i8ACR9pF2mfO4KNvKC/yZFU=" }, "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==", + "integrity": "sha1-oEWrOD17SyASoAFIqwql8pAETU0=", "requires": { "has-symbol-support-x": "1.4.2" } @@ -4641,7 +4641,7 @@ "hawk": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", "requires": { "boom": "4.3.1", "cryptiles": "3.1.2", @@ -4662,7 +4662,7 @@ "hoek": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + "integrity": "sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs=" }, "home-or-tmp": { "version": "2.0.0", @@ -4819,7 +4819,7 @@ "ignore": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "integrity": "sha1-YSKJv7PCIOGGpYEYYY1b6MG6sCE=", "dev": true }, "imurmurhash": { @@ -4864,7 +4864,7 @@ "inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=", "dev": true, "requires": { "ansi-escapes": "3.1.0", @@ -4892,7 +4892,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "1.9.1" @@ -4901,7 +4901,7 @@ "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", "dev": true, "requires": { "ansi-styles": "3.2.1", @@ -4927,7 +4927,7 @@ "supports-color": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", "dev": true, "requires": { "has-flag": "3.0.0" @@ -5231,7 +5231,7 @@ "is-path-in-cwd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", "dev": true, "requires": { "is-path-inside": "1.0.1" @@ -5289,7 +5289,7 @@ "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", "dev": true }, "is-retry-allowed": { @@ -5351,7 +5351,7 @@ "isurl": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "integrity": "sha1-sn9PSfPNqj6kSgpbfzRi5u3DnWc=", "requires": { "has-to-string-tag-x": "1.4.1", "is-object": "1.0.1" @@ -5773,7 +5773,7 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=" }, "lru-cache": { "version": "4.1.2", @@ -6070,12 +6070,12 @@ "mime-db": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=" }, "mime-types": { "version": "2.1.18", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=", "requires": { "mime-db": "1.33.0" } @@ -6258,7 +6258,7 @@ "mock-fs": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.4.2.tgz", - "integrity": "sha512-dF+yxZSojSiI8AXGoxj5qdFWpucndc54Ug+TwlpHFaV7j22MGG+OML2+FVa6xAZtjb/OFFQhOC37Jegx2GbEwA==" + "integrity": "sha1-Cd7FMT+XCVpFC+aqKtirZzjWPWs=" }, "mout": { "version": "0.11.1", @@ -6334,7 +6334,7 @@ "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", "requires": { "any-promise": "1.3.0", "object-assign": "4.1.1", @@ -6460,7 +6460,6 @@ "version": "1.0.35", "resolved": "https://registry.npmjs.org/node-webcrypto-ossl/-/node-webcrypto-ossl-1.0.35.tgz", "integrity": "sha1-FCJVeb0J9dY7CtbO4LqAD4xqBg0=", - "optional": true, "requires": { "mkdirp": "0.5.1", "nan": "2.9.2", @@ -6878,7 +6877,7 @@ "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==" + "integrity": "sha1-ueEjgAvOu3rBOkeb4ZW1B7mNMPo=" }, "p-finally": { "version": "1.0.0", @@ -7134,7 +7133,7 @@ "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=", "dev": true }, "posix-character-classes": { @@ -7743,7 +7742,7 @@ "proxy-addr": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "integrity": "sha1-NV8mJQWmIWRrMTCnKOtkfiIFU0E=", "requires": { "forwarded": "0.1.2", "ipaddr.js": "1.6.0" @@ -8168,7 +8167,7 @@ "request": { "version": "2.85.0", "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "integrity": "sha1-WgNhWkfGFCCz65m326IE+DYD4fo=", "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", @@ -8471,7 +8470,7 @@ "servify": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "integrity": "sha1-FCq3vuHx0DO2bQcHCGCFsXwG25U=", "requires": { "body-parser": "1.18.2", "cors": "2.8.4", @@ -8587,7 +8586,7 @@ "simple-get": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.7.0.tgz", - "integrity": "sha512-RkE9rGPHcxYZ/baYmgJtOSM63vH0Vyq+ma5TijBcLla41SWlh8t6XYIGMR/oeZcmr+/G8k+zrClkkVrtnQ0esg==", + "integrity": "sha1-rTf5JtCBKSN/8IxPLt/W8Q4DgLU=", "requires": { "decompress-response": "3.3.0", "once": "1.4.0", @@ -8614,7 +8613,7 @@ "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==", + "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0" @@ -8748,7 +8747,7 @@ "sntp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", "requires": { "hoek": "4.2.1" } @@ -9259,7 +9258,7 @@ "strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", "requires": { "is-natural-number": "4.0.1" } @@ -9351,7 +9350,7 @@ "swarm-js": { "version": "0.1.37", "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", + "integrity": "sha1-J9SFMXo0C77sQCkq94PMEKz6RmM=", "requires": { "bluebird": "3.5.1", "buffer": "5.1.0", @@ -9371,7 +9370,7 @@ "buffer": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "integrity": "sha1-yRPkNnjHy3yL0Wr7zdtsVQXo+f4=", "requires": { "base64-js": "1.2.3", "ieee754": "1.1.8" @@ -9486,7 +9485,7 @@ "tar.gz": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", - "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", + "integrity": "sha1-V37yxZX6qnNFLvBBX+1BETISJXs=", "requires": { "bluebird": "2.11.0", "commander": "2.15.1", @@ -9572,7 +9571,7 @@ "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", "dev": true, "requires": { "os-tmpdir": "1.0.2" @@ -9639,7 +9638,7 @@ "tough-cookie": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", "requires": { "punycode": "1.4.1" } @@ -9694,7 +9693,7 @@ "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", "requires": { "media-typer": "0.3.0", "mime-types": "2.1.18" @@ -9760,12 +9759,12 @@ "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=" }, "unbzip2-stream": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", - "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", + "integrity": "sha1-c6AzpWe7veWWVLGTxE1Ip+T0PEc=", "requires": { "buffer": "3.6.0", "through": "2.3.8" @@ -10027,7 +10026,7 @@ "uuid": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=" }, "validate-npm-package-license": { "version": "3.0.3", @@ -10066,7 +10065,7 @@ "viz.js": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/viz.js/-/viz.js-1.8.1.tgz", - "integrity": "sha512-KrSNgnIxec+JCAqDPliO6xYA69ToH2WTYB2Kbt8Bp/XRUvm23rTyfffFi4rvQLFkIRNUz/xCnnqhh/gChhsgGA==" + "integrity": "sha1-J3qzz0NnxgipWygadHIIPD4u5s8=" }, "vlq": { "version": "0.2.3", @@ -10386,280 +10385,261 @@ } }, "web3": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.27.tgz", - "integrity": "sha1-2afJVr7JgbC6knvbkd0PEnXrNHk=", - "requires": { - "web3-bzz": "1.0.0-beta.27", - "web3-core": "1.0.0-beta.27", - "web3-eth": "1.0.0-beta.27", - "web3-eth-personal": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27", - "web3-shh": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-bzz": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.27.tgz", - "integrity": "sha1-Tmggpc/nOqsG2CV59FBFD76YIqM=", - "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" - } - }, - "web3-core": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.27.tgz", - "integrity": "sha1-TQCb9x5Yt5F2E0EpF+/5ERO0N8M=", - "requires": { - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-requestmanager": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.27.tgz", - "integrity": "sha1-6wlPrTfJ3B1wZt11Zimi1u+6B6I=", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.27.tgz", - "integrity": "sha1-3hTlQL1qdTfXBGcLSeY/BSYgG6o=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-promievent": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.27.tgz", - "integrity": "sha1-0lx9e75NU9+/3KBJ+e1LCmlUvrw=", - "requires": { - "bluebird": "3.3.1", - "eventemitter3": "1.1.1" - }, - "dependencies": { - "bluebird": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", - "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" - } - } - }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.27.tgz", - "integrity": "sha1-Vk7uJEoxCq5abGgyzeLA49wwHpg=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "web3-providers-http": "1.0.0-beta.27", - "web3-providers-ipc": "1.0.0-beta.27", - "web3-providers-ws": "1.0.0-beta.27" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.27.tgz", - "integrity": "sha1-VvKRy1Sn7PgNRzTXL1Sky8uJdzc=", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27" - } - }, - "web3-eth": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.27.tgz", - "integrity": "sha1-hV3Q4BqU1Xhx/9j0n22eyqMXIas=", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-eth-abi": "1.0.0-beta.27", - "web3-eth-accounts": "1.0.0-beta.27", - "web3-eth-contract": "1.0.0-beta.27", - "web3-eth-iban": "1.0.0-beta.27", - "web3-eth-personal": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.27.tgz", - "integrity": "sha1-RS6dk3YVYL4yNE7juJddD7JLvb4=", - "requires": { - "bn.js": "4.11.6", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.34.tgz", + "integrity": "sha1-NH5WG3hAmMtVYzFfSQR5odkfKrE=", + "requires": { + "web3-bzz": "1.0.0-beta.34", + "web3-core": "1.0.0-beta.34", + "web3-eth": "1.0.0-beta.34", + "web3-eth-personal": "1.0.0-beta.34", + "web3-net": "1.0.0-beta.34", + "web3-shh": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" }, "dependencies": { "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.27.tgz", - "integrity": "sha1-mUDCjl48kg1nz2iH6pxS8c3Re3k=", - "requires": { - "bluebird": "3.3.1", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.5", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - }, - "dependencies": { - "bluebird": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", - "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" - }, - "eth-lib": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.5.tgz", - "integrity": "sha512-pXs4ryU+7S8MPpkQpNqG4JlXEec87kbXowQbYzRVV+c5XUccrO6WOxVPDicxql1AXSBzfmBSFVkvvG+H4htuxg==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "xhr-request-promise": "0.1.2" - } }, "uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.27.tgz", - "integrity": "sha1-AS96XVnaZ+KWxzWo8pcK7N0gfn0=", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-promievent": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-eth-abi": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.27.tgz", - "integrity": "sha1-RDPCj0F8Oa+WMzoGpK+h/NSqaEI=", - "requires": { - "bn.js": "4.11.8", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.27.tgz", - "integrity": "sha1-ukiaNIdkpKswOItcwcblm9bq7Ks=", - "requires": { - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-net": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.27.tgz", - "integrity": "sha1-eulTbsOf7Rou6zjALm48jt/oq30=", - "requires": { - "web3-core": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-providers-http": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.27.tgz", - "integrity": "sha1-LwrhYJvF5KNb4lgYzX/HfeBitqY=", - "requires": { - "web3-core-helpers": "1.0.0-beta.27", - "xhr2": "0.1.4" - } - }, - "web3-providers-ipc": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.27.tgz", - "integrity": "sha1-oFwkIe/+TEfxX0efeSUTWtCUJ2I=", - "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27" - } - }, - "web3-providers-ws": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.27.tgz", - "integrity": "sha1-bUZ4Geoi3foba6FJjTHZVU4rBt0=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#7004c39c42ac98875ab61126e5b4a925430f592c" - } - }, - "web3-shh": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.27.tgz", - "integrity": "sha1-b3bW6yoma769zwqjDFo62J82e38=", - "requires": { - "web3-core": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27" - } - }, - "web3-utils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.27.tgz", - "integrity": "sha1-0JfVwzaha59sqbYK9o3RXAZDIUs=", - "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "web3-bzz": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.34.tgz", + "integrity": "sha1-Bo03d3q2Xlxg+OyLmlDP5FJ3kpw=", + "requires": { + "got": "7.1.0", + "swarm-js": "0.1.37", + "underscore": "1.8.3" + } + }, + "web3-core": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.34.tgz", + "integrity": "sha1-EhvoVV6fsA0sXQXd0zgdDJ5GmH4=", + "requires": { + "web3-core-helpers": "1.0.0-beta.34", + "web3-core-method": "1.0.0-beta.34", + "web3-core-requestmanager": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.34.tgz", + "integrity": "sha1-sWjaANPhnhVrwVriAyA91N/uLQM=", + "requires": { + "underscore": "1.8.3", + "web3-eth-iban": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.34.tgz", + "integrity": "sha1-7BY8iixJD6AqfsFVWfpzB/x8xt0=", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.34", + "web3-core-promievent": "1.0.0-beta.34", + "web3-core-subscriptions": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-core-promievent": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.34.tgz", + "integrity": "sha1-pPT6Z4S7KT6CxglgrltWqUzQPtw=", + "requires": { + "any-promise": "1.3.0", + "eventemitter3": "1.1.1" + } + }, + "web3-core-requestmanager": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.34.tgz", + "integrity": "sha1-Afj2zyrmtvC3DDi64e90G1urIVw=", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.34", + "web3-providers-http": "1.0.0-beta.34", + "web3-providers-ipc": "1.0.0-beta.34", + "web3-providers-ws": "1.0.0-beta.34" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.34.tgz", + "integrity": "sha1-n+0UQDPyIcPPIQYDAv/a9e8t4t4=", + "requires": { + "eventemitter3": "1.1.1", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.34" + } + }, + "web3-eth": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.34.tgz", + "integrity": "sha1-dAhgAIUMb+b1Ne9Jg31tS7YRMmg=", + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.34", + "web3-core-helpers": "1.0.0-beta.34", + "web3-core-method": "1.0.0-beta.34", + "web3-core-subscriptions": "1.0.0-beta.34", + "web3-eth-abi": "1.0.0-beta.34", + "web3-eth-accounts": "1.0.0-beta.34", + "web3-eth-contract": "1.0.0-beta.34", + "web3-eth-iban": "1.0.0-beta.34", + "web3-eth-personal": "1.0.0-beta.34", + "web3-net": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.34.tgz", + "integrity": "sha1-A0Uz46ovfln/MXk+rqaFwO1a9no=", + "requires": { + "bn.js": "4.11.6", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-eth-accounts": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.34.tgz", + "integrity": "sha1-4JFC7uzHl6w0WbdemyOUbTaV8zM=", + "requires": { + "any-promise": "1.3.0", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.7", + "scrypt.js": "0.2.0", + "underscore": "1.8.3", + "uuid": "2.0.1", + "web3-core": "1.0.0-beta.34", + "web3-core-helpers": "1.0.0-beta.34", + "web3-core-method": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + "requires": { + "bn.js": "4.11.6", + "elliptic": "6.4.0", + "xhr-request-promise": "0.1.2" + } + } + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.34.tgz", + "integrity": "sha1-nbs4+udkOoCEJ6IBgEcOx0FckeY=", + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.34", + "web3-core-helpers": "1.0.0-beta.34", + "web3-core-method": "1.0.0-beta.34", + "web3-core-promievent": "1.0.0-beta.34", + "web3-core-subscriptions": "1.0.0-beta.34", + "web3-eth-abi": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.34.tgz", + "integrity": "sha1-mvRYYFhnzPdOqXmq8yazi6alugw=", + "requires": { + "bn.js": "4.11.6", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-eth-personal": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.34.tgz", + "integrity": "sha1-mvuhZzQuveVCC81YlcP2w0OI8gU=", + "requires": { + "web3-core": "1.0.0-beta.34", + "web3-core-helpers": "1.0.0-beta.34", + "web3-core-method": "1.0.0-beta.34", + "web3-net": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-net": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.34.tgz", + "integrity": "sha1-QnzqL0MYgUScjjjVIykPFz+f9j0=", + "requires": { + "web3-core": "1.0.0-beta.34", + "web3-core-method": "1.0.0-beta.34", + "web3-utils": "1.0.0-beta.34" + } + }, + "web3-providers-http": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.34.tgz", + "integrity": "sha1-5WG1K7tDdmKCAH1AKFv+NVDCfno=", + "requires": { + "web3-core-helpers": "1.0.0-beta.34", + "xhr2": "0.1.4" + } + }, + "web3-providers-ipc": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.34.tgz", + "integrity": "sha1-obd/GjBtc2SanAOQUuQMtxMo0Ao=", + "requires": { + "oboe": "2.1.3", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.34" + } + }, + "web3-providers-ws": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.34.tgz", + "integrity": "sha1-fecPG4Py3jZHZ3IVa+z+9uNRbrM=", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.34", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#7004c39c42ac98875ab61126e5b4a925430f592c" + } + }, + "web3-shh": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.34.tgz", + "integrity": "sha1-l1Bh1x6uxCzO5Xb3vY9w8DhEr+A=", + "requires": { + "web3-core": "1.0.0-beta.34", + "web3-core-method": "1.0.0-beta.34", + "web3-core-subscriptions": "1.0.0-beta.34", + "web3-net": "1.0.0-beta.34" + } + }, + "web3-utils": { + "version": "1.0.0-beta.34", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.34.tgz", + "integrity": "sha1-lBH8OarvOcpOBhafdiKX2f8CCXA=", + "requires": { + "bn.js": "4.11.6", + "eth-lib": "0.1.27", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.8.3", + "utf8": "2.1.1" + } } } }, @@ -10667,7 +10647,6 @@ "version": "0.1.19", "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-0.1.19.tgz", "integrity": "sha1-8CTjoCu8oW3tRtJpaMQlNaORJNw=", - "optional": true, "requires": { "tslib": "1.9.0" } @@ -10832,7 +10811,7 @@ "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=", "requires": { "async-limiter": "1.0.0", "safe-buffer": "5.1.1", @@ -10842,7 +10821,7 @@ "xhr": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.1.tgz", - "integrity": "sha512-pAIU5vBr9Hiy5cpFIbPnwf0C18ZF86DBsZKrlsf87N5De/JbA6RJ83UP/cv+aljl4S40iRVMqP4pr4sF9Dnj0A==", + "integrity": "sha1-upgsztIFrl7sOHFprJ3HfKSFPTg=", "requires": { "global": "4.3.2", "is-function": "1.0.1", @@ -10853,7 +10832,7 @@ "xhr-request": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "integrity": "sha1-9KfBhoufGYcjRE2C3K4xdkPy4u0=", "requires": { "buffer-to-arraybuffer": "0.0.5", "object-assign": "4.1.1", @@ -10867,7 +10846,7 @@ "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==", + "integrity": "sha1-p4wBK3HBfgXy4/ojGd0zBoLvs8s=", "requires": { "decode-uri-component": "0.2.0", "object-assign": "4.1.1", diff --git a/package.json b/package.json index ff6c94ef66..fd8a1d65cd 100644 --- a/package.json +++ b/package.json @@ -24,11 +24,11 @@ "async": "^2.0.1", "babel-core": "^6.26.0", "babel-loader": "^7.1.2", + "babel-plugin-webpack-aliases": "^1.1.3", "babel-preset-es2015": "^6.24.1", "babel-preset-es2016": "^6.24.1", "babel-preset-es2017": "6.24.1", "babel-preset-react": "^6.24.1", - "babel-plugin-webpack-aliases": "^1.1.3", "blessed": "^0.1.81", "chokidar": "^1.6.0", "colors": "^1.1.2", @@ -49,6 +49,7 @@ "parse-json": "^4.0.0", "promptly": "^2.1.0", "propose": "0.0.5", + "request": "^2.85.0", "serve-static": "^1.11.1", "shelljs": "^0.5.0", "solc": "0.4.17", diff --git a/test/compiler.js b/test/compiler.js index 24377df041..bc71946310 100644 --- a/test/compiler.js +++ b/test/compiler.js @@ -5,7 +5,7 @@ let File = require('../lib/core/file.js'); let assert = require('assert'); let readFile = function(file) { - return new File({filename: file, type: 'dapp_file', path: file}); + return new File({filename: file, type: File.types.dapp_file, path: file}); }; var solcVersion = "0.4.17"; diff --git a/test/config.js b/test/config.js index eb04d9709b..82c1485a22 100644 --- a/test/config.js +++ b/test/config.js @@ -1,17 +1,19 @@ /*globals describe, it*/ -let Config = require('../lib/core/config.js'); -let Plugins = require('../lib/core/plugins.js'); -let assert = require('assert'); +const Config = require('../lib/core/config.js'); +const Plugins = require('../lib/core/plugins.js'); +const assert = require('assert'); +const TestLogger = require('../lib/tests/test_logger.js'); -describe('embark.Config', function() { +describe('embark.Config', function () { let config = new Config({ env: 'myenv', configDir: './test/test1/config/' }); config.plugins = new Plugins({plugins: {}}); + config.logger = new TestLogger({}); - describe('#loadBlockchainConfigFile', function() { - it('should load blockchain config correctly', function() { + describe('#loadBlockchainConfigFile', function () { + it('should load blockchain config correctly', function () { config.loadBlockchainConfigFile(); let expectedConfig = { "enabled": true, @@ -32,31 +34,129 @@ describe('embark.Config', function() { }); }); - describe('#loadContractsConfigFile', function() { - it('should load contract config correctly', function() { - config.loadContractsConfigFile(); - let expectedConfig = { - versions: { 'web3.js': '1.0.0-beta', solc: '0.4.17' }, - deployment: { host: 'localhost', port: 8545, type: 'rpc' }, - dappConnection: [ '$WEB3', 'localhost:8545' ], - "gas": "auto", - "contracts": { - "SimpleStorage": { - "args": [ - 100 - ], - "gas": 123456 - }, - "Token": { - "args": [ - 200 - ] - } + describe('#loadContractsConfigFile', function () { + it('should load contract config correctly', function () { + config.loadContractsConfigFile(); + let expectedConfig = { + versions: {'web3.js': '1.0.0-beta', solc: '0.4.17'}, + deployment: {host: 'localhost', port: 8545, type: 'rpc'}, + dappConnection: ['$WEB3', 'localhost:8545'], + "gas": "auto", + "contracts": { + "SimpleStorage": { + "args": [100], + "gas": 123456 + }, + "Token": { + "args": [200] } - }; + } + }; + + assert.deepEqual(config.contractsConfig, expectedConfig); + }); + }); + + describe('#getExternalContractUrl', function () { + it('should get the right url for a https://github file', function () { + const url = config.getExternalContractUrl( + {file: 'https://github.com/embark-framework/embark/blob/master/test_app/app/contracts/simple_storage.sol'} + ); + assert.strictEqual(url, + 'https://raw.githubusercontent.com/embark-framework/embark/master/test_app/app/contracts/simple_storage.sol'); + }); + + it('should fail for a malformed https://github file', function () { + const url = config.getExternalContractUrl( + {file: 'https://github/embark-framework/embark/blob/master/test_app/app/contracts/simple_storage.sol'} + ); + assert.strictEqual(url, ''); + }); + + it('should get the right url for a git:// file with no branch #', function () { + const url = config.getExternalContractUrl( + {file: 'git://github.com/status-im/contracts/contracts/identity/ERC725.sol'} + ); + console.log(url); + assert.strictEqual(url, + 'https://raw.githubusercontent.com/status-im/contracts/master/contracts/identity/ERC725.sol'); + }); + + it('should get the right url for a git:// file with a branch #', function () { + const url = config.getExternalContractUrl( + {file: 'git://github.com/status-im/contracts/contracts/identity/ERC725.sol#myBranch'} + ); + assert.strictEqual(url, + 'https://raw.githubusercontent.com/status-im/contracts/myBranch/contracts/identity/ERC725.sol'); + }); + + it('should fail when the git:// file is malformed', function () { + const url = config.getExternalContractUrl( + {file: 'git://github.com/identity/ERC725.sol#myBranch'} + ); + assert.strictEqual(url, ''); + }); + + it('should get the right url with a github.com file without branch #', function () { + const url = config.getExternalContractUrl( + {file: 'github.com/status-im/contracts/contracts/identity/ERC725.sol'} + ); + assert.strictEqual(url, + 'https://raw.githubusercontent.com/status-im/contracts/master/contracts/identity/ERC725.sol'); + }); + + it('should get the right url with a github.com file with branch #', function () { + const url = config.getExternalContractUrl( + {file: 'github.com/status-im/contracts/contracts/identity/ERC725.sol#theBranch'} + ); + assert.strictEqual(url, + 'https://raw.githubusercontent.com/status-im/contracts/theBranch/contracts/identity/ERC725.sol'); + }); - assert.deepEqual(config.contractsConfig, expectedConfig); + it('should fail with a malformed github.com url', function () { + const url = config.getExternalContractUrl( + {file: 'github/status-im/contracts/contracts/identity/ERC725.sol#theBranch'} + ); + assert.strictEqual(url, ''); + }); + + it('should succeed with a generic http url', function () { + const url = config.getExternalContractUrl( + {file: 'http://myurl.com/myFile.sol'} + ); + assert.strictEqual(url, 'http://myurl.com/myFile.sol'); }); }); + describe('#loadExternalContractsFiles', function () { + it('should create the right list of files and download', function () { + config.contractsFiles = []; + config.contractsConfig.contracts = [ + { + file: 'https://github.com/embark-framework/embark/blob/master/test_app/app/contracts/simple_storage.sol' + }, + { + file: 'github.com/status-im/contracts/contracts/identity/ERC725.sol' + } + ]; + const expected = [ + { + "filename": ".embark/contracts/simple_storage.sol", + "type": "http", + "path": "https://raw.githubusercontent.com/embark-framework/embark/master/test_app/app/contracts/simple_storage.sol", + "basedir": "", + "resolver": undefined + }, + { + "filename": ".embark/contracts/ERC725.sol", + "type": "http", + "path": "https://raw.githubusercontent.com/status-im/contracts/master/contracts/identity/ERC725.sol", + "basedir": "", + "resolver": undefined + } + ]; + config.loadExternalContractsFiles(); + assert.deepEqual(config.contractsFiles, expected); + }); + }); }); diff --git a/test/contracts.js b/test/contracts.js index 4de8db568d..466ed101cd 100644 --- a/test/contracts.js +++ b/test/contracts.js @@ -4,13 +4,12 @@ let Logger = require('../lib/core/logger.js'); let File = require('../lib/core/file.js'); let TestLogger = require('../lib/tests/test_logger.js'); let assert = require('assert'); -let fs = require('fs'); //let SolidityCompiler = require('../lib/modules/solidity'); let Plugins = require('../lib/core/plugins.js'); let readFile = function(file) { - return new File({filename: file, type: 'dapp_file', path: file}); + return new File({filename: file, type: File.types.dapp_file, path: file}); }; describe('embark.Contracts', function() { diff --git a/test_apps/test_app/config/contracts.json b/test_apps/test_app/config/contracts.json index c2cd9b55b4..3ae09f3416 100644 --- a/test_apps/test_app/config/contracts.json +++ b/test_apps/test_app/config/contracts.json @@ -71,6 +71,9 @@ "args": [ 1000 ] + }, + "ERC725": { + "file": "https://github.com/status-im/contracts/blob/master/contracts/identity/ERC725.sol" } }, "afterDeploy": [ diff --git a/test_apps/test_app/package-lock.json b/test_apps/test_app/package-lock.json index 610885cd9f..73520be33a 100644 --- a/test_apps/test_app/package-lock.json +++ b/test_apps/test_app/package-lock.json @@ -48,6 +48,11 @@ } } }, + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, "bootstrap": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", @@ -84,7 +89,12 @@ "dom-helpers": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", - "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg==" + "integrity": "sha1-/BpOFf/fYN3eA6SAqcD+zoId1KY=" + }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" }, "embark-service": { "version": "file:extensions/embark-service", @@ -118,6 +128,16 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, + "ethjs-abi": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", + "integrity": "sha1-4KepOn6BFjqUR3utVu3lJKtt5TM=", + "requires": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" + } + }, "fbjs": { "version": "0.8.16", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", @@ -154,6 +174,11 @@ "loose-envify": "1.3.1" } }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -173,6 +198,11 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-1.12.4.tgz", "integrity": "sha1-AeHfuikP5z3rp3zurLD5ui/sngw=" }, + "js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=" + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -194,12 +224,21 @@ "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { "encoding": "0.1.12", "is-stream": "1.1.0" } }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -208,7 +247,7 @@ "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { "asap": "2.0.6" } @@ -245,7 +284,7 @@ "react-bootstrap": { "version": "0.32.1", "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.32.1.tgz", - "integrity": "sha512-RbfzKUbsukWsToWqGHfCCyMFq9QQI0TznutdyxyJw6dih2NvIne25Mrssg8LZsprqtPpyQi8bN0L0Fx3fUsL8Q==", + "integrity": "sha1-YGJMG0ijnXc+9szmQhpPM+zBZrs=", "requires": { "babel-runtime": "6.26.0", "classnames": "2.2.5", @@ -275,7 +314,7 @@ "react-overlays": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.8.3.tgz", - "integrity": "sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA==", + "integrity": "sha1-+tZe6lskMBzKGSoWn13dsLINOsU=", "requires": { "classnames": "2.2.5", "dom-helpers": "3.3.1", @@ -309,7 +348,7 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" }, "setimmediate": { "version": "1.0.5", @@ -325,6 +364,14 @@ "ansi-regex": "2.1.1" } }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -334,7 +381,7 @@ "ua-parser-js": { "version": "0.7.17", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" + "integrity": "sha1-6exflJi57JEOeuOsYmqAXE0J7Kw=" }, "uncontrollable": { "version": "4.1.0", @@ -356,6 +403,15 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + }, + "zeppelin-solidity": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.8.0.tgz", + "integrity": "sha1-BJ/N59rqn8hSEPjG25+M0auKhTo=", + "requires": { + "dotenv": "4.0.0", + "ethjs-abi": "0.2.1" + } } } } diff --git a/test_apps/test_app/test/http_contract_test.js b/test_apps/test_app/test/http_contract_test.js new file mode 100644 index 0000000000..0c515f1d8d --- /dev/null +++ b/test_apps/test_app/test/http_contract_test.js @@ -0,0 +1,18 @@ +/*globals describe, it*/ +const fs = require('fs-extra'); +const assert = require('assert'); + +describe('http contracts', () => { + describe('ERC725', () => { + const contractPath = '.embark/contracts/ERC725.sol'; + + it('should have downloaded the file in .embark/contracts', (done) => { + fs.access(contractPath, (err) => { + if (err) { + assert.fail(contractPath + ' was not downloaded'); + } + done(); + }); + }); + }); +}); diff --git a/test_apps/test_app/test/token_spec.js b/test_apps/test_app/test/token_spec.js index f101a7898b..c76728c048 100644 --- a/test_apps/test_app/test/token_spec.js +++ b/test_apps/test_app/test/token_spec.js @@ -1,3 +1,4 @@ +/*global describe, it, before*/ describe("Token", function() {