'use strict';
var config = {};
config.sqlstarts =
[
'create', 'rollback', 'begin', 'commit', 'alter', 'select', 'update', 'delete', 'create', 'insert', 'show', 'replace', 'drop', 'explain'
];
config.default_options = {
debug : false,
defaults : {
standards : true,
logs : true,
onceFinalize : true,
firstArg : true,
sql : true
}
};
/**
Taken from:
http://krasimirtsonev.com/blog/article/Simple-command-line-parser-in-JavaScript
not regarding qoutes
CommandParser.parse('command param1 "that\'s a long parameter" param3');
["command", "param1", ""that's", "a", "long", "parameter"", "param3"]
regarding quotes
CommandParser.parse('command param1 "that\'s a long parameter" param3', true);
["command", "param1", "that's a long parameter", "param3"]
CommandParser.parse('command param1 "that\'s a long parameter" "param3 is also a string"', true);
["command", "param1", "that's a long parameter", "param3 is also a string"]
*/
var CommandParser = (function() {
var parse = function(str, lookForQuotes) {
var args = [];
var readingPart = false;
var part = '';
for(var i=0; i<str.length; i++) {
if(str.charAt(i) === ' ' && !readingPart) {
if(''!==part)args.push(part);
part = '';
} else {
if(!!lookForQuotes && (str.charAt(i) === '\"' || str.charAt(i) === "\'")) {
readingPart = !readingPart;
} else {
part += str.charAt(i);
}
}
}
if(''!==part)args.push(part);
return args;
}
return {
parse: parse
}
})();
config.parseArgs = CommandParser.parse;
config.substr =function(str, start, len) {
/*/ discuss at: http://locutus.io/php/substr/
// original by: Martijn Wieringa
// bugfixed by: T.Wild
// improved by: Onno Marsman (https://twitter.com/onnomarsman)
// improved by: Brett Zamir (http://brett-zamir.me)
// revised by: Theriault (https://github.com/Theriault)
// note 1: Handles rare Unicode characters if 'unicode.semantics' ini (PHP6) is set to 'on'
// example 1: substr('abcdef', 0, -1)
// returns 1: 'abcde'
// example 2: substr(2, 0, -6)
// returns 2: false
// example 3: ini_set('unicode.semantics', 'on')
// example 3: substr('a\uD801\uDC00', 0, -1)
// returns 3: 'a'
// example 4: ini_set('unicode.semantics', 'on')
// example 4: substr('a\uD801\uDC00', 0, 2)
// returns 4: 'a\uD801\uDC00'
// example 5: ini_set('unicode.semantics', 'on')
// example 5: substr('a\uD801\uDC00', -1, 1)
// returns 5: '\uD801\uDC00'
// example 6: ini_set('unicode.semantics', 'on')
// example 6: substr('a\uD801\uDC00z\uD801\uDC00', -3, 2)
// returns 6: '\uD801\uDC00z'
// example 7: ini_set('unicode.semantics', 'on')
// example 7: substr('a\uD801\uDC00z\uD801\uDC00', -3, -1)
// returns 7: '\uD801\uDC00z'
// test: skip-3 skip-4 skip-5 skip-6 skip-7
*/
str += '';
var end = str.length;
/*
var iniVal = (typeof require !== 'undefined' ? require('../info/ini_get')('unicode.emantics') : undefined) || 'off';
*/
var iniVal = 'on';
if (iniVal === 'off') {
if (start < 0) {
start += end;
}
if (typeof len !== 'undefined') {
if (len < 0) {
end = len + end;
} else {
end = len + start;
}
}
if (start >= str.length || start < 0 || start > end) {
return false;
}
return str.slice(start, end);
}
var i = 0;
var allBMP = true;
var es = 0;
var el = 0;
var se = 0;
var ret = '';
for (i = 0; i < str.length; i++) {
if (/[\uD800-\uDBFF]/.test(str.charAt(i)) && /[\uDC00-\uDFFF]/.test(str.charAt(i + 1))) {
allBMP = false;
break;
}
}
if (!allBMP) {
if (start < 0) {
for (i = end - 1, es = (start += end); i >= es; i--) {
if (/[\uDC00-\uDFFF]/.test(str.charAt(i)) && /[\uD800-\uDBFF]/.test(str.charAt(i - 1))) {
start--;
es--;
}
}
} else {
var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
while ((surrogatePairs.exec(str)) !== null) {
var li = surrogatePairs.lastIndex;
if (li - 2 < start) {
start++
} else {
break;
}
}
}
if (start >= end || start < 0) {
return false;
}
if (len < 0) {
for (i = end - 1, el = (end += len); i >= el; i--) {
if (/[\uDC00-\uDFFF]/.test(str.charAt(i)) && /[\uD800-\uDBFF]/.test(str.charAt(i - 1))) {
end--;
el--;
}
}
if (start > end) {
return false;
}
return str.slice(start, end)
} else {
se = start + len;
for (i = start; i < se; i++) {
ret += str.charAt(i);
if (/[\uD800-\uDBFF]/.test(str.charAt(i)) && /[\uDC00-\uDFFF]/.test(str.charAt(i + 1))) {
se++;
}
}
return ret;
}
}
};
config.stripslashes=function(str) {
/*/ discuss at: http://locutus.io/php/stripslashes/
// original by: Kevin van Zonneveld (http://kvz.io)
// improved by: Ates Goral (http://magnetiq.com)
// improved by: marrtins
// improved by: rezna
// fixed by: Mick@el
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// bugfixed by: Brett Zamir (http://brett-zamir.me)
// input by: Rick Waldron
// input by: Brant Messenger (http://www.brantmessenger.com/)
// reimplemented by: Brett Zamir (http://brett-zamir.me)
// example 1: stripslashes('Kevin\'s code')
// returns 1: "Kevin's code"
// example 2: stripslashes('Kevin\\\'s code')
// returns 2: "Kevin\'s code"
*/
return (str + '')
.replace(/\\(.?)/g, function (s, n1) {
switch (n1) {
case '\\':
return '\\';
case '0':
return '\u0000';
case '':
return '';
default:
return n1;
}
});
};
config.escapeshellarg=function(arg) {
/*/ discuss at: http://locutus.io/php/escapeshellarg/
// original by: Felix Geisendoerfer (http://www.debuggable.com/felix)
// improved by: Brett Zamir (http://brett-zamir.me)
// example 1: escapeshellarg("kevin's birthday")
// returns 1: "'kevin\\'s birthday'"
*/
var ret = '';
ret = arg.replace(/[^\\]'/g, function (m, i, s) {
return m.slice(0, 1) + '\\\'';
});
return "'" + ret + "'";
};
config.ql_escape_string=function(arg) {
/*/ discuss at: http://locutus.io/php/escapeshellarg/
// original by: Felix Geisendoerfer (http://www.debuggable.com/felix)
// improved by: Brett Zamir (http://brett-zamir.me)
// example 1: escapeshellarg("kevin's birthday")
// returns 1: "'kevin\\'s birthday'"
*/
if('string'===typeof arg && 'function' === typeof arg.replace){
var ret = '';
ret = arg.replace(/[^\\]'/g, function (m, i, s) {
return m.slice(0, 1) + '\\\'';
});
return "'" + ret + "'";
}else if('string'===typeof arg){
return "'" + arg + "'";
}else{
return arg;
/* return "'" + arg + "'"; */
}
};
config.trim=function(str, charlist) {
/*/ discuss at: http://locutus.io/php/trim/
// original by: Kevin van Zonneveld (http://kvz.io)
// improved by: mdsjack (http://www.mdsjack.bo.it)
// improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev)
// improved by: Kevin van Zonneveld (http://kvz.io)
// improved by: Steven Levithan (http://blog.stevenlevithan.com)
// improved by: Jack
// input by: Erkekjetter
// input by: DxGx
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// example 1: trim(' Kevin van Zonneveld ')
// returns 1: 'Kevin van Zonneveld'
// example 2: trim('Hello World', 'Hdle')
// returns 2: 'o Wor'
// example 3: trim(16, 1)
// returns 3: '6'
*/
var whitespace = [
' ',
'\n',
'\r',
'\t',
'\f',
'\x0b',
'\xa0',
'\u2000',
'\u2001',
'\u2002',
'\u2003',
'\u2004',
'\u2005',
'\u2006',
'\u2007',
'\u2008',
'\u2009',
'\u200a',
'\u200b',
'\u2028',
'\u2029',
'\u3000'
].join('');
var l = 0;
var i = 0;
str += '';
if (charlist) {
whitespace = (charlist + '').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^:])/g, '$1');
}
l = str.length;
for (i = 0; i < l; i++) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
break;
}
}
l = str.length;
for (i = l - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i + 1);
break;
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
};
exports = module.exports = config;
|