UNPKG

@brozeph/mongoose-middleware

Version:

Middleware for mongoose that makes filtering, sorting, pagination and projection chainable and simple to apply

70 lines (54 loc) 1.94 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); _Object$defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int")); var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys")); var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof")); var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array")); var _default = function _default(mongoose) { mongoose.Query.prototype.order = function (options) { if (!options || !options.sort) { return this; } var fields = [], query = this, sort = options.sort || {}, value = null; if (typeof sort === 'string') { fields = sort.split(/\,/g).map(function (field) { return field.trim(); }); } else if ((0, _isArray["default"])(sort) && sort.length) { fields = sort; } else if ((0, _typeof2["default"])(sort) === 'object') { (0, _keys["default"])(sort).forEach(function (property) { if (!isNaN(sort[property])) { if ((0, _parseInt2["default"])(sort[property], 10) < 0) { fields.push('-' + property); } else { fields.push(property); } } else { // property supplied is NaN; default to 1/ascending fields.push(property); } }); } fields.forEach(function (field) { value = {}; if (field.startsWith('-')) { value[field.substring(1)] = -1; } else { value[field] = 1; } query.sort(value); }); return query; }; }; exports["default"] = _default; //# sourceMappingURL=order.js.map