Better arg parsing for main
This commit is contained in:
parent
2e7862043d
commit
f9e91987ac
41
core/bbs.js
41
core/bbs.js
|
@ -10,6 +10,7 @@ const conf = require('./config.js');
|
||||||
const logger = require('./logger.js');
|
const logger = require('./logger.js');
|
||||||
const database = require('./database.js');
|
const database = require('./database.js');
|
||||||
const clientConns = require('./client_connections.js');
|
const clientConns = require('./client_connections.js');
|
||||||
|
const resolvePath = require('./misc_util.js').resolvePath;
|
||||||
|
|
||||||
// deps
|
// deps
|
||||||
const async = require('async');
|
const async = require('async');
|
||||||
|
@ -25,30 +26,38 @@ exports.bbsMain = bbsMain;
|
||||||
// object with various services we want to de-init/shutdown cleanly if possible
|
// object with various services we want to de-init/shutdown cleanly if possible
|
||||||
const initServices = {};
|
const initServices = {};
|
||||||
|
|
||||||
|
const ENIGMA_COPYRIGHT = 'ENiGMA½ Copyright (c) 2014-2017 Bryan Ashby';
|
||||||
|
const HELP =
|
||||||
|
`${ENIGMA_COPYRIGHT}
|
||||||
|
usage: main.js <args>
|
||||||
|
|
||||||
|
valid args:
|
||||||
|
--version : display version
|
||||||
|
--help : displays this help
|
||||||
|
--config PATH : override default config.hjson path
|
||||||
|
`;
|
||||||
|
|
||||||
|
function printHelpAndExit() {
|
||||||
|
console.info(HELP);
|
||||||
|
process.exit();
|
||||||
|
}
|
||||||
|
|
||||||
function bbsMain() {
|
function bbsMain() {
|
||||||
async.waterfall(
|
async.waterfall(
|
||||||
[
|
[
|
||||||
function processArgs(callback) {
|
function processArgs(callback) {
|
||||||
const args = process.argv.slice(2);
|
const argv = require('minimist')(process.argv.slice(2));
|
||||||
|
|
||||||
var configPath;
|
if(argv.help) {
|
||||||
|
printHelpAndExit();
|
||||||
if(args.indexOf('--help') > 0) {
|
|
||||||
// :TODO: display help
|
|
||||||
} else {
|
|
||||||
let argCount = args.length;
|
|
||||||
for(let i = 0; i < argCount; ++i) {
|
|
||||||
const arg = args[i];
|
|
||||||
if('--config' === arg) {
|
|
||||||
configPath = args[i + 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, configPath || conf.getDefaultPath(), _.isString(configPath));
|
const configOverridePath = argv.config;
|
||||||
|
|
||||||
|
return callback(null, configOverridePath || conf.getDefaultPath(), _.isString(configOverridePath));
|
||||||
},
|
},
|
||||||
function initConfig(configPath, configPathSupplied, callback) {
|
function initConfig(configPath, configPathSupplied, callback) {
|
||||||
conf.init(configPath, function configInit(err) {
|
conf.init(resolvePath(configPath), function configInit(err) {
|
||||||
|
|
||||||
//
|
//
|
||||||
// If the user supplied a path and we can't read/parse it
|
// If the user supplied a path and we can't read/parse it
|
||||||
|
@ -80,7 +89,7 @@ function bbsMain() {
|
||||||
function complete(err) {
|
function complete(err) {
|
||||||
// note this is escaped:
|
// note this is escaped:
|
||||||
fs.readFile(paths.join(__dirname, '../misc/startup_banner.asc'), 'utf8', (err, banner) => {
|
fs.readFile(paths.join(__dirname, '../misc/startup_banner.asc'), 'utf8', (err, banner) => {
|
||||||
console.info('ENiGMA½ Copyright (c) 2014-2017 Bryan Ashby');
|
console.info(ENIGMA_COPYRIGHT);
|
||||||
if(!err) {
|
if(!err) {
|
||||||
console.info(banner);
|
console.info(banner);
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,13 +107,13 @@ exports.getModule = class WebServerModule extends ServerModule {
|
||||||
route = new Route(route);
|
route = new Route(route);
|
||||||
|
|
||||||
if(!route.isValid()) {
|
if(!route.isValid()) {
|
||||||
Log( { route : route }, 'Cannot add route: missing or invalid required members' );
|
Log.warn( { route : route }, 'Cannot add route: missing or invalid required members' );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const routeKey = route.getRouteKey();
|
const routeKey = route.getRouteKey();
|
||||||
if(routeKey in this.routes) {
|
if(routeKey in this.routes) {
|
||||||
Log( { route : route }, 'Cannot add route: duplicate method/path combination exists' );
|
Log.warn( { route : route }, 'Cannot add route: duplicate method/path combination exists' );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ Configuration files in ENiGMA½ are simple UTF-8 encoded [HJSON](http://hjson.or
|
||||||
## System Configuration
|
## System Configuration
|
||||||
The main system configuration file, `config.hjson` both overrides defaults and provides additional configuration such as message areas. The default path is `~/.config/enigma-bbs/config.hjson` though you can override this with the `--config` parameter when invoking `main.js`. Values found in core/config.js may be overridden by simply providing the object members you wish replace.
|
The main system configuration file, `config.hjson` both overrides defaults and provides additional configuration such as message areas. The default path is `~/.config/enigma-bbs/config.hjson` though you can override this with the `--config` parameter when invoking `main.js`. Values found in core/config.js may be overridden by simply providing the object members you wish replace.
|
||||||
|
|
||||||
**Windows note**: **~** resolves to *C:\Users\YOURLOGINNAME\* on modern Windows installations, e.g. `C:\Users\NuSkooler\\.config\enigma-bbs\config.hjson`
|
**Windows note**: **~** resolves to *C:\Users\YOURLOGINNAME\* on modern Windows installations, e.g. `C:\Users\NuSkooler\.config\enigma-bbs\config.hjson`
|
||||||
|
|
||||||
### oputil.js
|
### oputil.js
|
||||||
Please see `oputil.js config` for configuration generation options.
|
Please see `oputil.js config` for configuration generation options.
|
||||||
|
|
Loading…
Reference in New Issue