UNPKG

@zishone/monique

Version:

A middleware that utilized rsql-mongodb to parse url queries into mongodb filter and options. Who's monqique? It is not a who, it's just short for Mongo I Query.

69 lines 2.69 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.mquery = void 0; const http_errors_1 = __importDefault(require("http-errors")); const rsql_mongodb_1 = __importDefault(require("rsql-mongodb")); const mquery = () => { return (req, _res, next) => { try { req.mquery = { filter: {}, options: {}, }; try { if (typeof req.query.filter === 'string') { req.mquery.filter = rsql_mongodb_1.default(req.query.filter); } } catch (error) { throw http_errors_1.default(400, 'Filter invalid', { type: 'mquery.parse.failed', details: error, }); } req.mquery.options.projection = {}; if (typeof req.query.fields === 'string') { req.query.fields.split(';').forEach((key) => { req.mquery.options.projection[key] = 1; }); } req.mquery.options.sort = {}; if (typeof req.query.sort === 'string') { req.query.sort.split(';').forEach((sort) => { const keyValue = sort.split('=='); switch (keyValue[1]) { case 'desc': req.mquery.options.sort[keyValue[0]] = -1; break; case 'asc': case undefined: req.mquery.options.sort[keyValue[0]] = 1; break; default: throw http_errors_1.default(400, 'Sort invalid', { type: 'mquery.parse.failed' }); } }); } req.mquery.options.limit = 0; if (typeof req.query.limit === 'string') { req.mquery.options.limit = parseFloat(req.query.limit); } req.mquery.options.skip = 0; if (typeof req.query.skip === 'string') { req.mquery.options.skip = parseFloat(req.query.skip); } if (typeof req.query.page === 'string') { req.mquery.options.skip = (parseFloat(req.query.page) - 1) * (req.mquery.options.limit || 1); } next(); } catch (error) { next(error); } }; }; exports.mquery = mquery; //# sourceMappingURL=mquery.js.map