UNPKG

vox-core

Version:

Runtime de aplicaciones multiplataforma

307 lines (249 loc) 8.29 kB
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"); } */