Skip to content

Commit

Permalink
CLI stuff ( buggy )
Browse files Browse the repository at this point in the history
  • Loading branch information
milani committed Mar 29, 2012
1 parent 603d784 commit cf07cb3
Show file tree
Hide file tree
Showing 6 changed files with 454 additions and 0 deletions.
22 changes: 22 additions & 0 deletions bin/appjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env node

var fs = require('fs');
var path = require('path');
var nopt = require('nopt');
var util = require('../cli/util');
var config = require('../cli/config');
var command = require('../cli/command');

process.title = "appjs"
process.on("uncaughtException", util.errorHandler);

util.log('Parsing arguments...');

var conf = nopt(config.arg_types,config.arg_shorts);
var argv = conf.argv.remain;

util.log.setLevel(conf.log || 'info');

if( command[argv[0]] ){
command[argv.shift()].apply(conf,argv);
}
223 changes: 223 additions & 0 deletions cli/command.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
var fs = require('fs');
var path = require('path');
var util = require('./util');
var pack = require('./pack');
var mkdir = require('mkdirp');
var config = require('./config');

var init = exports.init = function(){

if( arguments.length > 1 ) {
util.abort(config.ERROR.tooMuchArguments);
}

var input_dir = process.cwd();

if( arguments.length == 1 ) {
input_dir = fs.realpathSync(arguments[0]);
}

var manifest = config.manifest;

manifest.compile = this.compile || manifest.compile;
manifest.embed = this.embed || manifest.embed;
manifest.entry_point = this.entry || manifest.entry_point;
manifest.build_dir = this.out || manifest.build_dir;
manifest.build_dir = path.relative(input_dir,manifest.build_dir);
manifest.extra = this.extra || manifest.extra;

util.log('generating manifest file...');
//@TODO generate a human-readable output!
input_dir = path.join(input_dir,'manifest.json');
fs.writeFileSync(input_dir,JSON.stringify(config.manifest),'utf-8');
util.log('OK',util.log.success);
}

var packageF = exports.package = function(){

if( arguments.length > 2 ) {
util.abort(config.ERROR.tooMuchArguments);
}

var input_dir = process.cwd();

if( arguments.length == 1 ) {
input_dir = fs.realpathSync(arguments[0]);
}

if( arguments.length == 2 ) {
input_dir = fs.realpathSync(arguments[0]);
output_dir = path.resolve(arguments[1]);

if( output_dir == input_dir ){
output_dir = path.resolve(input_dir,'build');
}
}

util.log('Reading manifest file...');

try {
var manifest = JSON.parse(fs.readFileSync(path.join(input_dir,'manifest.json')));
} catch (e) {
util.abort('Manifest file not found.');
}

manifest.compile = this.compile || manifest.compile;
manifest.embed = this.embed || manifest.embed;
manifest.entry_point = this.entry || manifest.entry_point;
//manifest.build_dir = output_dir || this.out || manifest.build_dir;
manifest.extra = this.extra || manifest.extra;

if( typeof output_dir == 'undefined'){
output_dir = path.resolve(input_dir,manifest.build_dir);
}

util.log('Generating package...');

var content = JSON.stringify(pack.generate(input_dir,manifest.entry_point,manifest.extra));

var resource_path = path.resolve(output_dir,'resources.json');

mkdir.sync(output_dir);
fs.writeFileSync(resource_path,content);

util.log('Done.','success');
}

var build = exports.build = function(){

if( arguments.length > 2 ) {
util.abort(config.ERROR.tooMuchArguments);
}

var input_dir = process.cwd();

if( arguments.length == 1 ) {
input_dir = fs.realpathSync(arguments[0]);
}

if( arguments.length == 2 ) {
input_dir = fs.realpathSync(arguments[0]);
output_dir = path.resolve(arguments[1]);

if( output_dir == input_dir ){
output_dir = path.resolve(input_dir,'build');
}
}

util.log('Reading manifest file...');

try {
var manifest = JSON.parse(fs.readFileSync(path.join(input_dir,'manifest.json')));
} catch (e) {
util.abort('Manifest file not found.');
}

manifest.compile = this.compile || manifest.compile;
manifest.embed = this.embed || manifest.embed;
manifest.entry_point = this.entry || manifest.entry_point;
//manifest.build_dir = output_dir || this.out || manifest.build_dir;
manifest.extra = this.extra || manifest.extra;

if( typeof output_dir == 'undefined'){
output_dir = path.resolve(input_dir,manifest.build_dir);
}

util.log('Generating package...');

var content = JSON.stringify(pack.generate(input_dir,manifest.entry_point,manifest.extra));

var resource_path = path.resolve(output_dir,'resources.json');

mkdir.sync(output_dir);
fs.writeFileSync(resource_path,content);

//@TODO check to see if node is compiled and binary file is out there.
//@TODO copy the binary file to build dir.
util.log('Done.','success');
}
/*
module.exports = {
"init": function(){
if( arguments.length > 1 ) {
util.abort(config.ERROR.tooMuchArguments);
}
var input_dir = process.cwd();
if( arguments.length == 1 ) {
input_dir = fs.realpathSync(arguments[0]);
}
var manifest = config.manifest;
manifest.compile = this.compile || manifest.compile;
manifest.embed = this.embed || manifest.embed;
manifest.entry_point = this.entry || manifest.entry_point;
manifest.build_dir = this.out || manifest.build_dir;
manifest.build_dir = path.relative(input_dir,manifest.build_dir);
manifest.extra = this.extra || manifest.extra;
util.log('generating manifest file...');
//@TODO generate a human-readable output!
input_dir = path.join(input_dir,'manifest.json');
fs.writeFileSync(input_dir,JSON.stringify(config.manifest),'utf-8');
util.log('OK',util.log.success);
},
"package": function(){
if( arguments.length > 2 ) {
util.abort(config.ERROR.tooMuchArguments);
}
var input_dir = process.cwd();
if( arguments.length == 1 ) {
input_dir = fs.realpathSync(arguments[0]);
}
if( arguments.length == 2 ) {
input_dir = fs.realpathSync(arguments[0]);
output_dir = path.resolve(arguments[1]);
if( output_dir == input_dir ){
output_dir = path.resolve(input_dir,'build');
}
}
util.log('Reading manifest file...');
try {
var manifest = JSON.parse(fs.readFileSync(path.join(input_dir,'manifest.json')));
} catch (e) {
util.abort('Manifest file not found.');
}
manifest.compile = this.compile || manifest.compile;
manifest.embed = this.embed || manifest.embed;
manifest.entry_point = this.entry || manifest.entry_point;
//manifest.build_dir = output_dir || this.out || manifest.build_dir;
manifest.extra = this.extra || manifest.extra;
if( typeof output_dir == 'undefined'){
output_dir = path.resolve(input_dir,manifest.build_dir);
}
util.log('Generating package...');
var content = JSON.stringify(pack.generate(input_dir,manifest.entry_point,manifest.extra));
var resource_path = path.resolve(output_dir,'resources.json');
mkdir.sync(output_dir);
fs.writeFileSync(resource_path,content);
util.log('Done.','success');
},
"build":function(){
}
}*/
39 changes: 39 additions & 0 deletions cli/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
var path = require('path');
var util = require('./util');

var logEnum = [];

Object.keys(util.log.LEVELS).forEach(function (level) {
logEnum.push(level);
});

exports.arg_types = {
"compile": Boolean,
"embed": Boolean,
"entry": String,
"out": String,
"extra": Array,
"log" : logEnum
};

exports.arg_shorts = {
c: ["--compile"],
e: ["--embed"],
t: ["--entry"],
p: ["--extra"],
o: ["--out"],
l: ["--log"]
};

exports.manifest = {
compile: false,
embed: false,
entry_point: "app.js",
build_dir: './build',
extra: [
]
}

exports.ERROR = {
tooMuchArguments: 'Too much arguments, needs one.'
};
69 changes: 69 additions & 0 deletions cli/pack.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
var fs = require('fs');
var path = require('path');
var util = require('./util');
var dive = require('diveSync');

var packageObj = {};

var filter = function( fpath, dir) {

if(dir) return true;

if ( path.extname(fpath) == '.js') {
return true;
}

return false;
}

var addDir = function(dir,root_dir) {

var options = {
filter: filter,
};

dive(dir,options,function(err,file){

if( err ) throw err;

var relpath = path.relative(root_dir,file);
packageObj[relpath] = fs.readFileSync(file).toString();
});

}

addEntry = function(entry_path,root_dir){

var entry = path.join(root_dir,entry_path);
var rentry = path.relative(root_dir,entry);

packageObj[rentry] = fs.readFileSync(entry).toString();
}

exports.generate = function(root_dir,entry_point,extra){

var node_modules = path.join(root_dir,'node_modules');

addDir(node_modules,root_dir);

var stat;

extra.forEach(function(entry){
stat = fs.stat(entry);

if( !stat ) {
util.log('Extra entry does not exist ( '+entry+' )','warn');
} else {
if(stat.isDirectory()){
addDir(entry,root_dir);
} else {
addEntry(entry,root_dir);
}
}

})

addEntry(entry_point,root_dir);

return packageObj;
}
Loading

0 comments on commit cf07cb3

Please sign in to comment.