New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

mingo

Package Overview
Dependencies
Maintainers
1
Versions
143
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mingo - npm Package Compare versions

Comparing version 2.0.1 to 2.0.2

22

CHANGELOG.md
Changelog
=========
## 2.0.1 / 2017-09-xx
## 2.0.2 / 2017-09-14
- Remove array size constraint on `$concatArrays`. [#64](https://github.com/kofrasa/mingo/issues/64)
- Filter out empty values from collection. [#65](https://github.com/kofrasa/mingo/issues/65)
- Fix false positive tests and `$substrBytes`. [#66](https://github.com/kofrasa/mingo/issues/66)
- `$regex` should matched nested one level deep. [#70](https://github.com/kofrasa/mingo/issues/70)
## 2.0.1 / 2017-09-07
- Minimize cloning in pipeline operators

@@ -11,7 +17,7 @@ - Return new object for `$lookup` without mutating original. Fixes #59 and #60

- Removed custom polyfills
- Added $strLenBytes, $strLenCP, $substrCP, $substrBytes
- Fix $indexOfBytes
- Fix $stdDevSamp
- Fix $in for aggregation operations
- Removed max and min cursor methods.
- Added `$strLenBytes`, `$strLenCP`, `$substrCP`, `$substrBytes`
- Fix `$indexOfBytes`
- Fix `$stdDevSamp`
- Fix `$in` for aggregation operations
- Removed max and min cursor methods.
- Restrict custom query operator type `OP_QUERY` to return boolean only

@@ -39,4 +45,4 @@ - Rename `OP_AGGREGATE` to `OP_EXPRESSION`

- Fix `$where` operator not executed last. https://github.com/kofrasa/mingo/pull/50
- Fix matching nested arrays. https://github.com/kofrasa/mingo/issues/51
- Added `$facet` and `$bucket` operators
- Fix matching nested arrays. https://github.com/kofrasa/mingo/issues/51
- Added `$facet` and `$bucket` operators
- Added `$bucketAuto` operator without granularity support

@@ -43,0 +49,0 @@ - Added string keys for `$type` operator

@@ -1,5 +0,5 @@

// mingo.js 2.0.1
// mingo.js 2.0.2
// Copyright (c) 2017 Francis Asante
// MIT
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):n.mingo=t()}(this,function(){"use strict";function n(n,t){_(n)&&w(t)}function t(n){switch(u(n)){case Qn:case Wn:return I(n,t);default:return n}}function e(n){switch(u(n)){case Qn:return B([],n);case Wn:return Object.assign({},n);default:return n}}function r(n){return null===n?"Null":void 0===n?"Undefined":n.constructor.name}function u(n){return r(n).toLowerCase()}function i(n){return u(n)===Jn}function o(n){return u(n)===Hn}function a(n){return u(n)===zn}function s(n){return u(n)===Qn}function c(n){return!d(n)&&k(n,"length")}function l(n){return u(n)===Wn}function f(n){return n===Object(n)}function v(n){return u(n)===Vn}function h(n){return u(n)===Kn}function p(n){return u(n)===Gn}function d(n){return $(n)||g(n)}function $(n){return u(n)===Fn}function g(n){return u(n)===Yn}function m(n,t){return n.some(P.bind(null,t))}function y(n,t){return!m(n,t)}function b(n){return!!n}function _(n){return!n}function x(n){return d(n)||s(n)&&0===n.length||l(n)&&0===j(n).length||!n}function O(n){return s(n)?n:[n]}function k(n,t){return n.hasOwnProperty(t)}function w(n){throw new Error(n)}function j(n){return Object.keys(n)}function M(n,t){n[rt]=Object.assign(n[rt]||{},t)}function N(n,t){return k(n,rt)&&l(t)&&P(Object.assign({},n[rt],t),n[rt])}function A(n){k(n,rt)&&delete n[rt]}function E(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(n(t===Object(t),"Cannot iterate over object of type '"+u(t)+"'"),c(t))for(var i=0,o=t.length;i<o&&!1!==e.call(r,t[i],i,t);i++);else for(var a in t)if(k(t,a)&&!1===e.call(r,t[a],a,t))break}function I(n,t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(s(n))return n.map(t,e);if(l(n)){var r={};return E(n,function(n,u){return r[u]=t.call(e,n,u)},n),r}}function S(n,t,e){return s(n)?n.reduce(t,e):(E(n,function(r,u){return e=t(e,r,u,n)}),e)}function q(n,t){return n.filter(m.bind(null,t))}function C(n,t){return B(B([],n),t.filter(y.bind(null,n)))}function P(n,t){for(var e=[n],r=[t];e.length>0;)if(n=e.pop(),t=r.pop(),n!==t){var i=u(n);if(i!==u(t)||i===Gn)return!1;switch(i){case Qn:if(n.length!==t.length)return!1;B(e,n),B(r,t);break;case Wn:var o=j(n),a=j(t);if(o.length!==a.length)return!1;o.sort(),a.sort();for(var s=0,c=o.length;s<c;s++){var l=o[s];if(l!==a[s])return!1;e.push(n[l]),r.push(t[l])}break;default:if(R(n)!==R(t))return!1}}return 0===e.length}function T(n){var t={},e=[];return E(n,function(n){var r=U(n);k(t,r)||(e.push(n),t[r]=0)}),e}function R(n){var t=u(n);switch(t){case Jn:case zn:case Kn:return n.toString();case Hn:return JSON.stringify(n);case Vn:return n.toISOString();case Fn:case Yn:return t;case Qn:return"["+I(n,R)+"]";default:var e=t===Wn?"":""+r(n),i=j(n);return i.sort(),e+"{"+I(i,function(t){return R(t)+":"+R(n[t])})+"}"}}function U(n){var t=0,e=void 0,r=void 0,u=void 0,i=R(n);if(0===i.length)return t;for(e=0,u=i.length;e<u;e++)r=i.charCodeAt(e),t=(t<<5)-t+r,t|=0;return t}function D(n,t){for(var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r={},u=[],i=n.length,o=[],a=0;a<i;a++){var s=n[a],c=t.call(e,s,a);if(d(c))o.push(s);else{var l=U(s);k(r,l)||(r[l]=[c,a]),u.push(s)}}return u.sort(function(n,t){var e=r[U(n)],u=r[U(t)];return e[0]<u[0]?-1:e[0]>u[0]?1:e[1]<u[1]?-1:e[1]>u[1]?1:0}),B(o,u)}function L(n,t,e){var r={keys:[],groups:[]},u={};return E(n,function(n){var i=t.call(e,n),o=U(i),a=-1;g(u[o])&&(a=r.keys.length,u[o]=a,r.keys.push(i),r.groups.push([])),a=u[o],r.groups[a].push(n)}),r}function B(n,t){return Array.prototype.push.apply(n,t),n}function F(n,t){for(var e=0,r=n.length-1;e<=r;){var u=Math.round(e+(r-e)/2);if(t<n[u])r=u-1;else{if(!(t>n[u]))return u;e=u+1}}return e}function Y(n){var t=this;return function(e){return function(){for(var r=arguments.length,u=Array(r),i=0;i<r;i++)u[i]=arguments[i];var o=U(u);return k(e,o)||(e[o]=n.apply(t,u)),e[o]}}({})}function J(n,e){var r=j(e);return 0===r.length?n:I(n,function(n){var u=t(n);return E(r,function(t){var r=Rn(n,e[t]);Cn(u,t,r)}),u})}function z(t,e){var u=e.boundaries,i=e.default,o=u[0],a=u[u.length-1],s=e.output||{count:{$sum:1}};n(u.length>2,"$bucket 'boundaries' expression must have at least 3 elements");for(var c=r(o),l=0,f=u.length-1;l<f;l++)n(c===r(u[l+1]),"$bucket 'boundaries' must all be of the same type"),n(u[l]<u[l+1],"$bucket 'boundaries' must be sorted in ascending order");!d(i)&&r(e.default)===r(o)&&n(o>e.default||a<e.default,"$bucket 'default' expression must be out of boundaries range");var v={};return E(u,function(n){return v[n]=[]}),d(i)||(v[i]=[]),E(t,function(t){var r=Rn(t,e.groupBy);if(d(r)||r<o||r>=a)n(!d(i),"$bucket require a default for out of range values"),v[i].push(t);else{n(r>=o&&r<a,"$bucket 'groupBy' expression must resolve to a value in range of boundaries");var s=F(u,r),c=u[Math.max(0,s-1)];v[c].push(t)}}),u.pop(),d(i)||u.push(i),I(u,function(n){var t=En(v[n],null,s);return Object.assign(t,{_id:n})})}function H(t,e){var r=e.output||{count:{$sum:1}},u=e.groupBy,i=e.buckets;n(i>0,"The $bucketAuto 'buckets' field must be greater than 0, but found: "+i);for(var o=Math.max(1,Math.round(t.length/i)),a=Y(Rn),s={},c=[],l=D(t,function(n){var t=a(n,u);return d(t)?c.push(n):(s[t]||(s[t]=[]),s[t].push(n)),t}),f=Nn(),v=[],h=0,p=0,$=l.length;p<i&&h<$;p++){for(var g={},m=[],y=0;y<o&&h<$;y++){var b=a(l[h],u);if(d(b)&&(b=null),B(m,d(b)?c:s[b]),h+=d(b)?c.length:s[b].length,k(g,"min")||(g.min=b),v.length>0){v[v.length-1][f].max=g.min}}p==i-1&&B(m,l.slice(h)),v.push(Object.assign(En(m,null,r),{_id:g}))}return v.length>0&&(v[v.length-1][f].max=a(l[l.length-1],u)),v}function V(t,e){n(o(e)&&""!==e.trim()&&-1===e.indexOf(".")&&"$"!==e.trim()[0],"Invalid expression value for $count");var r={};return r[e]=t.length,r}function K(n,t){return I(t,function(t){return cn(n,t)})}function Q(n,t){var e=Nn(),r=t[e],u=L(n,function(n){return Rn(n,r,r)}),i=[];return delete t[e],E(u.keys,function(n,r){var o={};g(n)||(o[e]=n),E(t,function(n,t){o[t]=En(u.groups[r],t,n)}),i.push(o)}),i}function W(n,t){return n.slice(0,t)}function G(t,r){function u(n){return U(d(n)?null:n)}var i=r.from,a=r.localField,c=r.foreignField,l=r.as;n(s(i)&&o(c)&&o(a)&&o(l),"$lookup: invalid argument");var f={};return E(i,function(n){var t=u(n[c]);f[t]=f[t]||[],f[t].push(n)}),I(t,function(n){var t=u(n[a]),r=e(n);return r[l]=f[t]||[],r})}function X(n,t){return new pt(t).find(n).all()}function Z(t,e){return n(s(e),"$out: argument must be an array"),B(e,t),t}function nn(e,r){if(x(r))return e;var u=[],i=j(r),s=!1,c=Nn(),f=[!1,!1];if(E(r,function(t,e){e!==c&&(0===t||!1===t?f[0]=!0:f[1]=!0,n(f[0]!==f[1],"Projection cannot have a mix of inclusion and exclusion."))}),m(i,c)){var v=r[c];0!==v&&!1!==v||(i=i.filter(y.bind(null,[c])),n(y(i,c),"Must not contain collections id key"),s=x(i))}else i.push(c);return E(e,function(n){var e={},f=!1,v=!1,h=[];s&&h.push(c),E(i,function(t){var u=r[t],i=void 0;if(t!==c&&m([0,!1],u)&&(v=!0),t===c&&x(u))i=n[t];else if(o(u))i=Rn(n,u,t);else if(m([1,!0],u));else{if(!l(u))return void h.push(t);var s=j(u);s=!(s.length>1)&&s[0],m(wn(tt),s)?"$slice"===s?O(u[s]).every(a)?(i=ut[s](n,u[s],t),f=!0):i=Rn(n,u,t):i=ut[s](n,u[s],t):i=Rn(n,u,t)}var p=Sn(n,t);g(p)||Object.assign(e,p),y([0,1,!1,!0],u)&&(g(i)?Pn(e,t):Cn(e,t,i))}),(f||v||s)&&(e=Object.assign({},n,e),h.length>0&&(e=t(e),E(h,function(n){return Pn(e,n)}))),u.push(e)}),u}function tn(n,e){return I(n,function(n){return Ln(t(n),e)})}function en(t,e){return I(t,function(t){return t=Rn(t,e.newRoot),n(l(t),"$replaceRoot expression must return an object"),t})}function rn(t,e){var r=e.size;n(a(r),"$sample size must be a positive integer");for(var u=[],i=t.length,o=0;o<r;o++){var s=Math.floor(Math.random()*i);u.push(t[s])}return u}function un(n,t){return n.slice(t)}function on(n,t){if(!x(t)&&l(t)){E(j(t).reverse(),function(e){var r=L(n,function(n){return In(n,e)}),u={},i=function(n){return u[U(n)]},o=D(r.keys,function(n,t){return u[U(n)]=t,n});-1===t[e]&&o.reverse(),n=[],E(o,function(t){return B(n,r.groups[i(t)])})})}return n}function an(n,t){var e={count:{$sum:1}};return e[Nn()]=t,this.$sort(this.$group(n,e),{count:-1})}function sn(n,t){o(t)&&(t={path:t});var r=t.path.substr(1),u=t.includeArrayIndex||!1,i=t.preserveNullAndEmptyArrays||!1,a=[],c=function(n,t){!1!==u&&(n[u]=t),a.push(n)};return E(n,function(n){var t=An(n,r);if(s(t))if(0===t.length&&!0===i){var u=e(n);delete u[r],c(u,null)}else E(t,function(t,u){var i=e(n);i[r]=t,c(i,u)});else x(t)&&!0!==i||c(e(n),null)}),a}function cn(t,e){return n(s(e),"Aggregation pipeline must be an array"),new ct(e).run(t)}function ln(n,t){return T(this.$push(n,t))}function fn(n,t){var e=this.$push(n,t).filter(a);return S(e,function(n,t){return n+t},0)/(e.length||1)}function vn(n,t){return n.length>0?Rn(n[0],t):void 0}function hn(n,t){return n.length>0?Rn(n[n.length-1],t):void 0}function pn(n,t){return S(this.$push(n,t),function(n,t){return d(n)||t>n?t:n},void 0)}function dn(n,t){return S(this.$push(n,t),function(n,t){return d(n)||t<n?t:n},void 0)}function $n(n,t){return d(t)?n:I(n,function(n){return Rn(n,t)})}function gn(n,t){return Dn({data:this.$push(n,t).filter(a),sampled:!1})}function mn(n,t){return Dn({data:this.$push(n,t).filter(a),sampled:!0})}function yn(n,t){return s(n)?a(t)?n.length*t:S(this.$push(n,t).filter(a),function(n,t){return n+t},0):0}function bn(n,t,e){return new pt(t).find(n,e)}function _n(n,t){return new pt(t).remove(n)}function xn(n,t){return new Array(Math.max(t-String(n).length+1,0)).join("0")+n}function On(n){if(n<128)return[n];for(var t=n<2048&&1||n<65536&&2||3,e=wt[t-1],r=[(n>>6*t)+e];t>0;){t--;var u=n>>6*t;r.push(128|63&u)}return r}function kn(n){for(var t=[],e=0,r=n.length;e<r;e++)t.push(On(n.codePointAt(e)));return t}function wn(){return S(arguments,function(n,t){return B(n,j(Nt[t]))},[])}function jn(t,e){var r=e(Bn());n(k(Nt,t),"Invalid operator class "+t);var u=Nt[t];E(r,function(e,r){n(/^\$\w+$/.test(r),"Invalid operator name "+r),n(!k(u,r),r+" already exists for '"+t+"' operators")});var o={};switch(t){case et:E(r,function(t,e){o[e]=function(t,r){return function(u,o){return{test:function(a){var s=In(a,u),c=t.call(r,u,s,o);return n(i(c),e+" must return a boolean"),c}}}}(t,r)});break;case tt:E(r,function(n,t){o[t]=function(n,t){return function(e,r,u){var i=In(e,u);return n.call(t,u,i,r)}}(n,r)});break;default:E(r,function(n,t){o[t]=function(n,t){return function(){for(var e=arguments.length,r=Array(e),u=0;u<e;u++)r[u]=arguments[u];return n.apply(t,r)}}(n,r)})}Object.assign(Nt[t],o)}function Mn(n){Object.assign(At,n||{})}function Nn(){return At.key}function An(n,t){return n[t]}function En(t,e,r){if(m(wn(nt),e))return lt[e](t,r);if(l(r)){var u={};return E(r,function(e,i){if(u[i]=En(t,i,r[i]),m(wn(nt),i))return u=u[i],n(1===j(r).length,"Invalid $group expression '"+JSON.stringify(r)+"'"),!1}),u}}function In(n,t){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=t.split("."),u=n;n:for(var i=0;i<r.length;i++){var o=function(n){if(null===r[n].match(/^\d+$/)&&s(u)){if(!0===e&&0===n)return{v:u};u=u.map(function(t){return In(t,r[n],!0)}),M(u,{isMulti:!0}),1===u.length&&(u=u[0])}else u=An(u,r[n]),e=!1;if(d(u))return"break"}(i);switch(o){case"break":break n;default:if("object"===(void 0===o?"undefined":ot(o)))return o.v}}return u}function Sn(t,e){var r=e.split("."),u=r[0],i=1===r.length||r.slice(1).join("."),o=null!==u.match(/^\d+$/),a=r.length>1,c=void 0,l=void 0;try{s(t)?o?(c=An(t,u),a&&(c=Sn(c,i)),n(!g(c)),c=[c]):(c=[],E(t,function(n){l=Sn(n,e),d(l)||c.push(l)}),n(c.length>0)):(l=An(t,u),a&&(l=Sn(l,i)),n(!g(l)),c={},c[u]=l)}catch(n){c=void 0}return c}function qn(n,t,e){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],u=t.split("."),i=u[0],o=1===u.length||u.slice(1).join(".");if(1===u.length)e(n,i);else if(s(n)&&!/^\d+$/.test(i))E(n,function(n){qn(n,t,e,r)});else{if(!0===r){var a=k(n,i);a&&!d(n[i])||(n[i]={})}qn(n[i],o,e,r)}}function Cn(n,t,e){qn(n,t,function(n,t){n[t]=e},!0)}function Pn(n,t){qn(n,t,function(n,t){s(n)&&/^\d+$/.test(t)?n.splice(parseInt(t),1):l(n)&&delete n[t]})}function Tn(n){if(m(Xn,u(n)))return h(n)?{$regex:n}:{$eq:n};if(f(n)){var t=j(n);if(0===q(wn(et),t).length)return{$eq:n};if(m(t,"$regex")){var e=n.$regex,r=n.$options||"",i="";o(e)&&(i+=e.ignoreCase||r.indexOf("i")>=0?"i":"",i+=e.multiline||r.indexOf("m")>=0?"m":"",i+=e.global||r.indexOf("g")>=0?"g":"",e=new RegExp(e,i)),n.$regex=e,delete n.$options}}return n}function Rn(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(i.root=i.root||t,m(wn(Zn),r))return Mt[r](t,e,i);if(m(wn(nt),r))return t=Rn(t,e,null,i),n(s(t),r+" expression must resolve to an array"),lt[r](t,null,i);if(o(e)&&e.length>0&&"$"===e[0]){if(m(St,e))return Et[e](t,null,i);if(m(qt,e))return e;var a=St.filter(function(n){return 0===e.indexOf(n+".")});return 1===a.length&&(a=a[0],"$$ROOT"===a&&(t=i.root),e=e.substr(a.length)),In(t,e.slice(1))}switch(u(e)){case Qn:return e.map(function(n){return Rn(t,n)});case Wn:var c={};return E(e,function(r,u){if(c[u]=Rn(t,r,u,i),m(wn(Zn,nt),u))return n(1===j(e).length,"Invalid aggregation expression '"+JSON.stringify(e)+"'"),c=c[u],!1}),c;default:return e}}function Un(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return d(r)?e<0?(e=Math.max(0,t.length+e),r=t.length-e+1):(r=e,e=0):(e<0&&(e=Math.max(0,t.length+e)),n(r>0,"Invalid argument value for $slice operator. Limit must be a positive number"),r+=e),t.slice(e,r)}function Dn(n){var t=S(n.data,function(n,t){return n+t},0),e=n.data.length||1,r=n.sampled&&1||0,u=t/e;return Math.sqrt(S(n.data,function(n,t){return n+Math.pow(t-u,2)},0)/(e-r))}function Ln(n,t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e.root=e.root||n;var r=Rn(n,t,null,e);return m(qt,r)?It[r](n,t,e):r}function Bn(){return{assert:n,computeValue:Rn,clone:e,cloneDeep:t,each:E,err:w,getHash:U,getType:r,has:k,idKey:Nn,includes:m.bind(null),isArray:s,isBoolean:i,isDate:v,isEmpty:x,isEqual:P,isFunction:p,isNil:d,isNull:$,isNumber:a,isObject:l,isRegExp:h,isString:o,isUndefined:g,keys:j,map:I,ops:wn,resolve:In,reduce:S}}var Fn="null",Yn="undefined",Jn="boolean",zn="number",Hn="string",Vn="date",Kn="regexp",Qn="array",Wn="object",Gn="function",Xn=[Fn,Yn,Jn,zn,Hn,Vn,Kn],Zn="expression",nt="group",tt="projection",et="query",rt="__mingo__",ut={$:function(n,t,e){w("$ not implemented")},$elemMatch:function(t,e,r){var u=In(t,r),i=new pt(e);n(s(u),"$elemMatch: invalid argument");for(var o=0;o<u.length;o++)if(i.test(u[o]))return[u[o]]},$slice:function(t,e,r){var u=In(t,r);return s(u)?s(e)?Un(u,e[0],e[1]):(n(a(e),"$slice: invalid arguments for projection"),Un(u,e)):u}},it={$addFields:J,$bucket:z,$bucketAuto:H,$count:V,$facet:K,$group:Q,$limit:W,$lookup:G,$match:X,$out:Z,$project:nn,$redact:tn,$replaceRoot:en,$sample:rn,$skip:un,$sort:on,$sortByCount:an,$unwind:sn},ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},at=function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")},st=function(){function n(n,t){for(var e=0;e<t.length;e++){var r=t[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,r.key,r)}}return function(t,e,r){return e&&n(t.prototype,e),r&&n(t,r),t}}(),ct=function(){function t(n){at(this,t),this.__operators=n}return st(t,[{key:"run",value:function(t,e){return x(this.__operators)||E(this.__operators,function(r){var u=j(r);n(1===u.length&&m(wn("pipeline"),u[0]),"Invalid aggregation operator "+u),u=u[0],t=e&&e instanceof pt?it[u].call(e,t,r[u]):it[u](t,r[u])}),t}}]),t}(),lt={$addToSet:ln,$avg:fn,$first:vn,$last:hn,$max:pn,$min:dn,$push:$n,$stdDevPop:gn,$stdDevSamp:mn,$sum:yn},ft=function(){function t(n,e,r){at(this,t),this.__query=e,this.__collection=n,this.__projection=r||e.__projection,this.__operators={},this.__result=!1,this.__position=0}return st(t,[{key:"_fetch",value:function(){var t=this;if(!1!==this.__result)return this.__result;l(this.__projection)&&Object.assign(this.__operators,{$project:this.__projection}),n(s(this.__collection),"Input collection is not of valid type. Must be an Array."),this.__result=this.__collection.filter(this.__query.test,this.__query);var e=[];if(E(["$sort","$skip","$limit","$project"],function(n){if(k(t.__operators,n)){var r={};r[n]=t.__operators[n],e.push(r)}}),e.length>0){var r=new ct(e);this.__result=r.run(this.__result,this.__query)}return this.__result}},{key:"all",value:function(){return this._fetch()}},{key:"first",value:function(){return this.count()>0?this._fetch()[0]:null}},{key:"last",value:function(){return this.count()>0?this._fetch()[this.count()-1]:null}},{key:"count",value:function(){return this._fetch().length}},{key:"skip",value:function(n){return Object.assign(this.__operators,{$skip:n}),this}},{key:"limit",value:function(n){return Object.assign(this.__operators,{$limit:n}),this}},{key:"sort",value:function(n){return Object.assign(this.__operators,{$sort:n}),this}},{key:"next",value:function(){return this.hasNext()?this._fetch()[this.__position++]:null}},{key:"hasNext",value:function(){return this.count()>this.__position}},{key:"map",value:function(n){return this._fetch().map(n)}},{key:"forEach",value:function(n){E(this._fetch(),n)}},{key:Symbol.iterator,value:function(){var n=this;return{next:function(){return n.hasNext()?{done:!1,value:n.next()}:{done:!0}}}}}]),t}(),vt={$eq:function(n,t){if(P(n,t))return!0;if(d(n)&&d(t))return!0;if(s(n)){if(!N(n,{isMulti:!0}))return-1!==n.findIndex(P.bind(null,t));try{for(var e=0;e<n.length;e++)if(this.$eq(n[e],t))return!0}finally{A(n)}}return!1},$ne:function(n,t){return!this.$eq(n,t)},$in:function(n,t){return q(O(n),t).length>0},$nin:function(n,t){return d(n)||!this.$in(n,t)},$lt:function(n,t){return!g(O(n).find(function(n){return n<t}))},$lte:function(n,t){return!g(O(n).find(function(n){return n<=t}))},$gt:function(n,t){return!g(O(n).find(function(n){return n>t}))},$gte:function(n,t){return!g(O(n).find(function(n){return n>=t}))},$mod:function(n,t){return!g(O(n).find(function(n){return a(n)&&s(t)&&2===t.length&&n%t[0]===t[1]}))},$regex:function(n,t){return!g(O(n).find(function(n){return o(n)&&h(t)&&!!n.match(t)}))},$exists:function(n,t){return(!1===t||0===t)&&d(n)||(!0===t||1===t)&&!d(n)},$all:function(n,t){var e=!1;if(s(n)&&s(t))for(var r=0,u=t.length;r<u;r++){if(!l(t[r])||!m(j(t[r]),"$elemMatch"))return q(t,n).length===u;e=e||this.$elemMatch(n,t[r].$elemMatch)}return e},$size:function(n,t){return s(n)&&a(t)&&n.length===t},$elemMatch:function(n,t){if(s(n)&&!x(n))for(var e=new pt(t),r=0,u=n.length;r<u;r++)if(e.test(n[r]))return!0;return!1},$type:function(n,t){switch(t){case 1:case"double":return a(n)&&-1!==(n+"").indexOf(".");case 2:case Hn:return o(n);case 3:case Wn:return l(n);case 4:case Qn:return s(n);case 6:case Yn:return d(n);case 8:case"bool":return i(n);case 9:case Vn:return v(n);case 10:case Fn:return $(n);case 11:case"regex":return h(n);case 16:case"int":return a(n)&&n<=2147483647&&-1===(n+"").indexOf(".");case 18:case"long":return a(n)&&n>2147483647&&n<=0x8000000000000000&&-1===(n+"").indexOf(".");case 19:case"decimal":return a(n);default:return!1}}},ht={$and:function(t,e){n(s(e),"Invalid expression: $and expects value to be an Array");var r=[];return E(e,function(n){return r.push(new pt(n))}),{test:function(n){for(var t=0;t<r.length;t++)if(!r[t].test(n))return!1;return!0}}},$or:function(t,e){n(s(e),"Invalid expression. $or expects value to be an Array");var r=[];return E(e,function(n){return r.push(new pt(n))}),{test:function(n){for(var t=0;t<r.length;t++)if(r[t].test(n))return!0;return!1}}},$nor:function(t,e){n(s(e),"Invalid expression. $nor expects value to be an Array");var r=this.$or("$or",e);return{test:function(n){return!r.test(n)}}},$not:function(n,t){var e={};e[n]=Tn(t);var r=new pt(e);return{test:function(n){return!r.test(n)}}},$where:function(n,t){return p(t)||(t=new Function("return "+t+";")),{test:function(n){return!0===t.call(n)}}}};E(vt,function(n,t){ht[t]=function(n,t){return function(e,r){return{test:function(u){var i=In(u,e);return n.call(t,i,r)}}}}(n,vt)});var pt=function(){function t(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};at(this,t),this.__criteria=n,this.__projection=e,this.__compiled=[],this._compile()}return st(t,[{key:"_compile",value:function(){var t=this;if(!x(this.__criteria)){n(l(this.__criteria),"Criteria must be of type Object");var e=void 0;E(this.__criteria,function(n,r){"$where"===r?e={field:r,expr:n}:m(["$and","$or","$nor"],r)?t._processOperator(r,r,n):(n=Tn(n),E(n,function(n,e){t._processOperator(r,e,n)})),l(e)&&t._processOperator(e.field,e.field,e.expr)})}}},{key:"_processOperator",value:function(t,e,r){n(m(wn(et),e),"Invalid query operator '"+e+"' detected"),this.__compiled.push(ht[e](t,r))}},{key:"test",value:function(n){for(var t=0,e=this.__compiled.length;t<e;t++)if(!this.__compiled[t].test(n))return!1;return!0}},{key:"find",value:function(n,t){return new ft(n,this,t)}},{key:"remove",value:function(n){var t=this;return S(n,function(n,e){return t.test(e)||n.push(e),n},[])}}]),t}(),dt={$abs:function(n,t){var e=Rn(n,t);return null===e||void 0===e?null:Math.abs(e)},$add:function(n,t){return S(Rn(n,t),function(n,t){return n+t},0)},$ceil:function(t,e){var r=Rn(t,e);return d(r)?null:(n(a(r)||isNaN(r),"$ceil must be a valid expression that resolves to a number."),Math.ceil(r))},$divide:function(n,t){var e=Rn(n,t);return e[0]/e[1]},$exp:function(t,e){var r=Rn(t,e);return d(r)?null:(n(a(r)||isNaN(r),"$exp must be a valid expression that resolves to a number."),Math.exp(r))},$floor:function(t,e){var r=Rn(t,e);return d(r)?null:(n(a(r)||isNaN(r),"$floor must be a valid expression that resolves to a number."),Math.floor(r))},$ln:function(t,e){var r=Rn(t,e);return d(r)?null:(n(a(r)||isNaN(r),"$ln must be a valid expression that resolves to a number."),Math.log(r))},$log:function(t,e){var r=Rn(t,e);return n(s(r)&&2===r.length,"$log must be a valid expression that resolves to an array of 2 items"),r.some(d)?null:(n(r.some(isNaN)||r.every(a),"$log expression must resolve to array of 2 numbers"),Math.log10(r[0])/Math.log10(r[1]))},$log10:function(t,e){var r=Rn(t,e);return d(r)?null:(n(a(r)||isNaN(r),"$log10 must be a valid expression that resolves to a number."),Math.log10(r))},$mod:function(n,t){var e=Rn(n,t);return e[0]%e[1]},$multiply:function(n,t){return S(Rn(n,t),function(n,t){return n*t},1)},$pow:function(t,e){var r=Rn(t,e);return n(s(r)&&2===r.length&&r.every(a),"$pow expression must resolve to an array of 2 numbers"),n(!(0===r[0]&&r[1]<0),"$pow cannot raise 0 to a negative exponent"),Math.pow(r[0],r[1])},$sqrt:function(t,e){var r=Rn(t,e);return d(r)?null:(n(a(r)&&r>0||isNaN(r),"$sqrt expression must resolve to non-negative number."),Math.sqrt(r))},$subtract:function(n,t){var e=Rn(n,t);return e[0]-e[1]},$trunc:function(t,e){var r=Rn(t,e);return d(r)?null:(n(a(r)||isNaN(r),"$trunc expression must resolve to a number."),Math.trunc(r))}},$t={$arrayElemAt:function(t,e){var r=Rn(t,e);n(s(r)&&2===r.length,"$arrayElemAt expression must resolve to an array of 2 elements"),n(s(r[0]),"First operand to $arrayElemAt must resolve to an array"),n(a(r[1]),"Second operand to $arrayElemAt must resolve to an integer");var u=r[1];return r=r[0],u<0&&Math.abs(u)<=r.length?r[u+r.length]:u>=0&&u<r.length?r[u]:void 0},$arrayToObject:function(t,e){var r=Rn(t,e);return n(s(r),"$arrayToObject expression must resolve to an array"),S(r,function(t,e){return s(e)&&2==e.length?t[e[0]]=e[1]:(n(l(e)&&k(e,"k")&&k(e,"v"),"$arrayToObject expression is invalid."),t[e.k]=e.v),t},{})},$concatArrays:function(t,e){var r=Rn(t,e,null);return n(s(r)&&2===r.length,"$concatArrays expression must resolve to an array of 2 elements"),r.some(d)?null:r[0].concat(r[1])},$filter:function(t,e){var r=Rn(t,e.input),u=e.as,i=e.cond;return n(s(r),"$filter 'input' expression must resolve to an array"),r.filter(function(n){var t={};return t["$"+u]=n,!0===Rn(t,i)})},$in:function(t,e){var r=Rn(t,e[0]),u=Rn(t,e[1]);return n(s(u),"$in second argument must be an array"),m(u,r)},$indexOfArray:function(t,e){var r=Rn(t,e);if(d(r))return null;var u=r[0],i=r[1];if(d(u))return null;n(s(u),"$indexOfArray expression must resolve to an array.");var o=r[2]||0,a=r[3];return d(a)&&(a=u.length),o>a?-1:(n(o>=0&&a>=0,"$indexOfArray expression is invalid"),(o>0||a<u.length)&&(u=u.slice(o,a)),u.findIndex(P.bind(null,i))+o)},$isArray:function(n,t){return s(Rn(n,t[0]))},$map:function(t,e){var r=Rn(t,e.input);n(s(r),"$map 'input' expression must resolve to an array");var u=e.as,i=e.in,o="$"+u;return I(r,function(n){return t[o]=n,Rn(t,i)})},$objectToArray:function(t,e){var r=Rn(t,e);n(l(r),"$objectToArray expression must resolve to an object");var u=[];return E(r,function(n,t){return u.push({k:t,v:n})}),u},$range:function(n,t){for(var e=Rn(n,t),r=e[0],u=e[1],i=e[2]||1,o=[];r<u&&i>0||r>u&&i<0;)o.push(r),r+=i;return o},$reduce:function(t,e){var r=Rn(t,e.input),u=Rn(t,e.initialValue),i=e.in;return d(r)?null:(n(s(r),"$reduce 'input' expression must resolve to an array"),S(r,function(n,t){return Rn({$value:n,$this:t},i)},u))},$reverseArray:function(t,e){var r=Rn(t,e);if(d(r))return null;n(s(r),"$reverseArray expression must resolve to an array");var u=[];return B(u,r),u.reverse(),u},$size:function(n,t){var e=Rn(n,t);return s(e)?e.length:void 0},$slice:function(n,t){var e=Rn(n,t);return Un(e[0],e[1],e[2])},$zip:function(t,e){var r=Rn(t,e.inputs),u=e.useLongestLength||!1;n(s(r),"'inputs' expression must resolve to an array"),n(i(u),"'useLongestLength' must be a boolean"),s(e.defaults)&&n(b(u),"'useLongestLength' must be set to true to use 'defaults'");for(var o=0,a=0,c=r.length;a<c;a++){var l=r[a];if(d(l))return null;n(s(l),"'inputs' expression values must resolve to an array or null"),o=u?Math.max(o,l.length):Math.min(o||l.length,l.length)}for(var f=[],v=e.defaults||[],h=0;h<o;h++)!function(n){var t=r.map(function(t,e){return d(t[n])?v[e]||null:t[n]});f.push(t)}(h);return f}},gt={$and:function(n,t){var e=Rn(n,t);return b(e)&&e.every(b)},$or:function(n,t){var e=Rn(n,t);return b(e)&&e.some(b)},$not:function(n,t){return!Rn(n,t[0])}},mt={$cmp:function(n,t){var e=Rn(n,t);return e[0]>e[1]?1:e[0]<e[1]?-1:0}};E(["$eq","$ne","$gt","$gte","$lt","$lte","$nin"],function(n){mt[n]=function(t,e){var r=Rn(t,e);return vt[n](r[0],r[1])}});var yt={$cond:function(t,e){var r=void 0,u=void 0,i=void 0;return s(e)?(n(3===e.length,"$cond: invalid arguments"),r=e[0],u=e[1],i=e[2]):(n(l(e),"$cond: invalid arguments"),r=e.if,u=e.then,i=e.else),Rn(t,r)?Rn(t,u):Rn(t,i)},$switch:function(t,e){var r="Invalid arguments for $switch operator";n(e.branches,r);var u=e.branches.find(function(e){return n(e.case&&e.then,r),Rn(t,e.case)});return u?Rn(t,u.then):(n(e.default,r),Rn(t,e.default))},$ifNull:function(t,e){n(s(e)&&2===e.length,"Invalid arguments for $ifNull operator");var r=Rn(t,e);return d(r[0])?r[1]:r[0]}},bt={"%Y":["$year",4],"%m":["$month",2],"%d":["$dayOfMonth",2],"%H":["$hour",2],"%M":["$minute",2],"%S":["$second",2],"%L":["$millisecond",3],"%j":["$dayOfYear",3],"%w":["$dayOfWeek",1],"%U":["$week",2],"%%":"%"},_t={$dayOfYear:function(n,t){var e=Rn(n,t),r=new Date(e.getFullYear(),0,0),u=e-r;return Math.round(u/864e5)},$dayOfMonth:function(n,t){return Rn(n,t).getDate()},$dayOfWeek:function(n,t){return Rn(n,t).getDay()+1},$year:function(n,t){return Rn(n,t).getFullYear()},$month:function(n,t){return Rn(n,t).getMonth()+1},$week:function(n,t){var e=Rn(n,t);e=new Date(+e),e.setHours(0,0,0),e.setDate(e.getDate()+4-(e.getDay()||7));var r=new Date(e.getFullYear(),0,1);return Math.floor(((e-r)/864e5+1)/7)},$hour:function(n,t){return Rn(n,t).getUTCHours()},$minute:function(n,t){return Rn(n,t).getMinutes()},$second:function(n,t){return Rn(n,t).getSeconds()},$millisecond:function(n,t){return Rn(n,t).getMilliseconds()},$dateToString:function(n,t){for(var e=t.format,r=Rn(n,t.date),u=e.match(/(%%|%Y|%m|%d|%H|%M|%S|%L|%j|%w|%U)/g),i=0,o=u.length;i<o;i++){var a=bt[u[i]],c=a;if(s(a)){var l=this[a[0]],f=a[1];c=xn(l.call(this,n,r),f)}e=e.replace(u[i],c)}return e}},xt={$literal:function(n,t){return t}},Ot={$setEquals:function(n,t){var e=Rn(n,t),r=T(e[0]),u=T(e[1]);return r.length===u.length&&r.length===q(r,u).length},$setIntersection:function(n,t){var e=Rn(n,t);return q(e[0],e[1])},$setDifference:function(n,t){var e=Rn(n,t);return e[0].filter(y.bind(null,e[1]))},$setUnion:function(n,t){var e=Rn(n,t);return C(e[0],e[1])},$setIsSubset:function(n,t){var e=Rn(n,t);return q(e[0],e[1]).length===e[0].length},$anyElementTrue:function(n,t){return Rn(n,t)[0].some(b)},$allElementsTrue:function(n,t){return Rn(n,t)[0].every(b)}},kt={$concat:function(n,t){var e=Rn(n,t);return[null,void 0].some(m.bind(null,e))?null:e.join("")},$indexOfBytes:function(t,e){var r=Rn(t,e),u="$indexOfBytes: expression resolves to invalid arguments";if(d(r[0]))return null;n(o(r[0])&&o(r[1]),u);var i=r[0],s=r[1],c=r[2],l=r[3],f=d(c)||a(c)&&c>=0&&Math.round(c)===c;if(f=f&&(d(l)||a(l)&&l>=0&&Math.round(l)===l),n(f,u),c=c||0,l=l||i.length,c>l)return-1;var v=i.substring(c,l).indexOf(s);return v>-1?v+c:v},$split:function(t,e){var r=Rn(t,e);return d(r[0])?null:(n(r.every(o),"$split: invalid argument"),r[0].split(r[1]))},$strLenBytes:function(n,t){return~-encodeURI(Rn(n,t)).split(/%..|./).length},$strLenCP:function(n,t){return Rn(n,t).length},$strcasecmp:function(t,e){var r=Rn(t,e),u=r[0],i=r[1];return P(u,i)||r.every(d)?0:(n(r.every(o),"$strcasecmp: invalid argument"),u=u.toUpperCase(),i=i.toUpperCase(),u>i&&1||u<i&&-1||0)},$substrBytes:function(t,e){var r=Rn(t,e),u=r[0],i=r[1],s=r[2];n(o(u)&&a(i)&&i>=0&&a(s)&&s>=0,"$substrBytes: invalid arguments");for(var c=kn(u),l=[],f=0,v=0;v<c.length;v++)l.push(f),f+=c[v].length;return i=l.indexOf(i),s=l.indexOf(i+s),n(i>-1&&s>-1,"$substrBytes: Invalid range, start or end index is a UTF-8 continuation byte."),u.substring(i,s)},$substr:function(n,t){var e=Rn(n,t),r=e[0],u=e[1],i=e[2];return o(r)?u<0?"":i<0?r.substr(u):r.substr(u,i):""},$substrCP:function(n,t){return this.$substr(n,t)},$toLower:function(n,t){var e=Rn(n,t);return x(e)?"":e.toLowerCase()},$toUpper:function(n,t){var e=Rn(n,t);return x(e)?"":e.toUpperCase()}},wt=[192,224,240],jt={$let:function(n,t){var e=t.vars,r=t.in;return E(j(e),function(t){var r=Rn(n,e[t]);n["$"+t]=r}),Rn(n,r)}},Mt=Object.assign({},dt,$t,gt,mt,yt,_t,xt,Ot,kt,jt),Nt={expression:Mt,group:lt,pipeline:it,projection:ut,query:ht},At={key:"_id"},Et={$$ROOT:function(n,t,e){return e.root},$$CURRENT:function(n,t,e){return n}},It={$$KEEP:function(n){return n},$$PRUNE:function(){},$$DESCEND:function(n,t,e){if(!k(t,"$cond"))return n;var r=void 0;return E(n,function(u,i){f(u)&&(s(u)?(r=[],E(u,function(n){l(n)&&(n=Ln(n,t,e)),d(n)||r.push(n)})):r=Ln(u,t,e),d(r)?delete n[i]:n[i]=r)}),n}},St=j(Et),qt=j(It);return{_internal:Bn,Aggregator:ct,CollectionMixin:{query:function(n,t){return new pt(n).find(this.toJSON(),t)},aggregate:function(n){return new ct(n).run(this.toJSON())}},Cursor:ft,OP_EXPRESSION:Zn,OP_GROUP:nt,OP_PIPELINE:"pipeline",OP_PROJECTION:tt,OP_QUERY:et,Query:pt,VERSION:"2.0.1",addOperators:jn,aggregate:cn,find:bn,remove:_n,setup:Mn}});
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):n.mingo=t()}(this,function(){"use strict";function n(n,t){_(n)&&w(t)}function t(n){switch(u(n)){case Qn:case Wn:return N(n,t);default:return n}}function r(n){switch(u(n)){case Qn:return L([],n);case Wn:return Object.assign({},n);default:return n}}function e(n){return null===n?"Null":void 0===n?"Undefined":n.constructor.name}function u(n){return e(n).toLowerCase()}function i(n){return u(n)===Jn}function o(n){return u(n)===Hn}function a(n){return u(n)===zn}function s(n){return u(n)===Qn}function c(n){return!d(n)&&k(n,"length")}function l(n){return u(n)===Wn}function f(n){return n===Object(n)}function v(n){return u(n)===Vn}function h(n){return u(n)===Kn}function p(n){return u(n)===Gn}function d(n){return $(n)||g(n)}function $(n){return u(n)===Fn}function g(n){return u(n)===Yn}function m(n,t){return n.some(C.bind(null,t))}function y(n,t){return!m(n,t)}function b(n){return!!n}function _(n){return!n}function x(n){return d(n)||s(n)&&0===n.length||l(n)&&0===j(n).length||!n}function O(n){return s(n)?n:[n]}function k(n,t){return n.hasOwnProperty(t)}function w(n){throw new Error(n)}function j(n){return Object.keys(n)}function M(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(n(t===Object(t),"Cannot iterate over object of type '"+u(t)+"'"),c(t))for(var i=0,o=t.length;i<o&&!1!==r.call(e,t[i],i,t);i++);else for(var a in t)if(k(t,a)&&!1===r.call(e,t[a],a,t))break}function N(n,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(s(n))return n.map(t,r);if(l(n)){var e={};return M(n,function(n,u){return e[u]=t.call(r,n,u)},n),e}}function A(n,t,r){return s(n)?n.reduce(t,r):(M(n,function(e,u){return r=t(r,e,u,n)}),r)}function E(n,t){return n.filter(m.bind(null,t))}function I(n,t){return L(L([],n),t.filter(y.bind(null,n)))}function S(t){function r(n,t){for(var e=0,i=n.length;e<i;e++)s(n[e])&&(t>0||t<0)?r(n[e],Math.max(-1,t-1)):u.push(n[e])}var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;n(s(t),"Input must be an Array");var u=[];return r(t,e),u}function q(n,t){if(t<1)return n;for(;t--&&s(n)&&1===n.length;)n=n[0];return n}function C(n,t){for(var r=[n],e=[t];r.length>0;)if(n=r.pop(),t=e.pop(),n!==t){var i=u(n);if(i!==u(t)||i===Gn)return!1;switch(i){case Qn:if(n.length!==t.length)return!1;L(r,n),L(e,t);break;case Wn:var o=j(n),a=j(t);if(o.length!==a.length)return!1;o.sort(),a.sort();for(var s=0,c=o.length;s<c;s++){var l=o[s];if(l!==a[s])return!1;r.push(n[l]),e.push(t[l])}break;default:if(T(n)!==T(t))return!1}}return 0===r.length}function P(n){var t={},r=[];return M(n,function(n){var e=R(n);k(t,e)||(r.push(n),t[e]=0)}),r}function T(n){var t=u(n);switch(t){case Jn:case zn:case Kn:return n.toString();case Hn:return JSON.stringify(n);case Vn:return n.toISOString();case Fn:case Yn:return t;case Qn:return"["+N(n,T)+"]";default:var r=t===Wn?"":""+e(n),i=j(n);return i.sort(),r+"{"+N(i,function(t){return T(t)+":"+T(n[t])})+"}"}}function R(n){var t=0,r=T(n),e=r.length;if(0===e)return t;for(;e;)t=(t<<5)-t+r.charCodeAt(--e)|0;return t}function U(n,t){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,e={},u=[],i=n.length,o=[],a=0;a<i;a++){var s=n[a],c=t.call(r,s,a);if(d(c))o.push(s);else{var l=R(s);k(e,l)||(e[l]=[c,a]),u.push(s)}}return u.sort(function(n,t){var r=e[R(n)],u=e[R(t)];return r[0]<u[0]?-1:r[0]>u[0]?1:r[1]<u[1]?-1:r[1]>u[1]?1:0}),L(o,u)}function D(n,t,r){var e={keys:[],groups:[]},u={};return M(n,function(n){var i=t.call(r,n),o=R(i),a=-1;g(u[o])&&(a=e.keys.length,u[o]=a,e.keys.push(i),e.groups.push([])),a=u[o],e.groups[a].push(n)}),e}function L(n,t){return Array.prototype.push.apply(n,t),n}function B(n,t){for(var r=0,e=n.length-1;r<=e;){var u=Math.round(r+(e-r)/2);if(t<n[u])e=u-1;else{if(!(t>n[u]))return u;r=u+1}}return r}function F(n){var t=this;return function(r){return function(){for(var e=arguments.length,u=Array(e),i=0;i<e;i++)u[i]=arguments[i];var o=R(u);return k(r,o)||(r[o]=n.apply(t,u)),r[o]}}({})}function Y(n,r){var e=j(r);return 0===e.length?n:N(n,function(n){var u=t(n);return M(e,function(t){var e=Rn(n,r[t]);Cn(u,t,e)}),u})}function J(t,r){var u=r.boundaries,i=r.default,o=u[0],a=u[u.length-1],s=r.output||{count:{$sum:1}};n(u.length>2,"$bucket 'boundaries' expression must have at least 3 elements");for(var c=e(o),l=0,f=u.length-1;l<f;l++)n(c===e(u[l+1]),"$bucket 'boundaries' must all be of the same type"),n(u[l]<u[l+1],"$bucket 'boundaries' must be sorted in ascending order");!d(i)&&e(r.default)===e(o)&&n(o>r.default||a<r.default,"$bucket 'default' expression must be out of boundaries range");var v={};return M(u,function(n){return v[n]=[]}),d(i)||(v[i]=[]),M(t,function(t){var e=Rn(t,r.groupBy);if(d(e)||e<o||e>=a)n(!d(i),"$bucket require a default for out of range values"),v[i].push(t);else{n(e>=o&&e<a,"$bucket 'groupBy' expression must resolve to a value in range of boundaries");var s=B(u,e),c=u[Math.max(0,s-1)];v[c].push(t)}}),u.pop(),d(i)||u.push(i),N(u,function(n){var t=En(v[n],null,s);return Object.assign(t,{_id:n})})}function z(t,r){var e=r.output||{count:{$sum:1}},u=r.groupBy,i=r.buckets;n(i>0,"The $bucketAuto 'buckets' field must be greater than 0, but found: "+i);for(var o=Math.max(1,Math.round(t.length/i)),a=F(Rn),s={},c=[],l=U(t,function(n){var t=a(n,u);return d(t)?c.push(n):(s[t]||(s[t]=[]),s[t].push(n)),t}),f=Nn(),v=[],h=0,p=0,$=l.length;p<i&&h<$;p++){for(var g={},m=[],y=0;y<o&&h<$;y++){var b=a(l[h],u);if(d(b)&&(b=null),L(m,d(b)?c:s[b]),h+=d(b)?c.length:s[b].length,k(g,"min")||(g.min=b),v.length>0){v[v.length-1][f].max=g.min}}p==i-1&&L(m,l.slice(h)),v.push(Object.assign(En(m,null,e),{_id:g}))}return v.length>0&&(v[v.length-1][f].max=a(l[l.length-1],u)),v}function H(t,r){n(o(r)&&""!==r.trim()&&-1===r.indexOf(".")&&"$"!==r.trim()[0],"Invalid expression value for $count");var e={};return e[r]=t.length,e}function V(n,t){return N(t,function(t){return sn(n,t)})}function K(n,t){var r=Nn(),e=t[r],u=D(n,function(n){return Rn(n,e,e)}),i=[];return delete t[r],M(u.keys,function(n,e){var o={};g(n)||(o[r]=n),M(t,function(n,t){o[t]=En(u.groups[e],t,n)}),i.push(o)}),i}function Q(n,t){return n.slice(0,t)}function W(t,e){function u(n){return R(d(n)?null:n)}var i=e.from,a=e.localField,c=e.foreignField,l=e.as;n(s(i)&&o(c)&&o(a)&&o(l),"$lookup: invalid argument");var f={};return M(i,function(n){var t=u(n[c]);f[t]=f[t]||[],f[t].push(n)}),N(t,function(n){var t=u(n[a]),e=r(n);return e[l]=f[t]||[],e})}function G(n,t){return new vt(t).find(n).all()}function X(t,r){return n(s(r),"$out: argument must be an array"),L(r,t),t}function Z(r,e){if(x(e))return r;var u=[],i=j(e),s=!1,c=Nn(),f=[!1,!1];if(M(e,function(t,r){r!==c&&(0===t||!1===t?f[0]=!0:f[1]=!0,n(f[0]!==f[1],"Projection cannot have a mix of inclusion and exclusion."))}),m(i,c)){var v=e[c];0!==v&&!1!==v||(i=i.filter(y.bind(null,[c])),n(y(i,c),"Must not contain collections id key"),s=x(i))}else i.push(c);return M(r,function(n){var r={},f=!1,v=!1,h=[];s&&h.push(c),M(i,function(t){var u=e[t],i=void 0;if(t!==c&&m([0,!1],u)&&(v=!0),t===c&&x(u))i=n[t];else if(o(u))i=Rn(n,u,t);else if(m([1,!0],u));else{if(!l(u))return void h.push(t);var s=j(u);s=!(s.length>1)&&s[0],m(wn(tt),s)?"$slice"===s?O(u[s]).every(a)?(i=et[s](n,u[s],t),f=!0):i=Rn(n,u,t):i=et[s](n,u[s],t):i=Rn(n,u,t)}var p=Sn(n,t);g(p)||Object.assign(r,p),y([0,1,!1,!0],u)&&(g(i)?Pn(r,t):Cn(r,t,i))}),(f||v||s)&&(r=Object.assign({},n,r),h.length>0&&(r=t(r),M(h,function(n){return Pn(r,n)}))),u.push(r)}),u}function nn(n,r){return N(n,function(n){return Ln(t(n),r)})}function tn(t,r){return N(t,function(t){return t=Rn(t,r.newRoot),n(l(t),"$replaceRoot expression must return an object"),t})}function rn(t,r){var e=r.size;n(a(e),"$sample size must be a positive integer");for(var u=[],i=t.length,o=0;o<e;o++){var s=Math.floor(Math.random()*i);u.push(t[s])}return u}function en(n,t){return n.slice(t)}function un(n,t){if(!x(t)&&l(t)){M(j(t).reverse(),function(r){var e=D(n,function(n){return In(n,r)}),u={},i=function(n){return u[R(n)]},o=U(e.keys,function(n,t){return u[R(n)]=t,n});-1===t[r]&&o.reverse(),n=[],M(o,function(t){return L(n,e.groups[i(t)])})})}return n}function on(n,t){var r={count:{$sum:1}};return r[Nn()]=t,this.$sort(this.$group(n,r),{count:-1})}function an(n,t){o(t)&&(t={path:t});var e=t.path.substr(1),u=t.includeArrayIndex||!1,i=t.preserveNullAndEmptyArrays||!1,a=[],c=function(n,t){!1!==u&&(n[u]=t),a.push(n)};return M(n,function(n){var t=An(n,e);if(s(t))if(0===t.length&&!0===i){var u=r(n);delete u[e],c(u,null)}else M(t,function(t,u){var i=r(n);i[e]=t,c(i,u)});else x(t)&&!0!==i||c(r(n),null)}),a}function sn(t,r){return n(s(r),"Aggregation pipeline must be an array"),new at(r).run(t)}function cn(n,t){return P(this.$push(n,t))}function ln(n,t){var r=this.$push(n,t).filter(a);return A(r,function(n,t){return n+t},0)/(r.length||1)}function fn(n,t){return n.length>0?Rn(n[0],t):void 0}function vn(n,t){return n.length>0?Rn(n[n.length-1],t):void 0}function hn(n,t){return A(this.$push(n,t),function(n,t){return d(n)||t>n?t:n},void 0)}function pn(n,t){return A(this.$push(n,t),function(n,t){return d(n)||t<n?t:n},void 0)}function dn(n,t){return d(t)?n:N(n,function(n){return Rn(n,t)})}function $n(n,t){return Dn({data:this.$push(n,t).filter(a),sampled:!1})}function gn(n,t){return Dn({data:this.$push(n,t).filter(a),sampled:!0})}function mn(n,t){return s(n)?a(t)?n.length*t:A(this.$push(n,t).filter(a),function(n,t){return n+t},0):0}function yn(n,t){return e(n)===e(t)}function bn(n,t,r){return new vt(t).find(n,r)}function _n(n,t){return new vt(t).remove(n)}function xn(n,t){return new Array(Math.max(t-String(n).length+1,0)).join("0")+n}function On(n){if(n<128)return[n];for(var t=n<2048&&1||n<65536&&2||3,r=Ot[t-1],e=[(n>>6*t)+r];t>0;)e.push(128|n>>6*--t&63);return e}function kn(n){for(var t=[],r=0,e=n.length;r<e;r++)t.push(On(n.codePointAt(r)));return t}function wn(){return A(arguments,function(n,t){return L(n,j(jt[t]))},[])}function jn(t,r){var e=r(Bn());n(k(jt,t),"Invalid operator class "+t);var u=jt[t];M(e,function(r,e){n(/^\$\w+$/.test(e),"Invalid operator name "+e),n(!k(u,e),e+" already exists for '"+t+"' operators")});var o={};switch(t){case rt:M(e,function(t,r){o[r]=function(t,e){return function(u,o){return{test:function(a){var s=In(a,u),c=t.call(e,u,s,o);return n(i(c),r+" must return a boolean"),c}}}}(t,e)});break;case tt:M(e,function(n,t){o[t]=function(n,t){return function(r,e,u){var i=In(r,u);return n.call(t,u,i,e)}}(n,e)});break;default:M(e,function(n,t){o[t]=function(n,t){return function(){for(var r=arguments.length,e=Array(r),u=0;u<r;u++)e[u]=arguments[u];return n.apply(t,e)}}(n,e)})}Object.assign(jt[t],o)}function Mn(n){Object.assign(Mt,n||{})}function Nn(){return Mt.key}function An(n,t){return f(n)?n[t]:void 0}function En(t,r,e){if(m(wn(nt),r))return st[r](t,e);if(l(e)){var u={};return M(e,function(r,i){if(u[i]=En(t,i,e[i]),m(wn(nt),i))return u=u[i],n(1===j(e).length,"Invalid $group expression '"+JSON.stringify(e)+"'"),!1}),u}}function In(n,t,r){function e(n,t){for(var r=n,i=0;i<t.length;i++){var o=t[i];if(null===o.match(/^\d+$/)&&s(r)){if(0===i&&u>0)break;u+=1,t=t.slice(i),r=A(r,function(n,r){var u=e(r,t);return void 0!==u&&n.push(u),n},[]);break}if(void 0===(r=An(r,o)))break}return r}var u=0;return r=r||{meta:!1},n=e(n,t.split(".")),r.meta?{result:n,depth:u}:n}function Sn(t,r){var e=r.split("."),u=e[0],i=1===e.length||e.slice(1).join("."),o=null!==u.match(/^\d+$/),a=e.length>1,c=void 0,l=void 0;try{s(t)?o?(c=An(t,u),a&&(c=Sn(c,i)),n(!g(c)),c=[c]):(c=[],M(t,function(n){void 0!==(l=Sn(n,r))&&c.push(l)}),n(c.length>0)):(l=An(t,u),a&&(l=Sn(l,i)),n(void 0!==l),c={},c[u]=l)}catch(n){c=void 0}return c}function qn(n,t,r){var e=arguments.length>3&&void 0!==arguments[3]&&arguments[3],u=t.split("."),i=u[0],o=1===u.length||u.slice(1).join(".");if(1===u.length)r(n,i);else if(s(n)&&!/^\d+$/.test(i))M(n,function(n){qn(n,t,r,e)});else{if(!0===e){var a=k(n,i);a&&!d(n[i])||(n[i]={})}qn(n[i],o,r,e)}}function Cn(n,t,r){qn(n,t,function(n,t){n[t]=r},!0)}function Pn(n,t){qn(n,t,function(n,t){s(n)&&/^\d+$/.test(t)?n.splice(parseInt(t),1):l(n)&&delete n[t]})}function Tn(n){if(m(Xn,u(n)))return h(n)?{$regex:n}:{$eq:n};if(f(n)){var t=j(n);if(0===E(wn(rt),t).length)return{$eq:n};if(m(t,"$regex")){var r=n.$regex,e=n.$options||"",i="";o(r)&&(i+=r.ignoreCase||e.indexOf("i")>=0?"i":"",i+=r.multiline||e.indexOf("m")>=0?"m":"",i+=r.global||e.indexOf("g")>=0?"g":"",r=new RegExp(r,i)),n.$regex=r,delete n.$options}}return n}function Rn(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(i.root=i.root||t,m(wn(Zn),e))return wt[e](t,r,i);if(m(wn(nt),e))return t=Rn(t,r,null,i),n(s(t),e+" expression must resolve to an array"),st[e](t,null,i);if(o(r)&&r.length>0&&"$"===r[0]){if(m(Et,r))return Nt[r](t,null,i);if(m(It,r))return r;var a=Et.filter(function(n){return 0===r.indexOf(n+".")});return 1===a.length&&(a=a[0],"$$ROOT"===a&&(t=i.root),r=r.substr(a.length)),In(t,r.slice(1))}switch(u(r)){case Qn:return r.map(function(n){return Rn(t,n)});case Wn:var c={};return M(r,function(e,u){if(c[u]=Rn(t,e,u,i),m(wn(Zn,nt),u))return n(1===j(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),c=c[u],!1}),c;default:return r}}function Un(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return d(e)?r<0?(r=Math.max(0,t.length+r),e=t.length-r+1):(e=r,r=0):(r<0&&(r=Math.max(0,t.length+r)),n(e>0,"Invalid argument value for $slice operator. Limit must be a positive number"),e+=r),t.slice(r,e)}function Dn(n){var t=A(n.data,function(n,t){return n+t},0),r=n.data.length||1,e=n.sampled&&1||0,u=t/r;return Math.sqrt(A(n.data,function(n,t){return n+Math.pow(t-u,2)},0)/(r-e))}function Ln(n,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};r.root=r.root||n;var e=Rn(n,t,null,r);return m(It,e)?At[e](n,t,r):e}function Bn(){return{assert:n,computeValue:Rn,clone:r,cloneDeep:t,each:M,err:w,getHash:R,getType:e,has:k,idKey:Nn,includes:m.bind(null),isArray:s,isBoolean:i,isDate:v,isEmpty:x,isEqual:C,isFunction:p,isNil:d,isNull:$,isNumber:a,isObject:l,isRegExp:h,isString:o,isUndefined:g,keys:j,map:N,ops:wn,resolve:In,resolveObj:Sn,reduce:A}}var Fn="null",Yn="undefined",Jn="boolean",zn="number",Hn="string",Vn="date",Kn="regexp",Qn="array",Wn="object",Gn="function",Xn=[Fn,Yn,Jn,zn,Hn,Vn,Kn],Zn="expression",nt="group",tt="projection",rt="query",et={$:function(n,t,r){w("$ not implemented")},$elemMatch:function(t,r,e){var u=In(t,e),i=new vt(r);n(s(u),"$elemMatch: invalid argument");for(var o=0;o<u.length;o++)if(i.test(u[o]))return[u[o]]},$slice:function(t,r,e){var u=In(t,e);return s(u)?s(r)?Un(u,r[0],r[1]):(n(a(r),"$slice: invalid arguments for projection"),Un(u,r)):u}},ut={$addFields:Y,$bucket:J,$bucketAuto:z,$count:H,$facet:V,$group:K,$limit:Q,$lookup:W,$match:G,$out:X,$project:Z,$redact:nn,$replaceRoot:tn,$sample:rn,$skip:en,$sort:un,$sortByCount:on,$unwind:an},it=function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")},ot=function(){function n(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}return function(t,r,e){return r&&n(t.prototype,r),e&&n(t,e),t}}(),at=function(){function t(n){it(this,t),this.__operators=n}return ot(t,[{key:"run",value:function(t,r){return x(this.__operators)||M(this.__operators,function(e){var u=j(e);n(1===u.length&&m(wn("pipeline"),u[0]),"Invalid aggregation operator "+u),u=u[0],t=r&&r instanceof vt?ut[u].call(r,t,e[u]):ut[u](t,e[u])}),t}}]),t}(),st={$addToSet:cn,$avg:ln,$first:fn,$last:vn,$max:hn,$min:pn,$push:dn,$stdDevPop:$n,$stdDevSamp:gn,$sum:mn},ct=function(){function t(n,r,e){it(this,t),this.__query=r,this.__collection=n,this.__projection=e||r.__projection,this.__operators={},this.__result=!1,this.__position=0}return ot(t,[{key:"_fetch",value:function(){var t=this;if(!1!==this.__result)return this.__result;l(this.__projection)&&Object.assign(this.__operators,{$project:this.__projection}),n(s(this.__collection),"Input collection is not of valid type. Must be an Array."),this.__result=this.__collection.filter(this.__query.test,this.__query);var r=[];if(M(["$sort","$skip","$limit","$project"],function(n){if(k(t.__operators,n)){var e={};e[n]=t.__operators[n],r.push(e)}}),r.length>0){var e=new at(r);this.__result=e.run(this.__result,this.__query)}return this.__result}},{key:"all",value:function(){return this._fetch()}},{key:"first",value:function(){return this.count()>0?this._fetch()[0]:null}},{key:"last",value:function(){return this.count()>0?this._fetch()[this.count()-1]:null}},{key:"count",value:function(){return this._fetch().length}},{key:"skip",value:function(n){return Object.assign(this.__operators,{$skip:n}),this}},{key:"limit",value:function(n){return Object.assign(this.__operators,{$limit:n}),this}},{key:"sort",value:function(n){return Object.assign(this.__operators,{$sort:n}),this}},{key:"next",value:function(){return this.hasNext()?this._fetch()[this.__position++]:null}},{key:"hasNext",value:function(){return this.count()>this.__position}},{key:"map",value:function(n){return this._fetch().map(n)}},{key:"forEach",value:function(n){M(this._fetch(),n)}},{key:Symbol.iterator,value:function(){var n=this;return{next:function(){return n.hasNext()?{done:!1,value:n.next()}:{done:!0}}}}}]),t}(),lt={$eq:function(n,t){if(C(n,t))return!0;if(d(n)&&d(t))return!0;if(s(n)){var r=C.bind(null,t);return n.some(r)||S(n,1).some(r)}return!1},$ne:function(n,t){return!this.$eq(n,t)},$in:function(n,t){return E(O(n),t).length>0},$nin:function(n,t){return d(n)||!this.$in(n,t)},$lt:function(n,t){return!g(O(n).find(function(n){return yn(n,t)&&n<t}))},$lte:function(n,t){return!g(O(n).find(function(n){return yn(n,t)&&n<=t}))},$gt:function(n,t){return!g(O(n).find(function(n){return yn(n,t)&&n>t}))},$gte:function(n,t){return!g(O(n).find(function(n){return yn(n,t)&&n>=t}))},$mod:function(n,t){return!g(O(n).find(function(n){return a(n)&&s(t)&&2===t.length&&n%t[0]===t[1]}))},$regex:function(n,t){n=O(n);var r=function(n){return o(n)&&!!n.match(t)};return n.some(r)||S(n,1).some(r)},$exists:function(n,t){return(!1===t||0===t)&&d(n)||(!0===t||1===t)&&!d(n)},$all:function(n,t){var r=!1;if(s(n)&&s(t))for(var e=0,u=t.length;e<u;e++){if(!l(t[e])||!m(j(t[e]),"$elemMatch"))return E(t,n).length===u;r=r||this.$elemMatch(n,t[e].$elemMatch)}return r},$size:function(n,t){return s(n)&&a(t)&&n.length===t},$elemMatch:function(n,t){if(s(n)&&!x(n))for(var r=new vt(t),e=0,u=n.length;e<u;e++)if(r.test(n[e]))return!0;return!1},$type:function(n,t){switch(t){case 1:case"double":return a(n)&&-1!==(n+"").indexOf(".");case 2:case Hn:return o(n);case 3:case Wn:return l(n);case 4:case Qn:return s(n);case 6:case Yn:return d(n);case 8:case"bool":return i(n);case 9:case Vn:return v(n);case 10:case Fn:return $(n);case 11:case"regex":return h(n);case 16:case"int":return a(n)&&n<=2147483647&&-1===(n+"").indexOf(".");case 18:case"long":return a(n)&&n>2147483647&&n<=0x8000000000000000&&-1===(n+"").indexOf(".");case 19:case"decimal":return a(n);default:return!1}}},ft={$and:function(t,r){n(s(r),"Invalid expression: $and expects value to be an Array");var e=[];return M(r,function(n){return e.push(new vt(n))}),{test:function(n){for(var t=0;t<e.length;t++)if(!e[t].test(n))return!1;return!0}}},$or:function(t,r){n(s(r),"Invalid expression. $or expects value to be an Array");var e=[];return M(r,function(n){return e.push(new vt(n))}),{test:function(n){for(var t=0;t<e.length;t++)if(e[t].test(n))return!0;return!1}}},$nor:function(t,r){n(s(r),"Invalid expression. $nor expects value to be an Array");var e=this.$or("$or",r);return{test:function(n){return!e.test(n)}}},$not:function(n,t){var r={};r[n]=Tn(t);var e=new vt(r);return{test:function(n){return!e.test(n)}}},$where:function(n,t){return p(t)||(t=new Function("return "+t+";")),{test:function(n){return!0===t.call(n)}}}};M(lt,function(n,t){ft[t]=function(n,t){return function(r,e){return{test:function(u){var i=In(u,r,{meta:!0});return i=q(i.result,i.depth),n.call(t,i,e)}}}}(n,lt)});var vt=function(){function t(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};it(this,t),this.__criteria=n,this.__projection=r,this.__compiled=[],this._compile()}return ot(t,[{key:"_compile",value:function(){var t=this;if(!x(this.__criteria)){n(l(this.__criteria),"Criteria must be of type Object");var r=void 0;M(this.__criteria,function(n,e){"$where"===e?r={field:e,expr:n}:m(["$and","$or","$nor"],e)?t._processOperator(e,e,n):(n=Tn(n),M(n,function(n,r){t._processOperator(e,r,n)})),l(r)&&t._processOperator(r.field,r.field,r.expr)})}}},{key:"_processOperator",value:function(t,r,e){n(m(wn(rt),r),"Invalid query operator '"+r+"' detected"),this.__compiled.push(ft[r](t,e))}},{key:"test",value:function(n){for(var t=0,r=this.__compiled.length;t<r;t++)if(!this.__compiled[t].test(n))return!1;return!0}},{key:"find",value:function(n,t){return new ct(n,this,t)}},{key:"remove",value:function(n){var t=this;return A(n,function(n,r){return t.test(r)||n.push(r),n},[])}}]),t}(),ht={$abs:function(n,t){var r=Rn(n,t);return null===r||void 0===r?null:Math.abs(r)},$add:function(n,t){return A(Rn(n,t),function(n,t){return n+t},0)},$ceil:function(t,r){var e=Rn(t,r);return d(e)?null:(n(a(e)||isNaN(e),"$ceil must be a valid expression that resolves to a number."),Math.ceil(e))},$divide:function(n,t){var r=Rn(n,t);return r[0]/r[1]},$exp:function(t,r){var e=Rn(t,r);return d(e)?null:(n(a(e)||isNaN(e),"$exp must be a valid expression that resolves to a number."),Math.exp(e))},$floor:function(t,r){var e=Rn(t,r);return d(e)?null:(n(a(e)||isNaN(e),"$floor must be a valid expression that resolves to a number."),Math.floor(e))},$ln:function(t,r){var e=Rn(t,r);return d(e)?null:(n(a(e)||isNaN(e),"$ln must be a valid expression that resolves to a number."),Math.log(e))},$log:function(t,r){var e=Rn(t,r);return n(s(e)&&2===e.length,"$log must be a valid expression that resolves to an array of 2 items"),e.some(d)?null:(n(e.some(isNaN)||e.every(a),"$log expression must resolve to array of 2 numbers"),Math.log10(e[0])/Math.log10(e[1]))},$log10:function(t,r){var e=Rn(t,r);return d(e)?null:(n(a(e)||isNaN(e),"$log10 must be a valid expression that resolves to a number."),Math.log10(e))},$mod:function(n,t){var r=Rn(n,t);return r[0]%r[1]},$multiply:function(n,t){return A(Rn(n,t),function(n,t){return n*t},1)},$pow:function(t,r){var e=Rn(t,r);return n(s(e)&&2===e.length&&e.every(a),"$pow expression must resolve to an array of 2 numbers"),n(!(0===e[0]&&e[1]<0),"$pow cannot raise 0 to a negative exponent"),Math.pow(e[0],e[1])},$sqrt:function(t,r){var e=Rn(t,r);return d(e)?null:(n(a(e)&&e>0||isNaN(e),"$sqrt expression must resolve to non-negative number."),Math.sqrt(e))},$subtract:function(n,t){var r=Rn(n,t);return r[0]-r[1]},$trunc:function(t,r){var e=Rn(t,r);return d(e)?null:(n(a(e)||isNaN(e),"$trunc expression must resolve to a number."),Math.trunc(e))}},pt={$arrayElemAt:function(t,r){var e=Rn(t,r);n(s(e)&&2===e.length,"$arrayElemAt expression must resolve to an array of 2 elements"),n(s(e[0]),"First operand to $arrayElemAt must resolve to an array"),n(a(e[1]),"Second operand to $arrayElemAt must resolve to an integer");var u=e[1];return e=e[0],u<0&&Math.abs(u)<=e.length?e[u+e.length]:u>=0&&u<e.length?e[u]:void 0},$arrayToObject:function(t,r){var e=Rn(t,r);return n(s(e),"$arrayToObject expression must resolve to an array"),A(e,function(t,r){return s(r)&&2==r.length?t[r[0]]=r[1]:(n(l(r)&&k(r,"k")&&k(r,"v"),"$arrayToObject expression is invalid."),t[r.k]=r.v),t},{})},$concatArrays:function(t,r){var e=Rn(t,r,null);return n(s(e),"$concatArrays must resolve to an array"),e.some(d)?null:e.reduce(function(n,t){return L(n,t)},[])},$filter:function(t,r){var e=Rn(t,r.input),u=r.as,i=r.cond;return n(s(e),"$filter 'input' expression must resolve to an array"),e.filter(function(n){var t={};return t["$"+u]=n,!0===Rn(t,i)})},$in:function(t,r){var e=Rn(t,r[0]),u=Rn(t,r[1]);return n(s(u),"$in second argument must be an array"),m(u,e)},$indexOfArray:function(t,r){var e=Rn(t,r);if(d(e))return null;var u=e[0],i=e[1];if(d(u))return null;n(s(u),"$indexOfArray expression must resolve to an array.");var o=e[2]||0,a=e[3];return d(a)&&(a=u.length),o>a?-1:(n(o>=0&&a>=0,"$indexOfArray expression is invalid"),(o>0||a<u.length)&&(u=u.slice(o,a)),u.findIndex(C.bind(null,i))+o)},$isArray:function(n,t){return s(Rn(n,t[0]))},$map:function(t,r){var e=Rn(t,r.input);n(s(e),"$map 'input' expression must resolve to an array");var u=r.as,i=r.in,o="$"+u;return N(e,function(n){return t[o]=n,Rn(t,i)})},$objectToArray:function(t,r){var e=Rn(t,r);n(l(e),"$objectToArray expression must resolve to an object");var u=[];return M(e,function(n,t){return u.push({k:t,v:n})}),u},$range:function(n,t){for(var r=Rn(n,t),e=r[0],u=r[1],i=r[2]||1,o=[];e<u&&i>0||e>u&&i<0;)o.push(e),e+=i;return o},$reduce:function(t,r){var e=Rn(t,r.input),u=Rn(t,r.initialValue),i=r.in;return d(e)?null:(n(s(e),"$reduce 'input' expression must resolve to an array"),A(e,function(n,t){return Rn({$value:n,$this:t},i)},u))},$reverseArray:function(t,r){var e=Rn(t,r);if(d(e))return null;n(s(e),"$reverseArray expression must resolve to an array");var u=[];return L(u,e),u.reverse(),u},$size:function(n,t){var r=Rn(n,t);return s(r)?r.length:void 0},$slice:function(n,t){var r=Rn(n,t);return Un(r[0],r[1],r[2])},$zip:function(t,r){var e=Rn(t,r.inputs),u=r.useLongestLength||!1;n(s(e),"'inputs' expression must resolve to an array"),n(i(u),"'useLongestLength' must be a boolean"),s(r.defaults)&&n(b(u),"'useLongestLength' must be set to true to use 'defaults'");for(var o=0,a=0,c=e.length;a<c;a++){var l=e[a];if(d(l))return null;n(s(l),"'inputs' expression values must resolve to an array or null"),o=u?Math.max(o,l.length):Math.min(o||l.length,l.length)}for(var f=[],v=r.defaults||[],h=0;h<o;h++)!function(n){var t=e.map(function(t,r){return d(t[n])?v[r]||null:t[n]});f.push(t)}(h);return f}},dt={$and:function(n,t){var r=Rn(n,t);return b(r)&&r.every(b)},$or:function(n,t){var r=Rn(n,t);return b(r)&&r.some(b)},$not:function(n,t){return!Rn(n,t[0])}},$t={$cmp:function(n,t){var r=Rn(n,t);return r[0]>r[1]?1:r[0]<r[1]?-1:0}};M(["$eq","$ne","$gt","$gte","$lt","$lte","$nin"],function(n){$t[n]=function(t,r){var e=Rn(t,r);return lt[n](e[0],e[1])}});var gt={$cond:function(t,r){var e=void 0,u=void 0,i=void 0;return s(r)?(n(3===r.length,"$cond: invalid arguments"),e=r[0],u=r[1],i=r[2]):(n(l(r),"$cond: invalid arguments"),e=r.if,u=r.then,i=r.else),Rn(t,e)?Rn(t,u):Rn(t,i)},$switch:function(t,r){var e="Invalid arguments for $switch operator";n(r.branches,e);var u=r.branches.find(function(r){return n(r.case&&r.then,e),Rn(t,r.case)});return u?Rn(t,u.then):(n(r.default,e),Rn(t,r.default))},$ifNull:function(t,r){n(s(r)&&2===r.length,"Invalid arguments for $ifNull operator");var e=Rn(t,r);return d(e[0])?e[1]:e[0]}},mt={"%Y":["$year",4],"%m":["$month",2],"%d":["$dayOfMonth",2],"%H":["$hour",2],"%M":["$minute",2],"%S":["$second",2],"%L":["$millisecond",3],"%j":["$dayOfYear",3],"%w":["$dayOfWeek",1],"%U":["$week",2],"%%":"%"},yt={$dayOfYear:function(n,t){var r=Rn(n,t),e=new Date(r.getFullYear(),0,0),u=r-e;return Math.round(u/864e5)},$dayOfMonth:function(n,t){return Rn(n,t).getDate()},$dayOfWeek:function(n,t){return Rn(n,t).getDay()+1},$year:function(n,t){return Rn(n,t).getFullYear()},$month:function(n,t){return Rn(n,t).getMonth()+1},$week:function(n,t){var r=Rn(n,t);r=new Date(+r),r.setHours(0,0,0),r.setDate(r.getDate()+4-(r.getDay()||7));var e=new Date(r.getFullYear(),0,1);return Math.floor(((r-e)/864e5+1)/7)},$hour:function(n,t){return Rn(n,t).getUTCHours()},$minute:function(n,t){return Rn(n,t).getMinutes()},$second:function(n,t){return Rn(n,t).getSeconds()},$millisecond:function(n,t){return Rn(n,t).getMilliseconds()},$dateToString:function(n,t){for(var r=t.format,e=Rn(n,t.date),u=r.match(/(%%|%Y|%m|%d|%H|%M|%S|%L|%j|%w|%U)/g),i=0,o=u.length;i<o;i++){var a=mt[u[i]],c=a;if(s(a)){var l=this[a[0]],f=a[1];c=xn(l.call(this,n,e),f)}r=r.replace(u[i],c)}return r}},bt={$literal:function(n,t){return t}},_t={$setEquals:function(n,t){var r=Rn(n,t),e=P(r[0]),u=P(r[1]);return e.length===u.length&&e.length===E(e,u).length},$setIntersection:function(n,t){var r=Rn(n,t);return E(r[0],r[1])},$setDifference:function(n,t){var r=Rn(n,t);return r[0].filter(y.bind(null,r[1]))},$setUnion:function(n,t){var r=Rn(n,t);return I(r[0],r[1])},$setIsSubset:function(n,t){var r=Rn(n,t);return E(r[0],r[1]).length===r[0].length},$anyElementTrue:function(n,t){return Rn(n,t)[0].some(b)},$allElementsTrue:function(n,t){return Rn(n,t)[0].every(b)}},xt={$concat:function(n,t){var r=Rn(n,t);return[null,void 0].some(m.bind(null,r))?null:r.join("")},$indexOfBytes:function(t,r){var e=Rn(t,r),u="$indexOfBytes: expression resolves to invalid arguments";if(d(e[0]))return null;n(o(e[0])&&o(e[1]),u);var i=e[0],s=e[1],c=e[2],l=e[3],f=d(c)||a(c)&&c>=0&&Math.round(c)===c;if(f=f&&(d(l)||a(l)&&l>=0&&Math.round(l)===l),n(f,u),c=c||0,l=l||i.length,c>l)return-1;var v=i.substring(c,l).indexOf(s);return v>-1?v+c:v},$split:function(t,r){var e=Rn(t,r);return d(e[0])?null:(n(e.every(o),"$split: invalid argument"),e[0].split(e[1]))},$strLenBytes:function(n,t){return~-encodeURI(Rn(n,t)).split(/%..|./).length},$strLenCP:function(n,t){return Rn(n,t).length},$strcasecmp:function(t,r){var e=Rn(t,r),u=e[0],i=e[1];return C(u,i)||e.every(d)?0:(n(e.every(o),"$strcasecmp: invalid argument"),u=u.toUpperCase(),i=i.toUpperCase(),u>i&&1||u<i&&-1||0)},$substrBytes:function(t,r){var e=Rn(t,r),u=e[0],i=e[1],s=e[2];n(o(u)&&a(i)&&i>=0&&a(s)&&s>=0,"$substrBytes: invalid arguments");for(var c=kn(u),l=[],f=0,v=0;v<c.length;v++)l.push(f),f+=c[v].length;var h=l.indexOf(i),p=l.indexOf(i+s);return n(h>-1&&p>-1,"$substrBytes: Invalid range, start or end index is a UTF-8 continuation byte."),u.substring(h,p)},$substr:function(n,t){var r=Rn(n,t),e=r[0],u=r[1],i=r[2];return o(e)?u<0?"":i<0?e.substr(u):e.substr(u,i):""},$substrCP:function(n,t){return this.$substr(n,t)},$toLower:function(n,t){var r=Rn(n,t);return x(r)?"":r.toLowerCase()},$toUpper:function(n,t){var r=Rn(n,t);return x(r)?"":r.toUpperCase()}},Ot=[192,224,240],kt={$let:function(n,t){var r=t.vars,e=t.in;return M(j(r),function(t){var e=Rn(n,r[t]);n["$"+t]=e}),Rn(n,e)}},wt=Object.assign({},ht,pt,dt,$t,gt,yt,bt,_t,xt,kt),jt={expression:wt,group:st,pipeline:ut,projection:et,query:ft},Mt={key:"_id"},Nt={$$ROOT:function(n,t,r){return r.root},$$CURRENT:function(n,t,r){return n}},At={$$KEEP:function(n){return n},$$PRUNE:function(){},$$DESCEND:function(n,t,r){if(!k(t,"$cond"))return n;var e=void 0;return M(n,function(u,i){f(u)&&(s(u)?(e=[],M(u,function(n){l(n)&&(n=Ln(n,t,r)),d(n)||e.push(n)})):e=Ln(u,t,r),d(e)?delete n[i]:n[i]=e)}),n}},Et=j(Nt),It=j(At);return{_internal:Bn,Aggregator:at,CollectionMixin:{query:function(n,t){return new vt(n).find(this.toJSON(),t)},aggregate:function(n){return new at(n).run(this.toJSON())}},Cursor:ct,OP_EXPRESSION:Zn,OP_GROUP:nt,OP_PIPELINE:"pipeline",OP_PROJECTION:tt,OP_QUERY:rt,Query:vt,VERSION:"2.0.2",addOperators:jn,aggregate:sn,find:bn,remove:_n,setup:Mn}});
//# sourceMappingURL=dist/mingo.min.map

@@ -9,3 +9,3 @@ import { OP_EXPRESSION, OP_GROUP, OP_PIPELINE, OP_PROJECTION, OP_QUERY } from './lib/constants'

const VERSION = '2.0.1'
const VERSION = '2.0.2'

@@ -12,0 +12,0 @@ // mingo!

@@ -8,13 +8,11 @@ import {

import {
addMeta,
assert,
clone,
cloneDeep,
dropMeta,
each,
err,
flatten,
getHash,
getType,
has,
hasMeta,
inArray,

@@ -41,3 +39,4 @@ intersection,

reduce,
truthy
truthy,
unwrap
} from './util'

@@ -143,3 +142,3 @@ import { ops } from './operators/index'

export function getValue (obj, field) {
return obj[field]
return isObjectLike(obj) ? obj[field] : undefined
}

@@ -181,39 +180,39 @@

* @param selector {String} dot separated path to field
* @param deepFlag {Boolean} flag whether to iterate deeply (default: false)
* @returns {*}
*/
export function resolve (obj, selector, deepFlag = false) {
let names = selector.split('.')
let value = obj
export function resolve (obj, selector, opt) {
let depth = 0
function resolve2(o, path) {
let value = o
for (let i = 0; i < path.length; i++) {
let field = path[i]
let isText = field.match(/^\d+$/) === null
for (let i = 0; i < names.length; i++) {
let isText = names[i].match(/^\d+$/) === null
if (isText && isArray(value)) {
// On the first iteration, we check if we received a stop flag.
// If so, we stop to prevent iterating over a nested array value
// on consecutive object keys in the selector.
if (i === 0 && depth > 0) break
if (isText && isArray(value)) {
// On the first iteration, we check if we received a stop flag.
// If so, we stop to prevent iterating over a nested array value
// on consecutive object keys in the selector.
if (deepFlag === true && i === 0) {
return value
}
depth += 1
path = path.slice(i)
value = value.map((item) => resolve(item, names[i], true))
// we mark this value as being multi-valued
addMeta(value, { isMulti: true })
// we unwrap for arrays of unit length
// this avoids excess wrapping when resolving deeply nested arrays
if (value.length === 1) {
value = value[0]
value = reduce(value, (acc, item) => {
let v = resolve2(item, path)
if (v !== undefined) acc.push(v)
return acc
}, [])
break
} else {
value = getValue(value, field)
}
} else {
value = getValue(value, names[i])
deepFlag = false // reset stop flag when we do a direct lookup
if (value === undefined) break
}
if (isNil(value)) break
return value
}
return value
opt = opt || { meta: false }
obj = resolve2(obj, selector.split('.'))
return opt.meta
? { result: obj, depth: depth }
: obj
}

@@ -251,3 +250,3 @@

value = resolveObj(item, selector)
if (!isNil(value)) result.push(value)
if (value !== undefined) result.push(value)
})

@@ -261,3 +260,3 @@ assert(result.length > 0)

}
assert(!isUndefined(value))
assert(value !== undefined)
result = {}

@@ -374,21 +373,21 @@ result[key] = value

* @param expr the expression for the given field
* @param field the field name (may also be an aggregate operator)
* @param operator the operator to resolve the field with
* @param opt {Object} extra options
* @returns {*}
*/
export function computeValue (obj, expr, field = null, opt = {}) {
export function computeValue (obj, expr, operator = null, opt = {}) {
opt.root = opt.root || obj
// if the field of the object is a valid operator
if (inArray(ops(OP_EXPRESSION), field)) {
return expressionOperators[field](obj, expr, opt)
if (inArray(ops(OP_EXPRESSION), operator)) {
return expressionOperators[operator](obj, expr, opt)
}
// we also handle $group accumulator operators
if (inArray(ops(OP_GROUP), field)) {
if (inArray(ops(OP_GROUP), operator)) {
// we first fully resolve the expression
obj = computeValue(obj, expr, null, opt)
assert(isArray(obj), field + ' expression must resolve to an array')
assert(isArray(obj), operator + ' expression must resolve to an array')
// we pass a null expression because all values have been resolved
return groupOperators[field](obj, null, opt)
return groupOperators[operator](obj, null, opt)
}

@@ -534,4 +533,5 @@

resolve,
resolveObj,
reduce
}
}

@@ -71,5 +71,5 @@ import {

let arr = computeValue(obj, expr, null)
assert(isArray(arr) && arr.length === 2, '$concatArrays expression must resolve to an array of 2 elements')
assert(isArray(arr), '$concatArrays must resolve to an array')
if (arr.some(isNil)) return null
return arr[0].concat(arr[1])
return arr.reduce((acc, item) => into(acc, item), [])
},

@@ -76,0 +76,0 @@

@@ -132,6 +132,6 @@ import { assert, each, err, getType, isEqual, isString, isNil, isNumber, isEmpty, inArray } from '../../util.js'

}
index = validIndex.indexOf(index)
count = validIndex.indexOf(index + count)
assert(index > -1 && count > -1, '$substrBytes: Invalid range, start or end index is a UTF-8 continuation byte.')
return s.substring(index, count)
let begin = validIndex.indexOf(index)
let end = validIndex.indexOf(index + count)
assert(begin > -1 && end > -1, '$substrBytes: Invalid range, start or end index is a UTF-8 continuation byte.')
return s.substring(begin, end)
},

@@ -201,7 +201,3 @@

let utf8 = [(n >> (6 * count)) + offset]
while (count > 0) {
count--
let t = n >> (6 * count)
utf8.push(0x80 | (t & 0x3F))
}
while (count > 0) utf8.push(0x80 | ((n >> (6 * --count)) & 0x3F))
return utf8

@@ -208,0 +204,0 @@ }

@@ -21,5 +21,6 @@ /**

assert,
dropMeta,
clone,
each,
hasMeta,
flatten,
getType,
inArray,

@@ -40,3 +41,4 @@ intersection,

isUndefined,
keys
keys,
unwrap,
} from '../util'

@@ -46,2 +48,6 @@ import { computeValue, resolve, normalize } from '../internal.js'

function sameType(a, b) {
return getType(a) === getType(b)
}
export const simpleOperators = {

@@ -63,20 +69,9 @@

// check
if (isArray(a)) {
// is multi-valued lhs so we check each separately
if (hasMeta(a, { isMulti: true })) {
try {
for (let i = 0; i < a.length; i++) {
if (this.$eq(a[i], b)) {
return true;
}
}
} finally {
dropMeta(a)
}
} else {
// check one level deep
return a.findIndex(isEqual.bind(null, b)) !== -1
}
let eq = isEqual.bind(null, b)
return a.some(eq) || flatten(a, 1).some(eq)
}
return false;
return false
},

@@ -125,3 +120,3 @@

$lt (a, b) {
return !isUndefined(ensureArray(a).find((val) => val < b))
return !isUndefined(ensureArray(a).find((x) => sameType(x, b) && x < b))
},

@@ -137,3 +132,3 @@

$lte (a, b) {
return !isUndefined(ensureArray(a).find((val) => val <= b))
return !isUndefined(ensureArray(a).find((x) => sameType(x, b) && x <= b))
},

@@ -149,3 +144,3 @@

$gt (a, b) {
return !isUndefined(ensureArray(a).find((val) => val > b))
return !isUndefined(ensureArray(a).find((x) => sameType(x, b) && x > b))
},

@@ -161,3 +156,3 @@

$gte (a, b) {
return !isUndefined(ensureArray(a).find((val) => val >= b))
return !isUndefined(ensureArray(a).find((x) => sameType(x, b) && x >= b))
},

@@ -184,3 +179,5 @@

$regex (a, b) {
return !isUndefined(ensureArray(a).find((val) => isString(val) && isRegExp(b) && (!!val.match(b))))
a = ensureArray(a)
let match = (x) => isString(x) && !!x.match(b)
return a.some(match) || flatten(a, 1).some(match)
},

@@ -414,3 +411,4 @@

// value of field must be fully resolved.
let lhs = resolve(obj, selector)
let lhs = resolve(obj, selector, { meta:true })
lhs = unwrap(lhs.result, lhs.depth)
return f.call(ctx, lhs, value)

@@ -417,0 +415,0 @@ }

@@ -87,17 +87,2 @@ /**

// internal constants
const __MINGO_META = '__mingo__'
export function addMeta (obj, value) {
obj[__MINGO_META] = Object.assign(obj[__MINGO_META] || {}, value)
}
export function hasMeta (obj, value) {
return has(obj, __MINGO_META) && isObject(value) && isEqual(Object.assign({}, obj[__MINGO_META], value), obj[__MINGO_META])
}
export function dropMeta (obj) {
if (has(obj, __MINGO_META)) delete obj[__MINGO_META]
}
/**

@@ -189,6 +174,6 @@ * Iterate over an array or object

let arr = []
function unwrap(ys, iter) {
function flatten2(ys, iter) {
for (let i = 0, len = ys.length; i < len; i++) {
if (isArray(ys[i]) && (iter > 0 || iter < 0)) {
unwrap(ys[i], Math.max(-1, iter - 1))
flatten2(ys[i], Math.max(-1, iter - 1))
} else {

@@ -199,3 +184,3 @@ arr.push(ys[i])

}
unwrap(xs, depth)
flatten2(xs, depth)
return arr

@@ -205,2 +190,13 @@ }

/**
* Unwrap a single element array to specified depth
* @param {Array} arr
* @param {Number} depth
*/
export function unwrap(arr, depth) {
if (depth < 1) return arr
while (depth-- && isArray(arr) && arr.length === 1) arr = arr[0]
return arr
}
/**
* Determine whether two values are the same or strictly equivalent

@@ -325,8 +321,8 @@ *

export function getHash (value) {
let hash = 0, i, chr, len, s = encode(value)
if (s.length === 0) return hash
for (i = 0, len = s.length; i < len; i++) {
chr = s.charCodeAt(i)
hash = ((hash << 5) - hash) + chr
hash |= 0 // Convert to 32bit integer
let hash = 0
let s = encode(value)
let i = s.length
if (i === 0) return hash
while (i) {
hash = (((hash << 5) - hash) + s.charCodeAt(--i)) | 0 // Convert to 32bit integer
}

@@ -333,0 +329,0 @@ return hash

{
"name": "mingo",
"version": "2.0.1",
"version": "2.0.2",
"description": "JavaScript implementation of MongoDB query language",

@@ -5,0 +5,0 @@ "main": "dist/mingo.js",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc