cmder-cli
Version:
namespace shell commands cli
104 lines (81 loc) • 3.4 kB
JavaScript
process.cmder = {
dev: true
,clientDir: require('./lib/dir')()
} ;
process.cmder.config = require('./lib/config')() ;
const
resolvePath = require('./lib/resolve-path')
,cliColor = require('cli-color')
,resolveCmd = require('./lib/resolve-cmd')
,child = require('child_process')
;
require('./lib/inject-cmd-package')();
module.exports = {
async exec( path , separator = null , powershell = true ) {
if(process.cmder.config['@@cmder-empty']) {
return console.log( cliColor.red.bold('\n\t > exec command is not possible because , you define commands in your config file but config file not exists ❌') );
}
if( typeof path !== 'string' ){
console.log( cliColor.red.bold('\n\t > exec command not possible because , arg1 bust be an string but is ',( typeof path ),' ❌') );
return false;
}
const cmds = resolvePath( path , separator );
if( !cmds || !cmds.length ) {
if( process.cmder.dev )
console.log( cliColor.yellow( "\n⚠️ no commands to exec with `",path.trim(),"` , use `boolean cmder.exists( string: path )` , if you want test array commands exists .") );
return [/* { err:err , stdout:stdout, stderr:stderr } */];
}
return Promise.all(
cmds.map( cmd => {
const cmdExec = resolveCmd( cmd ) ;
return new Promise( (resolve,reject) => (
child.exec( cmdExec , {
cwd: process.cmder.clientDir
,shell: !!powershell ? 'powershell':'cmd'
}, (err,stdout,stderr) => (
err ?
reject( err , stderr ) :
resolve( {
stdout: stdout
,stderr: stderr
,cmd: {
brut: cmd
,exec: cmdExec
}
} )
) )
) )
} )
) ;
}
,out(responses) {
try {
responses = [...responses] ;
} catch( TypeError ) {
console.log( cliColor.red.bold('out responses not possible arg1 bust an array ❌') );
return false;
}
console.log( cliColor.green('\n>start show out for' , responses.length , ' commands :\n' ) );
responses
.filter( response => typeof response === 'object' && typeof response.cmd === 'object' && typeof response.stdout === 'string' )
.forEach( (response,key) => (
console.log(
cliColor.cyan(
'\t- '+(key+1) ,
'. entry : ' ,
response.cmd.exec,
'\t - \tout : ' ,
response.stdout.replace('\n',' ') )
)
));
return true;
}
,exists: function( path , separator = null ) {
return !!resolvePath( path , separator ) ;
}
,dev: status => (
process.cmder.dev = !!status
)
} ;
// client > cmder.exec('group/truc') ;
// client > cmder.exec('group/npm/truc[1]');