diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..b77f5b056 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,147 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "type": "node", + "request": "launch", + "name": "Embark: Mocha All", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "--colors", + "--no-timeouts", + "${workspaceFolder}/test/" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Embark: Mocha Current File", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "--colors", + "--no-timeouts", + "${file}" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Embark: embark test", + "autoAttachChildProcesses": true, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/lib/tests/test_embark", + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Test app: Embark test", + "cwd": "${workspaceFolder}/test_apps/test_app/", + "autoAttachChildProcesses": true, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/bin/embark", + "args": [ + "test" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Test app: Embark new testapp123", + "cwd": "${workspaceFolder}/test_apps/test_app/", + "autoAttachChildProcesses": true, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/bin/embark", + "args": [ + "new", + "testapp123" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Test app: Embark upload", + "cwd": "${workspaceFolder}/test_apps/test_app/", + "autoAttachChildProcesses": true, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/bin/embark", + "args": [ + "upload" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Test app: Embark run", + "cwd": "${workspaceFolder}/test_apps/test_app/", + "autoAttachChildProcesses": true, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/bin/embark", + "args": [ + "run", + "--nodashboard" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Embark demo from main repo: Embark run", + "cwd": "${workspaceFolder}/../../embk-fw/embark/embark_demo/", + "autoAttachChildProcesses": true, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/bin/embark", + "args": [ + "run" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Embark demo from dapp-bin: Embark run", + "cwd": "${workspaceFolder}/../../embk-fw/dapp-bin/embark_demo/", + "autoAttachChildProcesses": false, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/bin/embark", + "args": [ + "run", + "--nodashboard" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + { + "type": "node", + "request": "launch", + "name": "Embark react routes demo: Embark run", + "cwd": "${workspaceFolder}/../../emizzle/embark-demo-react-routes/", + "autoAttachChildProcesses": true, + //"preLaunchTask": "npm_install", + "program": "${workspaceFolder}/bin/embark", + "args": [ + "run" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + } + + ] +} \ No newline at end of file diff --git a/lib/modules/ipfs/index.js b/lib/modules/ipfs/index.js index f28dd8817..e01afa7aa 100644 --- a/lib/modules/ipfs/index.js +++ b/lib/modules/ipfs/index.js @@ -61,10 +61,10 @@ class IPFS { return cb({name: "IPFS ", status: 'off'}); } if (body.Version) { - self.logger.trace("Swarm available"); + self.logger.trace("IPFS available"); return cb({name: ("IPFS " + body.Version), status: 'on'}); } - self.logger.trace("Swarm available"); + self.logger.trace("IPFS available"); return cb({name: "IPFS ", status: 'on'}); } }); diff --git a/lib/modules/solidity/index.js b/lib/modules/solidity/index.js index f665144b2..9fbc50eb8 100644 --- a/lib/modules/solidity/index.js +++ b/lib/modules/solidity/index.js @@ -75,7 +75,10 @@ class Solidity { } }; - self.solcW.compile(jsonObj, function (output) { + self.solcW.compile(jsonObj, function (err, output) { + if(err){ + return callback(err); + } if (output.errors) { for (let i=0; i { + return new Promise((resolve) => { let manager = new PluginManager({pluginsPath: packagePath}); + let timer; + if (!fs.existsSync(packagePath)) { + timer = new NpmTimer({logger: self._logger, packageName: 'solc', version: solcVersion, showSpinner: true}); + } + + if(timer) timer.start(); manager.install('solc', solcVersion).then(() => { self.solc = manager.require('solc'); + if(timer) timer.end(); resolve(); }); + }); } compile(jsonObj, cb) { // TODO: only available in 0.4.11; need to make versions warn about this - let output = this.solc.compileStandardWrapper(JSON.stringify(jsonObj), this.findImports); - cb(output); + try { + let output = this.solc.compileStandardWrapper(JSON.stringify(jsonObj), this.findImports); + cb(null, output); + } catch (err) { + cb(err.message); + } } } let solcProcess; - -process.on('message', function (msg) { +process.on('message', (msg) => { if (msg.action === "init") { solcProcess = new SolcProcess(msg.options); - return this.send({result: "initiated"}); + return process.send({result: "initiated"}); } else if (msg.action === 'loadCompiler') { - require('solc'); - return this.send({result: "loadedCompiler"}); + solcProcess.solc = require('solc'); + return process.send({result: "loadedCompiler"}); } else if (msg.action == 'installAndLoadCompiler') { solcProcess.installAndLoadCompiler(msg.solcVersion, msg.packagePath).then(() => { - return this.send({result: "loadedCompiler"}); + return process.send({result: "loadedCompiler"}); }); } else if (msg.action === 'compile') { - solcProcess.compile(msg.jsonObj, (output) => { - this.send({result: "compilation-" + msg.id, output: output}); + solcProcess.compile(msg.jsonObj, (err, output) => { + process.send({result: "compilation-" + msg.id, err: err, output: output}); }); } }); diff --git a/lib/modules/solidity/solcW.js b/lib/modules/solidity/solcW.js index 4fa33c824..bc5df52ea 100644 --- a/lib/modules/solidity/solcW.js +++ b/lib/modules/solidity/solcW.js @@ -60,8 +60,7 @@ class SolcW { self.compilerLoaded = true; done(); }); - - this.solcProcess.send({action: "init", options: {}}); + this.solcProcess.send({action: "init", options: {logger: self.logger}}); if (this.ipc.isServer()) { this.ipc.on('compile', self.compile.bind(this)); @@ -80,7 +79,10 @@ class SolcW { } this.solcProcess.once('result', 'compilation-' + id, (msg) => { - done(JSON.parse(msg.output)); + if(msg.err) { + return done(msg.err); + } + done(null, JSON.parse(msg.output)); }); this.solcProcess.send({action: 'compile', jsonObj: jsonObj, id}); diff --git a/lib/modules/swarm/index.js b/lib/modules/swarm/index.js index d5affec64..1c79b1e02 100644 --- a/lib/modules/swarm/index.js +++ b/lib/modules/swarm/index.js @@ -80,7 +80,12 @@ class Swarm { let currentPIterationVersion = require('../../../package.json').dependencies["p-iteration"]; if (pIterationVersion !== currentPIterationVersion) { self.events.request("version:getPackageLocation", "p-iteration", pIterationVersion, function(err, location) { - self.embark.registerImportFile("p-iteration", fs.dappPath(location)); + if(!err){ + self.embark.registerImportFile("p-iteration", fs.dappPath(location)); + } + else{ + self.logger.error("Error getting package location for p-iteration: " + err); + } }); } }); diff --git a/lib/versions/library_manager.js b/lib/versions/library_manager.js index bf631f449..b5cc3d8a5 100644 --- a/lib/versions/library_manager.js +++ b/lib/versions/library_manager.js @@ -64,13 +64,12 @@ class LibraryManager { } listenToCommandsToGetLibrary() { + let npm = new Npm({logger: this.embark.logger}); this.embark.events.setCommandHandler('version:getPackageLocation', (libName, version, cb) => { - let npm = new Npm({logger: this.embark.logger, packageName: libName, version:version}); npm.getPackageVersion(libName, version, cb); }); this.embark.events.setCommandHandler('version:getPackagePath', (libName, version, cb) => { - let npm = new Npm({logger: this.embark.logger, packageName: libName, version:version}); - cb(null, npm.packagePath); + cb(null, Npm.getPackagePath(libName, version)); }); } diff --git a/lib/versions/npm.js b/lib/versions/npm.js index 14de604c3..1e58c0cc2 100644 --- a/lib/versions/npm.js +++ b/lib/versions/npm.js @@ -1,128 +1,57 @@ const fs = require('../core/fs.js'); -const {PerformanceObserver, performance} = require('perf_hooks'); const PluginManager = require('live-plugin-manager-git-fix').PluginManager; require('colors'); -const _ = require('underscore'); +const NpmTimer = require('./npmTimer'); class Npm { constructor(options) { - this.logger = options.logger; - this.packageName = options.packageName; - this.version = options.version; + this._logger = options.logger; + this._packageName = options.packageName; + this._version = options.version; + this._installing = {}; } - get packagePath(){ - if(typeof this._packagePath == 'undefined'){ - this._packagePath = './.embark/versions/' + this.packageName + '/' + this.version + '/'; - } - return this._packagePath; + static getPackagePath(packageName, version){ + return './.embark/versions/' + packageName + '/' + version + '/' + packageName; } - get pluginManager(){ - if(typeof this._pluginManager == 'undefined'){ - this._pluginManager = new PluginManager({pluginsPath: this.packagePath}); - } - return this._pluginManager; + _isInstalling(packageName, version){ + return typeof this._installing[packageName + version] != 'undefined'; } getPackageVersion(packageName, version, callback) { + const packagePath = Npm.getPackagePath(packageName, version); - if (fs.existsSync(this.packagePath + packageName)) { - return callback(null, this.packagePath + packageName); + // check if this package already exists in the filesystem + if (fs.existsSync(packagePath)) { + return callback(null, packagePath); } - this.logger.info(__("Downloading and installing {{packageName}} {{version}}...", {packageName: packageName, version: version})); - - const obsMeasure = new PerformanceObserver((items) => { - let entry; - let strDuration; - - // find any download ongoing measurements we've made - entry = _.last(_.where(items.getEntries(), {name: downloadOngoing})); - if(entry){ - // ongoing performance mark - strDuration = __('Downloading and installing {{packageName}} {{version}}... ({{duration}}ms elapsed)', {packageName: packageName, version: version, duration: entry.duration}); - } - else{ - // otherwise, find our download complete measurement - entry = _.last(_.where(items.getEntries(), {name: downloadComplete})); - - if(entry){ - strDuration = __('Finished downloading and installing {{packageName}} {{version}} in {{duration}}ms', {packageName: packageName, version: version, duration: entry.duration}); - performance.clearMarks(); - } - } - - // log our measurement and make it red if it has taken too long - if(entry && strDuration){ - if(entry.duration > 4000){ - strDuration = strDuration.red; - } - this.logger.info(strDuration); - } - - }); - obsMeasure.observe({entryTypes: ['measure']}); - - // define mark and measurement names - let startMark = 'downloadStart' + packageName + version; - let ongoingMark = 'downloadOngoingMark' + packageName + version; - let downloadOngoing = 'downloadOngoing' + packageName + version; - let endMark = 'downloadEnd' + packageName + version; - let downloadComplete = 'downloadComplete' + packageName + version; - - // mark our start time - performance.mark(startMark); + const pluginManager = new PluginManager({pluginsPath: './.embark/versions/' + packageName + '/' + version + '/'}); - // function that continually updates the console to show user that we're downloading a library - let intOngoingDownload = setInterval( - function(){ - performance.mark(ongoingMark); - performance.measure(downloadOngoing, startMark, ongoingMark); - }, 750); + // check if we're already installing this package + if(this._isInstalling(packageName, version)){ + this._installing[packageName + version].push(callback); + }else{ + this._installing[packageName + version] = new Array(callback); - // do the package download/install - this.pluginManager.install(packageName, version).then((result) => { + + const timer = new NpmTimer({logger: this._logger, packageName: packageName, version: version}); + timer.start(); - // if(packageName === 'solc'){ - - // async.each(Object.keys(result.dependencies), function(dependency, cb){ - - // console.log('getting dependency: ' + dependency + ' ' + result.dependencies[dependency]); - - // self.pluginManager.install(dependency, result.dependencies[dependency]).then(() => { - // console.log('installed ' + dependency + ' ' + result.dependencies[dependency]); - // cb(); - // }) - // .catch(cb); - - // }, function(err){ - - // // stop updating console for ongoing download - // clearInterval(intOngoingDownload); - // performance.mark(endMark); - // performance.measure(downloadComplete, startMark, endMark); - - // if(err){ - // self.logger.error(err); - // return callback(err); - // }else{ - // return callback(null, result.location, self.pluginManager); - // } - // }); - // } - // else{ - - // stop updating console for ongoing download - clearInterval(intOngoingDownload); - performance.mark(endMark); - performance.measure(downloadComplete, startMark, endMark); - - callback(null, result.location); - - //} - }).catch(callback); + // do the package download/install + pluginManager.install(packageName, version).then((result) => { + timer.end(); + this._installing[packageName + version].forEach((cb) => { + cb(null, result.location); + }); + delete this._installing[packageName + version]; + //callback(null, result.location); + }).catch(err => { + callback(err); + }); + } } } diff --git a/lib/versions/npmTimer.js b/lib/versions/npmTimer.js new file mode 100644 index 000000000..efe891e3d --- /dev/null +++ b/lib/versions/npmTimer.js @@ -0,0 +1,109 @@ +const {PerformanceObserver, performance} = require('perf_hooks'); +const _ = require('underscore'); +require('colors'); +const i18n = require('../i18n/i18n.js'); +i18n.setOrDetectLocale('en'); + + +class NpmTimer{ + constructor(options){ + this._logger = options.logger; + this._packageName = options.packageName; + this._version = options.version; + this._showSpinner = options.showSpinner || false; + this._spinnerStyle = options.spinnerStyle || 'dots'; + this._interval = options.interval || 750; + + // define mark and measurement names + this._startMark = 'downloadStart' + this._packageName + this._version; + this._ongoingMark = 'downloadOngoingMark' + this._packageName + this._version; + this._downloadOngoing = 'downloadOngoing' + this._packageName + this._version; + this._endMark = 'downloadEnd' + this._packageName + this._version; + this._downloadComplete = 'downloadComplete' + this._packageName + this._version; + + this.observer.observe({entryTypes: ['measure']}); + + + } + + get observer(){ + if(typeof this._observer == 'undefined'){ + this._observer = new PerformanceObserver((items) => { + let entry; + let strDuration; + + // find any download ongoing measurements we've made + entry = _.last(_.where(items.getEntries(), {name: this._downloadOngoing})); + if(entry){ + // ongoing performance mark + strDuration = __('Downloading and installing {{packageName}} {{version}}... ({{duration}}ms elapsed)', {packageName: this._packageName, version: this._version, duration: entry.duration}); + if(this._spinner) this._spinner.text = strDuration; + } + else{ + // otherwise, find our download complete measurement + entry = _.last(_.where(items.getEntries(), {name: this._downloadComplete})); + + if(entry){ + strDuration = __('Finished downloading and installing {{packageName}} {{version}} in {{duration}}ms', {packageName: this._packageName, version: this._version, duration: entry.duration}); + performance.clearMarks(); + if(this._spinner) this._spinner.succeed(strDuration); + } + } + + // log our measurement and make it red if it has taken too long + if(!this._showSpinner && entry && strDuration){ + if(entry.duration > 4000){ + strDuration = strDuration.red; + } + this._log(strDuration); + } + + }); + } + return this._observer; + } + + _log(msg){ + if(typeof this._logger.info == 'function'){ + this._logger.info(msg); + } + else{ // occurs in subprocess as functions are not serialised/deserialised properly + console.log(msg.green); + } + } + + start(){ + let self = this; + + const strDownloadStart = __("Downloading and installing {{packageName}} {{version}}...", {packageName: this._packageName, version: this._version}); + if(this._showSpinner){ + const ora = require('ora'); + this._spinner = ora({ + spinner: this._spinnerStyle, + text: strDownloadStart + }).start(); + }else{ + this._log(strDownloadStart); + } + + // mark our start time + performance.mark(this._startMark); + + // function that continually updates the console to show user that we're downloading a library + this._intOngoingDownload = setInterval( + function(){ + self._log('npmTimer: hit an interval'); + performance.mark(self._ongoingMark); + performance.measure(self._downloadOngoing, self._startMark, self._ongoingMark); + }, this._interval); + } + + end(){ + // stop updating console for ongoing download + clearInterval(this._intOngoingDownload); + performance.mark(this._endMark); + performance.measure(this._downloadComplete, this._startMark, this._endMark); + } +} + +module.exports = NpmTimer; diff --git a/package-lock.json b/package-lock.json index 257f7ef22..59853bf0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2344,9 +2344,9 @@ } }, "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" }, "cli-table": { "version": "0.3.1", @@ -3037,6 +3037,14 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "1.0.3" + } + }, "deferred-leveldown": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", @@ -6986,6 +6994,19 @@ "strip-ansi": "3.0.1" }, "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=" + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -7008,6 +7029,31 @@ "chalk": "1.1.3" } }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, "rxjs": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.0.tgz", @@ -9037,36 +9083,60 @@ } }, "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-spinners": "1.3.1", + "log-symbols": "2.2.0", + "strip-ansi": "4.0.0", + "wcwidth": "1.0.1" }, "dependencies": { - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "restore-cursor": "1.0.1" + "color-convert": "1.9.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=", + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "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" } } } @@ -12673,6 +12743,14 @@ "typechecker": "2.1.0" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "1.0.3" + } + }, "web3": { "version": "1.0.0-beta.34", "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.34.tgz", diff --git a/package.json b/package.json index ee2705586..901bcee8a 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "babel-preset-es2017": "6.24.1", "babel-preset-react": "^6.24.1", "bip39": "^2.5.0", - "neo-blessed": "^0.2.0", "chokidar": "^2.0.3", "clone-deep": "^4.0.0", "colors": "^1.1.2", @@ -55,8 +54,10 @@ "ipfs-api": "17.2.4", "live-plugin-manager-git-fix": "^0.12.1", "merge": "^1.2.0", + "neo-blessed": "^0.2.0", "node-http-proxy": "^0.2.3", "node-ipc": "^9.1.1", + "ora": "^2.1.0", "os-locale": "^2.1.0", "p-iteration": "^1.1.7", "parse-json": "^4.0.0",