vox-core
Version:
Runtime de aplicaciones multiplataforma
307 lines (249 loc) • 8.29 kB
JavaScript
var fs;
var Path= require("path")
var helpoptions, examples,writeHelp;
module.exports= function(Command){
var options= Command.getAsOptionsObject();
if(process.argv.length<3){
//options.interactive=true;
}
if(options.version){
core.VW.Console.setColorWarning().write("v" + vw.version).resetColors();
//process.exit(0);
return true;
}
if(options["self-register"]){
if(options.silent){
core.VW.Install.setSilent();
}
core.VW.Console.setColorWarning().write("Vox v" + vw.version)
.writeLine().writeLine().writeLine("Copiando archivos ejecutables ...");
try{
core.VW.Install.copyBin();
}
catch(e){
vw.error(e.stack);
core.VW.Install.writeEnd();
//process.exit(0);
return true;
}
vw.log("La instalación finalizó correctamente. Puede ejecutar colocando 'vox' desde un terminal o cmd en Windows");
core.VW.Console.resetColors();
core.VW.Install.writeEnd();
//process.exit(0);
return true;
}
if(options.install){
core.VW.Console.setColorWarning().writeLine("Vox v" + vw.version)
.resetColors();
var opts={
global:!!options.g,
name: options.values
}
core.VW.PackageManager.Cli.install(opts).then(function(){
process.exit(0);
}, function(er){
core.VW.Console.setColorError().writeLine(er.stack)
.resetColors();
})
//process.exit(0)
return true;
}
if(options.test){
var examples1= examples();
var ex= Command.getFirstValue();
var fex= examples1[(ex||"").toLowerCase()];
if(fex){
require(fex);
return true;
}
core.VW.Console.setColorWarning().writeLine("Vox v" + vw.version)
.setColorError().write("El test " + ex + " no existe").resetColors();
//process.exit(0);
return true;
}
if(options.interactive){
core.VW.Console.setColorWarning().writeLine("Vox v" + vw.version, "(interactive mode)").resetColors();
(new core.VW.Interpreter()).start();
return true;
}
if(options.transpile){
try{
core.VW.Console.setColorWarning().writeLine("Vox v" + vw.version);
if(!options.in){
throw new Error("Debe especificar el parámetro --in");
}
if(!options.out){
throw new Error("Debe especificar el parámetro --out");
}
if(!fs){
fs= require("fs");
}
options.in= Path.normalize(options.in)
if(!fs.existsSync(options.in)){
throw new Error("El archivo o directorio " + options.in + " no existe");
}
core.VW.Console.setColorWarning();
core.VW.Console.writeLine();
core.VW.Transpile(options.in, options.out)
core.VW.Console.setColorLog().write("Completado 100%, Entrada: ", options.in, " Salida: ", options.out);
//process.exit(0);
return
}
catch(e){
core.VW.Console.setColorError().write(e.stack).resetColors();
//process.exit(0);
return;
}
}
else if(options.vcf){
try{
core.VW.Console.setColorWarning().writeLine("Vox v" + vw.version);
if(!options.in){
throw new Error("Debe especificar el parámetro --in");
}
if(!options.out){
throw new Error("Debe especificar el parámetro --out");
}
if(!fs){
fs= require("fs");
}
options.in= Path.normalize(options.in)
if(!fs.existsSync(options.in)){
throw new Error("El archivo o directorio " + options.in + " no existe");
}
var stat=fs.statSync(options.in);
core.VW.Console.setColorWarning();
core.VW.Console.writeLine();
var files=0;
if(options.decompress!==false){
core.VW.VcfUtil.decompressToFolder(options.in,options.out, function(ev){
core.VW.Console.writeLine("Procesado: ", ev.writtenfiles.toString().padLeft(5,' '), " archivos, ", ev.percent.toFixed(4), "%");
});
}
else{
if(stat.isFile()){
core.VW.VcfUtil.compressFile(options.in,options.out);
}
else{
core.VW.VcfUtil.compressFolder(options.in,options.out, function(ev){
core.VW.Console.writeLine("Procesado: ", ev.writtenfiles.toString().padLeft(5,' '), " archivos, ", ev.percent.toFixed(4), "%");
});
}
}
core.VW.Console.setColorLog().write("Completado 100%, Entrada: ", options.in, " Salida: ", options.out);
//process.exit(0);
}
catch(e){
core.VW.Console.setColorError().write(e.stack).resetColors();
//process.exit(0);
return true;
}
}
if(true || options.help){ // Por defecto mostrar ayuda ...
core.VW.Console.setColorLog().write("Vox").resetColors().write(" versión ").setColorWarning().writeLine(vw.version)
.writeLine()
writeHelp()
core.VW.Console.resetColors();
//process.exit(0);
return true;
}
return false;
}
examples= function(){
if(!fs){
fs=require("fs")
}
var obj={};
var path=__dirname+"/examples";
var files=fs.readdirSync(path);
for(var i=0;i<files.length;i++){
var file= files[i];
var ifile=path+"/"+file;
if(file.substring(file.length-3)==".js"){
file= file.substring(0,file.length-3);
}
if(file.substring(file.length-4)==".es6"){
file= file.substring(0,file.length-4);
}
var stat= fs.statSync(ifile);
if(stat.isFile()){
obj[file.toLowerCase()]= ifile;
}
}
return obj
}
var cOptions= function(){
return {
"--decompress": "Cuando se usa -vcf indica que se realiza decompresión",
"-g": "Instalar módulo globalmente. Utilizado con -install",
"--in": "[ruta] Ruta de entrada para compresión/decompresión. Se usa con -vcf",
"--out": "[ruta] Ruta de destino para compresión/decompresión. Se usa con -vcf"
}
}
var cCommands= function(){
var exampless=[];
var ex=examples();
for(var id in ex){
exampless.push(id);
}
return {
"-help": "Muestra la ayuda",
"-version": "Muestra la versión instalada de vox",
"-interactive": "Inicia modo interactivo (soporta solo ES5 por ahora)",
"-install": "Instalar una aplicación",
"-test": "Ejecutar un test. Modo de uso: vox -test NombreTest. Tests disponibles: "+ exampless.join(", "),
"-vcf": "Comprimir o descomprimir. Modo de uso: vox -vcf [opciones]",
"-self-register": "Instalar en el equipo vox, en el PATH del equipo: vox y voxw(versión Windows sin consola)"
}
}
writeHelp=function(){
var help=cOptions()
var cmds=cCommands()
//core.VW.Console.writeLine()
vw.warning("Modo de uso:")
core.VW.Console.writeLine(" comando [opcion [argumento], opcion [argumento] ...] [argumentos]")
core.VW.Console.writeLine()
vw.warning("Comandos:")
var maxl=0
for(var id in help){
maxl= Math.max(maxl, id.length)
}
for(var id in cmds){
maxl= Math.max(maxl, id.length)
}
maxl+= 5
for(var id in cmds){
core.VW.Console.setColorLog().write((" " + id).padRight(maxl,' ')).resetColors()
core.VW.Console.writeLine(cmds[id])
}
core.VW.Console.writeLine()
vw.warning("Opciones:")
for(var id in help){
core.VW.Console.setColorLog().write((" " + id).padRight(maxl,' ')).resetColors()
core.VW.Console.writeLine(help[id])
}
}
/*
helpoptions=function(){
var options=[];
var exampless=[];
var ex=examples();
for(var id in ex){
exampless.push(id);
}
options.push(" -help".padRight(25,' ') + "Muestra los comandos disponibles de VW");
options.push(" -version".padRight(25,' ') + "Muestra la versión instalada de VW");
options.push(" -interactive".padRight(25,' ') + "Iniciar modo interactivo");
options.push(" -install".padRight(25,' ') + "Instalar una aplicación de vw");
options.push(" -test".padRight(25,' ') + "Ejecutar un test de vw. [" + exampless.join(", ")+"]");
options.push(" -g".padRight(25,' ') + "Indica que el comando -install instala en una ubicación global");
options.push(" -list-apps".padRight(25,' ') + "Muestra las aplicaciones abiertas con VW");
options.push(" -vcf".padRight(25,' ') + "Comprimir o descomprimir en el formato Vcf");
options.push("");
options.push(" Opciones para -vcf");
options.push(" --decompress".padRight(25,' ') + "Se utiliza para indicar que es decompresión");
options.push(" --in [archivo o directorio]".padRight(40,' ') + "Directorio o archivo a comprimir");
options.push(" --out [archivo]".padRight(40,' ') + "Archivo de salida");
return options.join("\n");
}
*/