2017-02-16 03:27:16 +00:00
|
|
|
/* jslint node: true */
|
|
|
|
/* eslint-disable no-console */
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const config = require('../../core/config.js');
|
|
|
|
const db = require('../../core/database.js');
|
|
|
|
|
|
|
|
const _ = require('lodash');
|
|
|
|
const async = require('async');
|
|
|
|
|
|
|
|
exports.printUsageAndSetExitCode = printUsageAndSetExitCode;
|
|
|
|
exports.getDefaultConfigPath = getDefaultConfigPath;
|
2017-02-20 18:31:24 +00:00
|
|
|
exports.getConfigPath = getConfigPath;
|
2017-02-16 03:27:16 +00:00
|
|
|
exports.initConfigAndDatabases = initConfigAndDatabases;
|
|
|
|
exports.getAreaAndStorage = getAreaAndStorage;
|
2018-03-10 18:37:23 +00:00
|
|
|
exports.looksLikePattern = looksLikePattern;
|
2017-02-16 03:27:16 +00:00
|
|
|
|
|
|
|
const exitCodes = exports.ExitCodes = {
|
2018-06-22 05:15:04 +00:00
|
|
|
SUCCESS : 0,
|
|
|
|
ERROR : -1,
|
|
|
|
BAD_COMMAND : -2,
|
|
|
|
BAD_ARGS : -3,
|
2017-02-16 03:27:16 +00:00
|
|
|
};
|
|
|
|
|
2017-02-25 06:39:31 +00:00
|
|
|
const argv = exports.argv = require('minimist')(process.argv.slice(2), {
|
2018-06-22 05:15:04 +00:00
|
|
|
alias : {
|
|
|
|
h : 'help',
|
|
|
|
v : 'version',
|
|
|
|
c : 'config',
|
|
|
|
n : 'no-prompt',
|
|
|
|
}
|
2017-02-25 06:39:31 +00:00
|
|
|
});
|
2017-02-16 03:27:16 +00:00
|
|
|
|
|
|
|
function printUsageAndSetExitCode(errMsg, exitCode) {
|
2018-06-22 05:15:04 +00:00
|
|
|
if(_.isUndefined(exitCode)) {
|
|
|
|
exitCode = exitCodes.ERROR;
|
|
|
|
}
|
2017-02-16 03:27:16 +00:00
|
|
|
|
2018-06-22 05:15:04 +00:00
|
|
|
process.exitCode = exitCode;
|
2017-02-16 03:27:16 +00:00
|
|
|
|
2018-06-22 05:15:04 +00:00
|
|
|
if(errMsg) {
|
|
|
|
console.error(errMsg);
|
|
|
|
}
|
2017-02-16 03:27:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function getDefaultConfigPath() {
|
2018-06-22 05:15:04 +00:00
|
|
|
return './config/';
|
2017-02-16 03:27:16 +00:00
|
|
|
}
|
|
|
|
|
2017-02-20 18:31:24 +00:00
|
|
|
function getConfigPath() {
|
2018-06-22 05:15:04 +00:00
|
|
|
const baseConfigPath = argv.config ? argv.config : config.getDefaultPath();
|
|
|
|
return baseConfigPath + 'config.hjson';
|
2017-02-20 18:31:24 +00:00
|
|
|
}
|
|
|
|
|
2017-02-16 03:27:16 +00:00
|
|
|
function initConfig(cb) {
|
2018-06-22 05:15:04 +00:00
|
|
|
const configPath = getConfigPath();
|
2017-02-16 03:27:16 +00:00
|
|
|
|
2018-06-22 05:15:04 +00:00
|
|
|
config.init(configPath, { keepWsc : true, noWatch : true }, cb);
|
2017-02-16 03:27:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function initConfigAndDatabases(cb) {
|
2018-06-22 05:15:04 +00:00
|
|
|
async.series(
|
|
|
|
[
|
|
|
|
function init(callback) {
|
|
|
|
initConfig(callback);
|
|
|
|
},
|
|
|
|
function initDb(callback) {
|
|
|
|
db.initializeDatabases(callback);
|
|
|
|
},
|
|
|
|
],
|
|
|
|
err => {
|
|
|
|
return cb(err);
|
|
|
|
}
|
|
|
|
);
|
2017-02-16 03:27:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function getAreaAndStorage(tags) {
|
2018-06-22 05:15:04 +00:00
|
|
|
return tags.map(tag => {
|
|
|
|
const parts = tag.toString().split('@');
|
|
|
|
const entry = {
|
|
|
|
areaTag : parts[0],
|
|
|
|
};
|
|
|
|
entry.pattern = entry.areaTag; // handy
|
|
|
|
if(parts[1]) {
|
|
|
|
entry.storageTag = parts[1];
|
|
|
|
}
|
|
|
|
return entry;
|
|
|
|
});
|
2018-03-10 18:37:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function looksLikePattern(tag) {
|
2018-06-22 05:15:04 +00:00
|
|
|
// globs can start with @
|
|
|
|
if(tag.indexOf('@') > 0) {
|
|
|
|
return false;
|
|
|
|
}
|
2018-03-10 18:37:23 +00:00
|
|
|
|
2018-06-22 05:15:04 +00:00
|
|
|
return /[*?[\]!()+|^]/.test(tag);
|
2017-02-16 03:27:16 +00:00
|
|
|
}
|