@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
JavaScript
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
;