2018-08-08 22:15:25 +00:00
let utils = require ( '../../lib/utils/utils.js' ) ;
2016-09-23 04:31:09 +00:00
2017-03-30 11:12:39 +00:00
class Console {
constructor ( options ) {
2017-12-17 23:34:41 +00:00
this . events = options . events ;
2017-03-30 11:12:39 +00:00
this . plugins = options . plugins ;
this . version = options . version ;
2018-08-10 14:54:21 +00:00
this . logger = options . logger ;
2018-08-08 12:42:45 +00:00
this . ipc = options . ipc ;
2017-03-02 12:44:24 +00:00
2018-08-08 12:42:45 +00:00
if ( this . ipc . isServer ( ) ) {
this . ipc . on ( 'console:executeCmd' , this . executeCmd . bind ( this ) ) ;
}
2017-03-02 12:44:24 +00:00
}
2017-03-30 11:12:39 +00:00
processEmbarkCmd ( cmd ) {
2018-05-08 21:49:46 +00:00
if ( cmd === 'help' || cmd === _ _ ( 'help' ) ) {
2017-03-30 11:12:39 +00:00
let helpText = [
2018-05-08 21:49:46 +00:00
_ _ ( 'Welcome to Embark' ) + ' ' + this . version ,
2017-03-30 11:12:39 +00:00
'' ,
2018-05-08 21:49:46 +00:00
_ _ ( 'possible commands are:' ) ,
'versions - ' + _ _ ( 'display versions in use for libraries and tools like web3 and solc' ) ,
2017-03-30 11:12:39 +00:00
// TODO: only if the blockchain is actually active!
// will need to pass te current embark state here
2018-05-18 19:56:36 +00:00
'ipfs - ' + _ _ ( 'instantiated js-ipfs object configured to the current environment (available if ipfs is enabled)' ) ,
2018-05-08 21:49:46 +00:00
'web3 - ' + _ _ ( 'instantiated web3.js object configured to the current environment' ) ,
'quit - ' + _ _ ( 'to immediatly exit (alias: exit)' ) ,
2017-03-30 11:12:39 +00:00
'' ,
2018-05-08 21:49:46 +00:00
_ _ ( 'The web3 object and the interfaces for the deployed contracts and their methods are also available' )
2017-03-30 11:12:39 +00:00
] ;
return helpText . join ( '\n' ) ;
2018-05-08 21:49:46 +00:00
} else if ( [ 'quit' , 'exit' , 'sair' , 'sortir' , _ _ ( 'quit' ) ] . indexOf ( cmd ) >= 0 ) {
2017-03-30 11:12:39 +00:00
utils . exit ( ) ;
}
return false ;
2017-03-02 12:44:24 +00:00
}
2016-09-23 04:31:09 +00:00
2017-03-30 11:12:39 +00:00
executeCmd ( cmd , callback ) {
2017-12-29 23:21:36 +00:00
var pluginCmds = this . plugins . getPluginsProperty ( 'console' , 'console' ) ;
for ( let pluginCmd of pluginCmds ) {
2018-08-08 12:42:45 +00:00
let pluginResult = pluginCmd . call ( this , cmd , { } ) ;
2018-08-10 14:54:21 +00:00
if ( typeof pluginResult !== 'object' ) {
if ( pluginResult !== false && pluginResult !== 'false' && pluginResult !== undefined ) {
this . logger . warn ( "[DEPRECATED] In future versions of embark, we expect the console command to return an object " +
2018-08-10 15:14:28 +00:00
"having 2 functions: match and process. The documentation with example can be found here: https://embark.status.im/docs/plugin_reference.html#embark-registerConsoleCommand-callback-options" ) ;
2018-08-10 14:54:21 +00:00
return callback ( null , pluginResult ) ;
}
} else if ( pluginResult . match ( ) ) {
2018-08-08 12:42:45 +00:00
return pluginResult . process ( callback ) ;
}
2017-03-30 11:12:39 +00:00
}
2018-05-18 15:04:49 +00:00
2017-03-30 11:12:39 +00:00
let output = this . processEmbarkCmd ( cmd ) ;
if ( output ) {
2018-08-08 12:42:45 +00:00
return callback ( null , output ) ;
2017-03-30 11:12:39 +00:00
}
2018-05-18 14:42:30 +00:00
2017-03-30 11:12:39 +00:00
try {
2018-08-08 12:42:45 +00:00
this . events . request ( 'runcode:eval' , cmd , callback , true ) ;
2017-03-30 11:12:39 +00:00
}
catch ( e ) {
2018-08-08 12:42:45 +00:00
if ( this . ipc . connected && this . ipc . isClient ( ) ) {
return this . ipc . request ( 'console:executeCmd' , cmd , callback ) ;
2017-03-30 11:12:39 +00:00
}
2018-08-15 09:40:51 +00:00
callback ( e ) ;
2017-02-16 01:24:42 +00:00
}
2016-09-23 04:31:09 +00:00
}
2017-03-30 11:12:39 +00:00
}
2016-09-23 04:31:09 +00:00
module . exports = Console ;