|
|
@ -64,7 +64,7 @@ exports.extend = function() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Handle case when target is a string or something (possible in deep copy)
|
|
|
|
// Handle case when target is a string or something (possible in deep copy)
|
|
|
|
if (typeof target !== "object" && !typeof target === 'function')
|
|
|
|
if (typeof target !== "object" && typeof target !== 'function')
|
|
|
|
target = {};
|
|
|
|
target = {};
|
|
|
|
|
|
|
|
|
|
|
|
var isPlainObject = function(obj) {
|
|
|
|
var isPlainObject = function(obj) {
|
|
|
@ -127,15 +127,15 @@ exports.extend = function() {
|
|
|
|
|
|
|
|
|
|
|
|
exports.isNotEmpty = function(str) {
|
|
|
|
exports.isNotEmpty = function(str) {
|
|
|
|
return str.trim().length > 0;
|
|
|
|
return str.trim().length > 0;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
exports.escape = function(str) {
|
|
|
|
exports.escape = function(str) {
|
|
|
|
return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
|
|
return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
exports.unescape = function(str) {
|
|
|
|
exports.unescape = function(str) {
|
|
|
|
return str.replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
|
|
|
return str.replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
var searchargs = '';
|
|
|
|
var searchargs = '';
|
|
|
@ -157,9 +157,9 @@ exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
if (args.length !== 2)
|
|
|
|
if (args.length !== 2)
|
|
|
|
throw new Error('OR must have exactly two arguments');
|
|
|
|
throw new Error('OR must have exactly two arguments');
|
|
|
|
searchargs += ' OR (';
|
|
|
|
searchargs += ' OR (';
|
|
|
|
searchargs += buildSearchQuery(args[0], extensions, true);
|
|
|
|
searchargs += exports.buildSearchQuery(args[0], extensions, true);
|
|
|
|
searchargs += ') (';
|
|
|
|
searchargs += ') (';
|
|
|
|
searchargs += buildSearchQuery(args[1], extensions, true);
|
|
|
|
searchargs += exports.buildSearchQuery(args[1], extensions, true);
|
|
|
|
searchargs += ')';
|
|
|
|
searchargs += ')';
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (criteria[0] === '!') {
|
|
|
|
if (criteria[0] === '!') {
|
|
|
@ -194,7 +194,8 @@ exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
if (!args || args.length !== 1)
|
|
|
|
if (!args || args.length !== 1)
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
+ criteria);
|
|
|
|
+ criteria);
|
|
|
|
searchargs += modifier + criteria + ' "' + escape(''+args[0]) + '"';
|
|
|
|
searchargs += modifier + criteria + ' "' + exports.escape(''+args[0])
|
|
|
|
|
|
|
|
+ '"';
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 'BEFORE':
|
|
|
|
case 'BEFORE':
|
|
|
|
case 'ON':
|
|
|
|
case 'ON':
|
|
|
@ -226,7 +227,7 @@ exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
if (!args || args.length !== 1)
|
|
|
|
if (!args || args.length !== 1)
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
+ criteria);
|
|
|
|
+ criteria);
|
|
|
|
var num = parseInt(args[0]);
|
|
|
|
var num = parseInt(args[0], 10);
|
|
|
|
if (isNaN(num))
|
|
|
|
if (isNaN(num))
|
|
|
|
throw new Error('Search option argument must be a number');
|
|
|
|
throw new Error('Search option argument must be a number');
|
|
|
|
searchargs += modifier + criteria + ' ' + args[0];
|
|
|
|
searchargs += modifier + criteria + ' ' + args[0];
|
|
|
@ -235,8 +236,8 @@ exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
if (!args || args.length !== 2)
|
|
|
|
if (!args || args.length !== 2)
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
+ criteria);
|
|
|
|
+ criteria);
|
|
|
|
searchargs += modifier + criteria + ' "' + escape(''+args[0]) + '" "'
|
|
|
|
searchargs += modifier + criteria + ' "' + exports.escape(''+args[0])
|
|
|
|
+ escape(''+args[1]) + '"';
|
|
|
|
+ '" "' + exports.escape(''+args[1]) + '"';
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 'UID':
|
|
|
|
case 'UID':
|
|
|
|
if (!args)
|
|
|
|
if (!args)
|
|
|
@ -267,7 +268,8 @@ exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
if (!args || args.length !== 1)
|
|
|
|
if (!args || args.length !== 1)
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
throw new Error('Incorrect number of arguments for search option: '
|
|
|
|
+ criteria);
|
|
|
|
+ criteria);
|
|
|
|
searchargs += modifier + criteria + ' "' + escape(''+args[0]) + '"';
|
|
|
|
searchargs += modifier + criteria + ' "' + exports.escape(''+args[0])
|
|
|
|
|
|
|
|
+ '"';
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 'X-GM-LABELS': // Gmail labels
|
|
|
|
case 'X-GM-LABELS': // Gmail labels
|
|
|
|
if (extensions.indexOf('X-GM-EXT-1') === -1)
|
|
|
|
if (extensions.indexOf('X-GM-EXT-1') === -1)
|
|
|
@ -293,7 +295,7 @@ exports.buildSearchQuery = function(options, extensions, isOrChild) {
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return searchargs;
|
|
|
|
return searchargs;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
exports.validateUIDList = function(uids) {
|
|
|
|
exports.validateUIDList = function(uids) {
|
|
|
|
for (var i=0,len=uids.length,intval; i<len; i++) {
|
|
|
|
for (var i=0,len=uids.length,intval; i<len; i++) {
|
|
|
@ -305,14 +307,14 @@ exports.validateUIDList = function(uids) {
|
|
|
|
} else if (/^(?:[\d]+|\*):(?:[\d]+|\*)$/.test(uids[i]))
|
|
|
|
} else if (/^(?:[\d]+|\*):(?:[\d]+|\*)$/.test(uids[i]))
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
intval = parseInt(''+uids[i]);
|
|
|
|
intval = parseInt(''+uids[i], 10);
|
|
|
|
if (isNaN(intval)) {
|
|
|
|
if (isNaN(intval)) {
|
|
|
|
throw new Error('Message ID/number must be an integer, "*", or a range: '
|
|
|
|
throw new Error('Message ID/number must be an integer, "*", or a range: '
|
|
|
|
+ uids[i]);
|
|
|
|
+ uids[i]);
|
|
|
|
} else if (typeof uids[i] !== 'number')
|
|
|
|
} else if (typeof uids[i] !== 'number')
|
|
|
|
uids[i] = intval;
|
|
|
|
uids[i] = intval;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var CHARR_CRLF = [13, 10];
|
|
|
|
var CHARR_CRLF = [13, 10];
|
|
|
|
function line(b, s) {
|
|
|
|
function line(b, s) {
|
|
|
|