Code coverage report for src/query-builder.js

Statements: 33.75% (27 / 80)      Branches: 30.65% (19 / 62)      Functions: 44.44% (4 / 9)      Lines: 35% (21 / 60)      Ignored: 1 branch     

All files » src/ » query-builder.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95    1     1 1 1     1   1   1   1                                                                                                         1   1                 1 36 33 21   27 4 4   25 15 15 15    
'use strict';
 
Object.defineProperty(exports, '__esModule', {
  value: true
});
exports.run = run;
exports.cleanup = cleanup;
exports.coerce = coerce;
// istanbul ignore next
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
var _boolean = require('boolean');
 
var _boolean2 = _interopRequireDefault(_boolean);
 
exports['default'] = function (model) {
  var _ref = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
 
  var where = _ref.where;
  var limit = _ref.limit;
  var include = _ref.include;
  var populate = _ref.populate;
  var fields = _ref.fields;
  var select = _ref.select;
  var order = _ref.order;
  var sort = _ref.sort;
  var offset = _ref.offset;
 
  // Aliases
  if (sort) order = sort;
  if (populate) include = populate;
  if (fields) select = fields;
 
  if (typeof include === 'object') include = Object.keys(include).join(' ');
  if (typeof select === 'string') select = [select];
 
  var params = undefined;
  var method = 'find';
  var isCount = !!where && where.id === 'count';
 
  if (select) params = { select: select };
  if (where && where.id) {
    if (isCount) {
      method = 'count';
    } else {
      method += 'One';
      params = { id: where.id };
    }
 
    delete where.id;
  }
 
  var query = model[method](params);
 
  if (where) query.where(cleanup(where, model));
  if (!isCount) {
    if (order) query.sort(order);
    if (include) query.populate(include);
    if (offset) query.skip(offset);
    if (limit) query.limit(limit);
  }
 
  return query.then(function (data) {
    if (isCount) data = { count: data };
    return data;
  });
};
 
function run(model, method) {}
 
function cleanup(where, model) {
  return Object.keys(where).reduce(function (obj, prop) {
    // TODO: Probably bad practice to reference underscored properties...
    var castType = model._cast._types[prop];
    obj[prop] = castType ? coerce(where[prop], castType) : where[prop];
    return obj;
  }, {});
}
 
function coerce(val, type) {
  if (val === null || val === undefined) return val;
  if (Array.isArray(val)) return val.map(function (v) {
    return coerce(v, type);
  });
  if (typeof val === 'object') return Object.keys(val).reduce(function (prev, curr) {
    prev[curr] = coerce(val[curr], type);
    return prev;
  }, {});
  if (type === 'string') return val.toString();
  Iif (type === 'integer') return parseInt(val);
  Iif (type === 'double' || type === 'float') return parseFloat(val);
  Eif (type === 'boolean') return (0, _boolean2['default'])(val);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi93d3cvcHJvamVjdC9leHByZXNzLXdhdGVybGluZS9zcmMvcXVlcnktYnVpbGRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozt1QkFFSSxTQUFTOzs7O3FCQUdYLFVBQUMsS0FBSyxFQVVWO21FQUFQLEVBQUU7O01BVEosS0FBSyxRQUFMLEtBQUs7TUFDTCxLQUFLLFFBQUwsS0FBSztNQUNMLE9BQU8sUUFBUCxPQUFPO01BQ1AsUUFBUSxRQUFSLFFBQVE7TUFDUixNQUFNLFFBQU4sTUFBTTtNQUNOLE1BQU0sUUFBTixNQUFNO01BQ04sS0FBSyxRQUFMLEtBQUs7TUFDTCxJQUFJLFFBQUosSUFBSTtNQUNKLE1BQU0sUUFBTixNQUFNOzs7QUFJTixNQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQUksUUFBUSxFQUFFLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFDakMsTUFBSSxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFNUIsTUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUdsRCxNQUFJLE1BQU0sWUFBQSxDQUFDO0FBQ1gsTUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLE1BQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUM7O0FBRTlDLE1BQUksTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsQ0FBQztBQUNoQyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFO0FBQ3JCLFFBQUksT0FBTyxF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QUksSUFBSSxLQUFLLFNBQVMsRUFBRSxPQUFPLDBCQUFLLEdBQUcsQ0FBQyxDQUFDO0NBQzFDIiwiZmlsZSI6Ii93d3cvcHJvamVjdC9leHByZXNzLXdhdGVybGluZS9zcmMvcXVlcnktYnVpbGRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJvb2wgZnJvbSAnYm9vbGVhbic7XG5cblxuZXhwb3J0IGRlZmF1bHQgKG1vZGVsLCB7XG4gIHdoZXJlLFxuICBsaW1pdCxcbiAgaW5jbHVkZSxcbiAgcG9wdWxhdGUsXG4gIGZpZWxkcyxcbiAgc2VsZWN0LFxuICBvcmRlcixcbiAgc29ydCxcbiAgb2Zmc2V0XG59ID0ge30pID0+IHtcblxuICAvLyBBbGlhc2VzXG4gIGlmIChzb3J0KSBvcmRlciA9IHNvcnQ7XG4gIGlmIChwb3B1bGF0ZSkgaW5jbHVkZSA9IHBvcHVsYXRlO1xuICBpZiAoZmllbGRzKSBzZWxlY3QgPSBmaWVsZHM7XG5cbiAgaWYgKHR5cGVvZiBpbmNsdWRlID09PSAnb2JqZWN0JykgaW5jbHVkZSA9IE9iamVjdC5rZXlzKGluY2x1ZGUpLmpvaW4oJyAnKTtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgPT09ICdzdHJpbmcnKSBzZWxlY3QgPSBbc2VsZWN0XTtcblxuXG4gIGxldCBwYXJhbXM7XG4gIGxldCBtZXRob2QgPSAnZmluZCc7XG4gIGxldCBpc0NvdW50ID0gISF3aGVyZSAmJiB3aGVyZS5pZCA9PT0gJ2NvdW50JztcblxuICBpZiAoc2VsZWN0KSBwYXJhbXMgPSB7IHNlbGVjdCB9O1xuICBpZiAod2hlcmUgJiYgd2hlcmUuaWQpIHtcbiAgICBpZiAoaXNDb3VudCkge1xuICAgICAgbWV0aG9kID0gJ2NvdW50JztcbiAgICB9IGVsc2Uge1xuICAgICAgbWV0aG9kICs9ICdPbmUnO1xuICAgICAgcGFyYW1zID0geyBpZDogd2hlcmUuaWQgfTtcbiAgICB9XG5cbiAgICBkZWxldGUgd2hlcmUuaWQ7XG4gIH1cblxuICBsZXQgcXVlcnkgPSBtb2RlbFttZXRob2RdKHBhcmFtcyk7XG5cbiAgaWYgKHdoZXJlKSBxdWVyeS53aGVyZShjbGVhbnVwKHdoZXJlLCBtb2RlbCkpO1xuICBpZiAoIWlzQ291bnQpIHtcbiAgICBpZiAob3JkZXIpIHF1ZXJ5LnNvcnQob3JkZXIpO1xuICAgIGlmIChpbmNsdWRlKSBxdWVyeS5wb3B1bGF0ZShpbmNsdWRlKTtcbiAgICBpZiAob2Zmc2V0KSBxdWVyeS5za2lwKG9mZnNldCk7XG4gICAgaWYgKGxpbWl0KSBxdWVyeS5saW1pdChsaW1pdCk7XG4gIH1cblxuICByZXR1cm4gcXVlcnkudGhlbihkYXRhID0+IHtcbiAgICBpZiAoaXNDb3VudCkgZGF0YSA9IHsgY291bnQ6IGRhdGEgfTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcnVuKG1vZGVsLCBtZXRob2QpIHtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cCh3aGVyZSwgbW9kZWwpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHdoZXJlKVxuICAgIC5yZWR1Y2UoKG9iaiwgcHJvcCkgPT4ge1xuICAgICAgLy8gVE9ETzogUHJvYmFibHkgYmFkIHByYWN0aWNlIHRvIHJlZmVyZW5jZSB1bmRlcnNjb3JlZCBwcm9wZXJ0aWVzLi4uXG4gICAgICBsZXQgY2FzdFR5cGUgPSBtb2RlbC5fY2FzdC5fdHlwZXNbcHJvcF07XG4gICAgICBvYmpbcHJvcF0gPSBjYXN0VHlwZSA/IGNvZXJjZSh3aGVyZVtwcm9wXSwgY2FzdFR5cGUpIDogd2hlcmVbcHJvcF07XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvZXJjZSh2YWwsIHR5cGUpIHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbDtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbC5tYXAoKHYpID0+IGNvZXJjZSh2LCB0eXBlKSk7XG4gIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JykgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgcHJldltjdXJyXSA9IGNvZXJjZSh2YWxbY3Vycl0sIHR5cGUpO1xuICAgIHJldHVybiBwcmV2O1xuICB9LCB7fSk7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbC50b1N0cmluZygpO1xuICBpZiAodHlwZSA9PT0gJ2ludGVnZXInKSByZXR1cm4gcGFyc2VJbnQodmFsKTtcbiAgaWYgKHR5cGUgPT09ICdkb3VibGUnIHx8IHR5cGUgPT09ICdmbG9hdCcpIHJldHVybiBwYXJzZUZsb2F0KHZhbCk7XG4gIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHJldHVybiBib29sKHZhbCk7XG59XG4iXX0=