'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= |