Solc loading issue now fully resolved
Added better error checking for solidity compilation errors Extracted timer functionality for downloading packages so it works across the main process and child processes. Npm class is instantiated only once and reused for event commands. Npm class can handle concurrent requests for the same package and callback the installation result for each request.
This commit is contained in:
parent
a046acb732
commit
eedcdc77a7
|
@ -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"
|
||||
}
|
||||
|
||||
]
|
||||
}
|
|
@ -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'});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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<output.errors.length; i++) {
|
||||
if (output.errors[i].type === 'Warning') {
|
||||
|
|
|
@ -3,10 +3,18 @@ const path = require('path');
|
|||
const constants = require('../../constants');
|
||||
const Utils = require('../../utils/utils');
|
||||
const ProcessWrapper = require('../../process/processWrapper');
|
||||
const PluginManager = require('live-plugin-manager').PluginManager;
|
||||
const PluginManager = require('live-plugin-manager-git-fix').PluginManager;
|
||||
const NpmTimer = require('../../versions/npmTimer');
|
||||
|
||||
|
||||
class SolcProcess extends ProcessWrapper {
|
||||
|
||||
constructor(options){
|
||||
super();
|
||||
this._logger = options.logger;
|
||||
this._npm = options.npm;
|
||||
}
|
||||
|
||||
findImports(filename) {
|
||||
if (filename.startsWith('http') || filename.startsWith('git')) {
|
||||
const fileObj = Utils.getExternalContractUrl(filename);
|
||||
|
@ -26,46 +34,57 @@ class SolcProcess extends ProcessWrapper {
|
|||
|
||||
installAndLoadCompiler(solcVersion, packagePath){
|
||||
let self = this;
|
||||
return new Promise((resolve) => {
|
||||
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});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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});
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue