/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/express-mquery@1.3.1/lib/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";const lodash=require("lodash"),async=require("async"),autoParse=require("auto-parse"),filter=(e,s)=>{try{const a=lodash.merge({},autoParse(e)),t=a.filter||a.filters||a.query,{q:l}=a;return s(null,lodash.omitBy(lodash.merge({},t,{q:l}),(e=>"boolean"!=typeof e&&!e)))}catch(e){return e.message=e.message||"Bad Request",e.status=400,s(e)}},headers=(e,s)=>{try{const a=autoParse(e);let t=lodash.merge({},a.header,a.headers);const l=["if-modified-since"];t=lodash.pick(t,l),t=lodash.mapKeys(t,((e,s)=>lodash.camelCase(s)));const r=["ifModifiedSince"];return t=lodash.mapValues(t,((e,s)=>lodash.includes(r,s)?new Date(e):e)),s(null,t)}catch(e){return e.message=e.message||"Bad Request",e.status=400,s(e)}},paginate=(e,s)=>{try{let a=lodash.merge({maxLimit:50},autoParse(e));a.page&&lodash.isPlainObject(a.page)&&(a=lodash.merge({},a,a.page),a.page=a.number);let t={limit:10,skip:0,page:1},l=a.limit||a.max||a.size||a.rpp||a.count||a.perPage||lodash.get(a,"per_page")||a.cursor||10;l=l>a.maxLimit?a.maxLimit:l,l=l<0?10:l,t=lodash.merge({},t,{limit:l});let r=a.page||a.number||1;r=r<0?1:r,t=lodash.merge({},t,{page:r});const o=lodash.has(a,"skip")||lodash.has(a,"offset")||lodash.has(a,"start");let d=a.skip||a.offset||a.start||0;return d=d<0?0:d,d=!o&&r>0?(r-1)*l:d,t=lodash.merge({},t,{skip:d}),s(null,t)}catch(e){return e.message=e.message||"Bad Request",e.status=400,s(e)}},select=(e,s)=>{try{const a=lodash.merge({},autoParse(e));let t=a.select||a.fields||a.projections;lodash.isString(t)&&(t=[].concat(t)),lodash.isPlainObject(t)&&(t=lodash.map(t,((e,s)=>lodash.isNaN(Number(s))?{[s]:e}:e)));const l=(e="")=>{let s=lodash.compact(e.split(","));s=lodash.map(s,lodash.trim),s=lodash.uniq(s);const a={};return lodash.forEach(s,(e=>{"-"===e[0]?a[e.substring(1)]=0:a[e]=1})),a};return t=lodash.reduce(t,((e,s)=>{if(s&&lodash.isString(s)){const a=l(s);e=lodash.merge({},e,a)}return lodash.isPlainObject(s)&&lodash.forEach(s,((s,a)=>{if(lodash.isNaN(Number(s))){const t=l(s);e=lodash.merge({},e,{[a]:t})}else e=lodash.merge({},e,{[a]:s})})),e}),{}),s(null,t)}catch(e){return e.message=e.message||"Bad Request",e.status=400,s(e)}},populate=(e,s)=>{try{const a=lodash.merge({},autoParse(e));let t=a.populate||a.include||a.includes;return t&&lodash.isString(t)&&(t=[].concat(t.split(",")),t=lodash.compact(t),t=lodash.map(t,(e=>e.trim())),t=lodash.uniq(t),t=lodash.map(t,(e=>lodash.merge({},{path:e})))),t=lodash.compact([].concat(t)),async.waterfall([e=>{select(a,e)},(e,s)=>{t=lodash.map(t,(s=>a=>{const t=e?e[s.path]:void 0;t&&(s=lodash.merge({},s,{select:t})),s.select?select(s,((e,t)=>{a(e,lodash.merge({},s,{select:t}))})):a(null,s)})),async.parallel(t,s)}],s)}catch(e){return e.message=e.message||"Bad Request",e.status=400,s(e)}},sort=(e,s)=>{try{const a=lodash.merge({},autoParse(e));let t=a.order||a.sort;return t&&lodash.isString(t)&&(t=lodash.compact(t.split(",")),t=lodash.uniq(t),t=lodash.reduce(t,((e,s)=>(s.trim(),"-"===s[0]?e[s.substring(1)]=-1:e[s]=1,e)),{})),s(null,t)}catch(e){return e.message=e.message||"Bad Request",e.status=400,s(e)}},parse=(e,s)=>{try{const a=autoParse(e);return async.parallel({filter:e=>filter(a,e),headers:e=>headers(a,e),paginate:e=>paginate(a,e),populate:e=>populate(a,e),select:e=>select(a,e),sort:e=>sort(a,e)},((e,a)=>{if(a){if(delete a.maxLimit,a.populate&&a.select){const e=lodash.map(a.populate,"path");a.select=lodash.omit(a.select,e)}a=lodash.omitBy(a,lodash.isEmpty)}s(e,a)}))}catch(e){return e.message=e.message||"Bad Request",e.status=400,s(e)}},mquery=e=>{const s=lodash.merge({},{limit:10,maxLimit:50},e);return[(e,a,t)=>{const l=lodash.merge({},s,{headers:e.headers},e.query);parse(l,((s,a)=>{a&&!lodash.isEmpty(a)&&(e.mquery=a),t(s,a)}))}]};module.exports=mquery;
//# sourceMappingURL=/sm/4e7cdb23cd31ce9a4fb95936b08db8104f2e47955bf57043898009e46d65a5c3.map