sql-cli
Version:
Cross platform command line interface for SQL Server
112 lines (94 loc) • 4.17 kB
JavaScript
(function () {
"use strict";
var pjson = require('../package.json'),
path = require('path'),
fs = require('fs'),
_ = require('underscore'),
sprintf = require("sprintf-js").sprintf,
passPrompt = require('password-prompt');
var DEFAULT_CONFIG = 'mssql-conf.json';
class Options {
constructor() {
this.version = pjson.version;
}
init(argv, env) {
return new Promise((resolve, reject)=>
{
var program = require('commander');
program.version(this.version)
.option('-s, --server <server>', 'Server to connect to')
.option('-u, --user <user>', 'User name to use for authentication')
.option('-p, --pass [pass]', 'Password to use for authentication')
.option('-o, --port <port>', 'Port to connect to')
.option('-t, --timeout <timeout>', 'Connection timeout in ms')
.option('-T, --requestTimeout <timeout>', 'Request timeout in ms')
.option('-d, --database <database>', 'Database to connect to')
.option('-q, --query <query>', 'The query to execute')
.option('-v, --tdsVersion <tdsVersion>', 'Version of tds protocol to use [7_4, 7_2, 7_3_A, 7_3_B, 7_4]')
.option('-e, --encrypt', 'Enable encryption')
.option('-f, --format <format>', 'The format of output [table, csv, xml, json]')
.option('-c, --config <path>', 'Read connection information from config file');
program.parse(argv);
this.env = env;
this.args = {};
_.extend(this.args, _.pick(program, 'server', 'user', 'pass',
'port', 'requestTimeout', 'timeout',
'database', 'query', 'tdsVersion',
'encrypt', 'format', 'config'));
if (this.args.config && !fs.existsSync(this.args.config)) {
reject(sprintf('config file \'%s\' does not exist.', this.args.config));
}
// if -p or --pass option is specified without a value then prompt
else if (this.args.pass === true) {
return passPrompt('Enter password: ', { method: 'hide' }).then(pass => {
this.args.pass = pass;
resolve();
});
}
else {
resolve();
}
});
}
getConnectionInfo() {
var args = this.args || {},
env = this.env || {},
configPath = args.config || DEFAULT_CONFIG;
var config = {};
if (fs.existsSync(configPath)) {
config = require(path.resolve(configPath));
}
var defaults = {
user: env.SQLCLI_USER || 'sa',
pass: env.SQLCLI_PASSWORD,
server: env.SQLCLI_SERVER || 'localhost',
database: env.SQLCLI_DATABASE,
port: env.SQLCLI_PORT,
timeout: env.SQLCLI_TIMEOUT,
requestTimeout: env.SQLCLI_REQUEST_TIMEOUT,
tdsVersion: env.SQLCLI_TDSVERSION,
encrypt: env.SQLCLI_ENCRYPT,
};
config = _.extend({}, defaults, config, args);
var connectInfo = {
user: config.user,
password: config.pass,
server: config.server,
database: config.database,
timeout: config.timeout,
requestTimeout: config.requestTimeout,
options: {
port: config.port,
tdsVersion: config.tdsVersion,
encrypt: !!config.encrypt
},
pool: {
max: 1,
min: 1
}
};
return connectInfo;
}
}
module.exports = exports = Options;
} ());