fh-fhc
Version:
A Command Line Interface for FeedHenry
63 lines (55 loc) • 1.61 kB
JavaScript
var path = require('path'),
genericCommand = require('./genericCommand');
var ini = require("../lib/utils/ini");
module.exports = function(cb) {
var cmdDir = path.join(__dirname, 'cmd', path.sep),
files = [];
var finder = require('findit')(cmdDir);
finder.on('file', function(file) {
var base = path.basename(file);
if (base[0] === '.' || base[0] === '_' || !base.match(/\.js$/)) {
return;
}
file = file.replace(cmdDir, '');
files.push(file);
});
finder.on('error', function(err) {
finder.stop();
return cb(err);
});
finder.on('end', function() {
var commands = {};
files.forEach(function(f) {
var split = f.split(path.sep),
ref = commands;
split.forEach(function(s, idx) {
if (idx === split.length - 1) {
var cmdName = s.replace(/\.js$/, ''),
cmd = require(path.join(cmdDir, f));
var perms = ini.get("perms");
if (perms) {
perms = perms.split(",");
}
// Apply the generic command function if it's a new-style command
cmd._path = f;
cmd._cmdName = cmdName;
if (typeof cmd === 'object') {
cmd = genericCommand(cmd);
}
if (cmd.perm) {
if (perms && perms.indexOf(cmd.perm) !== -1) {
ref[cmdName] = cmd;
}
} else {
ref[cmdName] = cmd;
}
} else {
ref[s] = ref[s] || {};
ref[s]._groupName = s;
}
ref = ref[s];
});
});
return cb(null, commands);
});
};