UNPKG

express-restify-mt-mongoose

Version:
136 lines (116 loc) 16 kB
'use strict'; var _ = require('lodash'); var isCoordinates = require('is-coordinates'); module.exports = function (options) { var errorHandler = require('../errorHandler')(options); function jsonQueryParser(key, value) { if (key === '$regex' && !options.allowRegex) { return undefined; } if (_.isString(value)) { if (value[0] === '~') { // parse RegExp return options.allowRegex ? new RegExp(value.substr(1), 'i') : undefined; } else if (value[0] === '>') { if (value[1] === '=') { return { $gte: value.substr(2) }; } else { return { $gt: value.substr(1) }; } } else if (value[0] === '<') { if (value[1] === '=') { return { $lte: value.substr(2) }; } else { return { $lt: value.substr(1) }; } } else if (value[0] === '!' && value[1] === '=') { return { $ne: value.substr(2) }; /* This feature was disabled because it requires MongoDB 3 } else if (value[0] === '=') { return { $eq: value.substr(1) }*/ } } else if (_.isArray(value) && key[0] !== '$' && key !== 'coordinates' && !isCoordinates(value)) { return { $in: value }; } return value; } function parseQueryOptions(queryOptions) { if (queryOptions.select && _.isString(queryOptions.select)) { var select = queryOptions.select.split(','); queryOptions.select = {}; for (var i = 0, length = select.length; i < length; i++) { if (select[i][0] === '-') { queryOptions.select[select[i].substring(1)] = 0; } else { queryOptions.select[select[i]] = 1; } } } if (queryOptions.populate) { if (_.isString(queryOptions.populate)) { var populate = queryOptions.populate.split(','); queryOptions.populate = []; for (var _i = 0, _length = populate.length; _i < _length; _i++) { queryOptions.populate.push({ path: populate[_i] }); for (var key in queryOptions.select) { if (key.indexOf(populate[_i] + '.') === 0) { if (queryOptions.populate[_i].select) { queryOptions.populate[_i].select += ' '; } else { queryOptions.populate[_i].select = ''; } if (queryOptions.select[key] === 0) { queryOptions.populate[_i].select += '-'; } queryOptions.populate[_i].select += key.substring(populate[_i].length + 1); delete queryOptions.select[key]; } } // If other specific fields are selected, add the populated field if (queryOptions.select) { if (Object.keys(queryOptions.select).length > 0 && !queryOptions.select[populate[_i]]) { queryOptions.select[populate[_i]] = 1; } else if (Object.keys(queryOptions.select).length === 0) { delete queryOptions.select; } } } } else if (!_.isArray(queryOptions.populate)) { queryOptions.populate = [queryOptions.populate]; } } return queryOptions; } return function (req, res, next) { var whitelist = ['distinct', 'limit', 'populate', 'query', 'select', 'skip', 'sort']; req._ermQueryOptions = {}; for (var key in req.query) { if (whitelist.indexOf(key) === -1) { continue; } if (key === 'query') { try { req._ermQueryOptions[key] = JSON.parse(req.query[key], jsonQueryParser); } catch (e) { return errorHandler(req, res, next)(new Error('invalid_json_' + key)); } } else if (key === 'populate' || key === 'select' || key === 'sort') { try { req._ermQueryOptions[key] = JSON.parse(req.query[key]); } catch (e) { req._ermQueryOptions[key] = req.query[key]; } } else if (key === 'limit' || key === 'skip') { req._ermQueryOptions[key] = parseInt(req.query[key], 10); } else { req._ermQueryOptions[key] = req.query[key]; } } req._ermQueryOptions = parseQueryOptions(req._ermQueryOptions); next(); }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3ByZXBhcmVRdWVyeS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLElBQU0sSUFBSSxRQUFRLFFBQVIsQ0FBVjtBQUNBLElBQU0sZ0JBQWdCLFFBQVEsZ0JBQVIsQ0FBdEI7O0FBRUEsT0FBTyxPQUFQLEdBQWlCLFVBQVUsT0FBVixFQUFtQjtBQUNsQyxNQUFNLGVBQWUsUUFBUSxpQkFBUixFQUEyQixPQUEzQixDQUFyQjs7QUFFQSxXQUFTLGVBQVQsQ0FBMEIsR0FBMUIsRUFBK0IsS0FBL0IsRUFBc0M7QUFDcEMsUUFBSSxRQUFRLFFBQVIsSUFBb0IsQ0FBQyxRQUFRLFVBQWpDLEVBQTZDO0FBQzNDLGFBQU8sU0FBUDtBQUNEOztBQUVELFFBQUksRUFBRSxRQUFGLENBQVcsS0FBWCxDQUFKLEVBQXVCO0FBQ3JCLFVBQUksTUFBTSxDQUFOLE1BQWEsR0FBakIsRUFBc0I7O0FBQ3BCLGVBQU8sUUFBUSxVQUFSLEdBQXFCLElBQUksTUFBSixDQUFXLE1BQU0sTUFBTixDQUFhLENBQWIsQ0FBWCxFQUE0QixHQUE1QixDQUFyQixHQUF3RCxTQUEvRDtBQUNELE9BRkQsTUFFTyxJQUFJLE1BQU0sQ0FBTixNQUFhLEdBQWpCLEVBQXNCO0FBQzNCLFlBQUksTUFBTSxDQUFOLE1BQWEsR0FBakIsRUFBc0I7QUFDcEIsaUJBQU8sRUFBRSxNQUFNLE1BQU0sTUFBTixDQUFhLENBQWIsQ0FBUixFQUFQO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsaUJBQU8sRUFBRSxLQUFLLE1BQU0sTUFBTixDQUFhLENBQWIsQ0FBUCxFQUFQO0FBQ0Q7QUFDRixPQU5NLE1BTUEsSUFBSSxNQUFNLENBQU4sTUFBYSxHQUFqQixFQUFzQjtBQUMzQixZQUFJLE1BQU0sQ0FBTixNQUFhLEdBQWpCLEVBQXNCO0FBQ3BCLGlCQUFPLEVBQUUsTUFBTSxNQUFNLE1BQU4sQ0FBYSxDQUFiLENBQVIsRUFBUDtBQUNELFNBRkQsTUFFTztBQUNMLGlCQUFP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c0IsUUFBUSxRQUE5QixJQUEwQyxRQUFRLE1BQXRELEVBQThEO0FBQ25FLFlBQUk7QUFDRixjQUFJLGdCQUFKLENBQXFCLEdBQXJCLElBQTRCLEtBQUssS0FBTCxDQUFXLElBQUksS0FBSixDQUFVLEdBQVYsQ0FBWCxDQUE1QjtBQUNELFNBRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNWLGNBQUksZ0JBQUosQ0FBcUIsR0FBckIsSUFBNEIsSUFBSSxLQUFKLENBQVUsR0FBVixDQUE1QjtBQUNEO0FBQ0YsT0FOTSxNQU1BLElBQUksUUFBUSxPQUFSLElBQW1CLFFBQVEsTUFBL0IsRUFBdUM7QUFDNUMsWUFBSSxnQkFBSixDQUFxQixHQUFyQixJQUE0QixTQUFTLElBQUksS0FBSixDQUFVLEdBQVYsQ0FBVCxFQUF5QixFQUF6QixDQUE1QjtBQUNELE9BRk0sTUFFQTtBQUNMLFlBQUksZ0JBQUosQ0FBcUIsR0FBckIsSUFBNEIsSUFBSSxLQUFKLENBQVUsR0FBVixDQUE1QjtBQUNEO0FBQ0Y7O0FBRUQsUUFBSSxnQkFBSixHQUF1QixrQkFBa0IsSUFBSSxnQkFBdEIsQ0FBdkI7O0FBRUE7QUFDRCxHQWhDRDtBQWlDRCxDQS9IRCIsImZpbGUiOiJwcmVwYXJlUXVlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJylcclxuY29uc3QgaXNDb29yZGluYXRlcyA9IHJlcXVpcmUoJ2lzLWNvb3JkaW5hdGVzJylcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBjb25zdCBlcnJvckhhbmRsZXIgPSByZXF1aXJlKCcuLi9lcnJvckhhbmRsZXInKShvcHRpb25zKVxyXG5cclxuICBmdW5jdGlvbiBqc29uUXVlcnlQYXJzZXIgKGtleSwgdmFsdWUpIHtcclxuICAgIGlmIChrZXkgPT09ICckcmVnZXgnICYmICFvcHRpb25zLmFsbG93UmVnZXgpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICBpZiAodmFsdWVbMF0gPT09ICd+JykgeyAvLyBwYXJzZSBSZWdFeHBcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5hbGxvd1JlZ2V4ID8gbmV3IFJlZ0V4cCh2YWx1ZS5zdWJzdHIoMSksICdpJykgOiB1bmRlZmluZWRcclxuICAgICAgfSBlbHNlIGlmICh2YWx1ZVswXSA9PT0gJz4nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlWzFdID09PSAnPScpIHtcclxuICAgICAgICAgIHJldHVybiB7ICRndGU6IHZhbHVlLnN1YnN0cigyKSB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB7ICRndDogdmFsdWUuc3Vic3RyKDEpIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodmFsdWVbMF0gPT09ICc8Jykge1xyXG4gICAgICAgIGlmICh2YWx1ZVsxXSA9PT0gJz0nKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAkbHRlOiB2YWx1ZS5zdWJzdHIoMikgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4geyAkbHQ6IHZhbHVlLnN1YnN0cigxKSB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlWzBdID09PSAnIScgJiYgdmFsdWVbMV0gPT09ICc9Jykge1xyXG4gICAgICAgIHJldHVybiB7ICRuZTogdmFsdWUuc3Vic3RyKDIpIH1cclxuICAgICAgLyogVGhpcyBmZWF0dXJlIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGl0IHJlcXVpcmVzIE1vbmdvREIgM1xyXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlWzBdID09PSAnPScpIHtcclxuICAgICAgICByZXR1cm4geyAkZXE6IHZhbHVlLnN1YnN0cigxKSB9Ki9cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChfLmlzQXJyYXkodmFsdWUpICYmIGtleVswXSAhPT0gJyQnICYmIGtleSAhPT0gJ2Nvb3JkaW5hdGVzJyAmJiAhaXNDb29yZGluYXRlcyh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHsgJGluOiB2YWx1ZSB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVF1ZXJ5T3B0aW9ucyAocXVlcnlPcHRpb25zKSB7XHJcbiAgICBpZiAocXVlcnlPcHRpb25zLnNlbGVjdCAmJiBfLmlzU3RyaW5nKHF1ZXJ5T3B0aW9ucy5zZWxlY3QpKSB7XHJcbiAgICAgIGxldCBzZWxlY3QgPSBxdWVyeU9wdGlvbnMuc2VsZWN0LnNwbGl0KCcsJylcclxuICAgICAgcXVlcnlPcHRpb25zLnNlbGVjdCA9IHt9XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gc2VsZWN0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdFtpXVswXSA9PT0gJy0nKSB7XHJcbiAgICAgICAgICBxdWVyeU9wdGlvbnMuc2VsZWN0W3NlbGVjdFtpXS5zdWJzdHJpbmcoMSldID0gMFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxdWVyeU9wdGlvbnMuc2VsZWN0W3NlbGVjdFtpXV0gPSAxXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXJ5T3B0aW9ucy5wb3B1bGF0ZSkge1xyXG4gICAgICBpZiAoXy5pc1N0cmluZyhxdWVyeU9wdGlvbnMucG9wdWxhdGUpKSB7XHJcbiAgICAgICAgbGV0IHBvcHVsYXRlID0gcXVlcnlPcHRpb25zLnBvcHVsYXRlLnNwbGl0KCcsJylcclxuICAgICAgICBxdWVyeU9wdGlvbnMucG9wdWxhdGUgPSBbXVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gcG9wdWxhdGUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHF1ZXJ5T3B0aW9ucy5wb3B1bGF0ZS5wdXNoKHtcclxuICAgICAgICAgICAgcGF0aDogcG9wdWxhdGVbaV1cclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgZm9yIChsZXQga2V5IGluIHF1ZXJ5T3B0aW9ucy5zZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHBvcHVsYXRlW2ldICsgJy4nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChxdWVyeU9wdGlvbnMucG9wdWxhdGVbaV0uc2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeU9wdGlvbnMucG9wdWxhdGVbaV0uc2VsZWN0ICs9ICcgJ1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeU9wdGlvbnMucG9wdWxhdGVbaV0uc2VsZWN0ID0gJydcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChxdWVyeU9wdGlvbnMuc2VsZWN0W2tleV0gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5T3B0aW9ucy5wb3B1bGF0ZVtpXS5zZWxlY3QgKz0gJy0nXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBxdWVyeU9wdGlvbnMucG9wdWxhdGVbaV0uc2VsZWN0ICs9IGtleS5zdWJzdHJpbmcocG9wdWxhdGVbaV0ubGVuZ3RoICsgMSlcclxuICAgICAgICAgICAgICBkZWxldGUgcXVlcnlPcHRpb25zLnNlbGVjdFtrZXldXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBJZiBvdGhlciBzcGVjaWZpYyBmaWVsZHMgYXJlIHNlbGVjdGVkLCBhZGQgdGhlIHBvcHVsYXRlZCBmaWVsZFxyXG4gICAgICAgICAgaWYgKHF1ZXJ5T3B0aW9ucy5zZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHF1ZXJ5T3B0aW9ucy5zZWxlY3QpLmxlbmd0aCA+IDAgJiYgIXF1ZXJ5T3B0aW9ucy5zZWxlY3RbcG9wdWxhdGVbaV1dKSB7XHJcbiAgICAgICAgICAgICAgcXVlcnlPcHRpb25zLnNlbGVjdFtwb3B1bGF0ZVtpXV0gPSAxXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMocXVlcnlPcHRpb25zLnNlbGVjdCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5T3B0aW9ucy5zZWxlY3RcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghXy5pc0FycmF5KHF1ZXJ5T3B0aW9ucy5wb3B1bGF0ZSkpIHtcclxuICAgICAgICBxdWVyeU9wdGlvbnMucG9wdWxhdGUgPSBbcXVlcnlPcHRpb25zLnBvcHVsYXRlXVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHF1ZXJ5T3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xyXG4gICAgY29uc3Qgd2hpdGVsaXN0ID0gWydkaXN0aW5jdCcsICdsaW1pdCcsICdwb3B1bGF0ZScsICdxdWVyeScsICdzZWxlY3QnLCAnc2tpcCcsICdzb3J0J11cclxuXHJcbiAgICByZXEuX2VybVF1ZXJ5T3B0aW9ucyA9IHt9XHJcblxyXG4gICAgZm9yIChsZXQga2V5IGluIHJlcS5xdWVyeSkge1xyXG4gICAgICBpZiAod2hpdGVsaXN0LmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoa2V5ID09PSAncXVlcnknKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlcS5fZXJtUXVlcnlPcHRpb25zW2tleV0gPSBKU09OLnBhcnNlKHJlcS5xdWVyeVtrZXldLCBqc29uUXVlcnlQYXJzZXIpXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcihyZXEsIHJlcywgbmV4dCkobmV3IEVycm9yKGBpbnZhbGlkX2pzb25fJHtrZXl9YCkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3BvcHVsYXRlJyB8fCBrZXkgPT09ICdzZWxlY3QnIHx8IGtleSA9PT0gJ3NvcnQnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlcS5fZXJtUXVlcnlPcHRpb25zW2tleV0gPSBKU09OLnBhcnNlKHJlcS5xdWVyeVtrZXldKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIHJlcS5fZXJtUXVlcnlPcHRpb25zW2tleV0gPSByZXEucXVlcnlba2V5XVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdsaW1pdCcgfHwga2V5ID09PSAnc2tpcCcpIHtcclxuICAgICAgICByZXEuX2VybVF1ZXJ5T3B0aW9uc1trZXldID0gcGFyc2VJbnQocmVxLnF1ZXJ5W2tleV0sIDEwKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlcS5fZXJtUXVlcnlPcHRpb25zW2tleV0gPSByZXEucXVlcnlba2V5XVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVxLl9lcm1RdWVyeU9wdGlvbnMgPSBwYXJzZVF1ZXJ5T3B0aW9ucyhyZXEuX2VybVF1ZXJ5T3B0aW9ucylcclxuXHJcbiAgICBuZXh0KClcclxuICB9XHJcbn1cclxuIl19 //# sourceMappingURL=prepareQuery.js.map