express-restify-mt-mongoose
Version:
Easily create a flexible REST interface for mongoose models
59 lines (45 loc) • 4.86 kB
JavaScript
var Promise = require('bluebird');
module.exports = function (options) {
return function (query, queryOptions) {
var promise = new Promise(function (resolve, reject) {
if (!queryOptions) {
return resolve(query);
}
if (queryOptions.query) {
query.where(queryOptions.query);
}
if (queryOptions.skip) {
query.skip(queryOptions.skip);
}
if (options.limit && (!queryOptions.limit || queryOptions.limit === '0' || queryOptions.limit > options.limit)) {
queryOptions.limit = options.limit;
}
if (queryOptions.limit && query.op !== 'count' && !queryOptions.distinct) {
query.limit(queryOptions.limit);
}
if (queryOptions.sort) {
query.sort(queryOptions.sort);
}
if (queryOptions.populate) {
query.populate(queryOptions.populate);
}
if (queryOptions.select) {
query.select(queryOptions.select);
}
if (queryOptions.distinct) {
query.distinct(queryOptions.distinct);
}
if (options.readPreference) {
query.read(options.readPreference);
}
if (options.lean) {
query.lean(options.lean);
}
resolve(query);
});
return promise;
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZFF1ZXJ5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBTSxVQUFVLFFBQVEsVUFBUixDQUFoQjs7QUFFQSxPQUFPLE9BQVAsR0FBaUIsVUFBVSxPQUFWLEVBQW1CO0FBQ2xDLFNBQU8sVUFBVSxLQUFWLEVBQWlCLFlBQWpCLEVBQStCO0FBQ3BDLFFBQU0sVUFBVSxJQUFJLE9BQUosQ0FBWSxVQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXFCO0FBQy9DLFVBQUksQ0FBQyxZQUFMLEVBQW1CO0FBQ2pCLGVBQU8sUUFBUSxLQUFSLENBQVA7QUFDRDs7QUFFRCxVQUFJLGFBQWEsS0FBakIsRUFBd0I7QUFDdEIsY0FBTSxLQUFOLENBQVksYUFBYSxLQUF6QjtBQUNEOztBQUVELFVBQUksYUFBYSxJQUFqQixFQUF1QjtBQUNyQixjQUFNLElBQU4sQ0FBVyxhQUFhLElBQXhCO0FBQ0Q7O0FBRUQsVUFBSSxRQUFRLEtBQVIsS0FBa0IsQ0FBQyxhQUFhLEtBQWQsSUFBdUIsYUFBYSxLQUFiLEtBQXVCLEdBQTlDLElBQXFELGFBQWEsS0FBYixHQUFxQixRQUFRLEtBQXBHLENBQUosRUFBZ0g7QUFDOUcscUJBQWEsS0FBYixHQUFxQixRQUFRLEtBQTdCO0FBQ0Q7O0FBRUQsVUFBSSxhQUFhLEtBQWIsSUFBc0IsTUFBTSxFQUFOLEtBQWEsT0FBbkMsSUFBOEMsQ0FBQyxhQUFhLFFBQWhFLEVBQTBFO0FBQ3hFLGNBQU0sS0FBTixDQUFZLGFBQWEsS0FBekI7QUFDRDs7QUFFRCxVQUFJLGFBQWEsSUFBakIsRUFBdUI7QUFDckIsY0FBTSxJQUFOLENBQVcsYUFBYSxJQUF4QjtBQUNEOztBQUVELFVBQUksYUFBYSxRQUFqQixFQUEyQjtBQUN6QixjQUFNLFFBQU4sQ0FBZSxhQUFhLFFBQTVCO0FBQ0Q7O0FBRUQsVUFBSSxhQUFhLE1BQWpCLEVBQXlCO0FBQ3ZCLGNBQU0sTUFBTixDQUFhLGFBQWEsTUFBMUI7QUFDRDs7QUFFRCxVQUFJLGFBQWEsUUFBakIsRUFBMkI7QUFDekIsY0FBTSxRQUFOLENBQWUsYUFBYSxRQUE1QjtBQUNEOztBQUVELFVBQUksUUFBUSxjQUFaLEVBQTRCO0FBQzFCLGNBQU0sSUFBTixDQUFXLFFBQVEsY0FBbkI7QUFDRDs7QUFFRCxVQUFJLFFBQVEsSUFBWixFQUFrQjtBQUNoQixjQUFNLElBQU4sQ0FBVyxRQUFRLElBQW5CO0FBQ0Q7O0FBRUQsY0FBUSxLQUFSO0FBQ0QsS0E5Q2UsQ0FBaEI7O0FBZ0RBLFdBQU8sT0FBUDtBQUNELEdBbEREO0FBbURELENBcEREIiwiZmlsZSI6ImJ1aWxkUXVlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIHJldHVybiBmdW5jdGlvbiAocXVlcnksIHF1ZXJ5T3B0aW9ucykge1xyXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKCFxdWVyeU9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShxdWVyeSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1ZXJ5T3B0aW9ucy5xdWVyeSkge1xyXG4gICAgICAgIHF1ZXJ5LndoZXJlKHF1ZXJ5T3B0aW9ucy5xdWVyeSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1ZXJ5T3B0aW9ucy5za2lwKSB7XHJcbiAgICAgICAgcXVlcnkuc2tpcChxdWVyeU9wdGlvbnMuc2tpcClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG9wdGlvbnMubGltaXQgJiYgKCFxdWVyeU9wdGlvbnMubGltaXQgfHwgcXVlcnlPcHRpb25zLmxpbWl0ID09PSAnMCcgfHwgcXVlcnlPcHRpb25zLmxpbWl0ID4gb3B0aW9ucy5saW1pdCkpIHtcclxuICAgICAgICBxdWVyeU9wdGlvbnMubGltaXQgPSBvcHRpb25zLmxpbWl0XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChxdWVyeU9wdGlvbnMubGltaXQgJiYgcXVlcnkub3AgIT09ICdjb3VudCcgJiYgIXF1ZXJ5T3B0aW9ucy5kaXN0aW5jdCkge1xyXG4gICAgICAgIHF1ZXJ5LmxpbWl0KHF1ZXJ5T3B0aW9ucy5saW1pdClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1ZXJ5T3B0aW9ucy5zb3J0KSB7XHJcbiAgICAgICAgcXVlcnkuc29ydChxdWVyeU9wdGlvbnMuc29ydClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1ZXJ5T3B0aW9ucy5wb3B1bGF0ZSkge1xyXG4gICAgICAgIHF1ZXJ5LnBvcHVsYXRlKHF1ZXJ5T3B0aW9ucy5wb3B1bGF0ZSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1ZXJ5T3B0aW9ucy5zZWxlY3QpIHtcclxuICAgICAgICBxdWVyeS5zZWxlY3QocXVlcnlPcHRpb25zLnNlbGVjdClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1ZXJ5T3B0aW9ucy5kaXN0aW5jdCkge1xyXG4gICAgICAgIHF1ZXJ5LmRpc3RpbmN0KHF1ZXJ5T3B0aW9ucy5kaXN0aW5jdClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG9wdGlvbnMucmVhZFByZWZlcmVuY2UpIHtcclxuICAgICAgICBxdWVyeS5yZWFkKG9wdGlvbnMucmVhZFByZWZlcmVuY2UpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvcHRpb25zLmxlYW4pIHtcclxuICAgICAgICBxdWVyeS5sZWFuKG9wdGlvbnMubGVhbilcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZShxdWVyeSlcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHByb21pc2VcclxuICB9XHJcbn1cclxuIl19
//# sourceMappingURL=buildQuery.js.map
;