Node.JS module to auto include your sub-modules or to generate static include scripts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

81 lines
1.8 KiB

var fs = require('fs');
var automodule = module.exports = function(options){
options = (options)?options:{};
var search_path = String(get(options, 'search', process.cwd()));
var print = Boolean(get(options, 'print', false));
var modules = {};
var all_files = get_files(search_path);
var top_level = ~all_files.indexOf('lib') || ~all_files.indexOf('src');
if(top_level){
modules = get_require('lib', search_path, print);
} else{
all_files.forEach(function(file){
if(~file.indexOf('.js')){
var len = file.length;
var name = file.substring(0, len - 3);
if(name.toLowerCase() != 'index'){
modules[name] = get_require(file, search_path, print);
}
} else{
modules[file] = get_require(file, search_path, print);
}
});
}
if(print){
return compile(modules);
} else{
return modules;
}
};
var compile = function(modules){
var out = 'return module.exports = ';
if(typeof(modules) == 'string'){
return out += modules + ';';
}
out += '{';
for(var name in modules){
out += name + ':' + modules[name] + ',';
}
out += '};';
return out;
};
var get_require = function(file, search_path, print){
if(print){
return 'require("./' + file + '")';
} else{
return require(search_path + '/' + file);
}
};
var get_files = function(search_path){
var files = [];
fs.readdirSync(search_path).forEach(function(file){
if(file[0] == '.'){
return;
}
var stats = fs.lstatSync(search_path + '/' + file);
if(stats.isDirectory()){
files.push(file);
} else{
var len = file.length;
var end = file.substring(len -3, len);
if(end == '.js'){
files.push(file);
}
}
});
return files;
};
var get = function(obj, key, def){
if(obj[key] == null || obj[key] == undefined){
return def;
} else{
return obj[key];
}
};