Comparing version 2.2.1 to 2.2.2
Changelog | ||
========= | ||
## 2.2.2 / 2018-04-17 | ||
- Support `$unwind` for arrays nested in objects. Fixes [#80](https://github.com/kofrasa/mingo/issues/80) | ||
## 2.2.1 / 2018-04-14 | ||
@@ -4,0 +7,0 @@ - Added `$expr` operator. Fixes [#79](https://github.com/kofrasa/mingo/issues/79) |
@@ -1,6 +0,6 @@ | ||
// mingo.js 2.2.1 | ||
// mingo.js 2.2.2 | ||
// Copyright (c) 2018 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){y(n)&&k(t)}function t(n){switch(u(n)){case tt:return n.map(t);case rt:return j(n,t);default:return n}}function r(n){switch(u(n)){case tt:return L([],n);case rt: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)===Qn}function o(n){return u(n)===Gn}function a(n){return u(n)===Wn}function s(n){return u(n)===rt}function f(n){return n===Object(n)}function c(n){return u(n)===Xn}function l(n){return u(n)===nt}function v(n){return u(n)===et}function h(n){return p(n)||d(n)}function p(n){return u(n)===Hn}function d(n){return u(n)===Vn}function $(n,t){return n.some(I.bind(null,t))}function g(n,t){return!$(n,t)}function m(n){return!!n}function y(n){return!n}function b(n){return h(n)||ct(n)&&0===n.length||s(n)&&0===O(n).length||!n}function _(n){return ct(n)?n:[n]}function x(n,t){return n.hasOwnProperty(t)}function k(n){throw new Error(n)}function O(n){return Object.keys(n)}function w(n,t,r){if(t=t.bind(r),ct(n))for(var e=0,u=n.length;e<u&&t(n[e],e,n)!==!1;e++);else for(var i in n)if(x(n,i)&&t(n[i],i,n)===!1)break}function j(n,t,r){t=t.bind(r);var e={};return w(n,function(n,r){e[r]=t(n,r)},n),e}function M(n,t,r){return ct(n)?n.reduce(t,r):(w(n,function(e,u){return r=t(r,e,u,n)}),r)}function A(n,t){return n.filter($.bind(null,t))}function N(n,t){return L(L([],n),t.filter(g.bind(null,n)))}function E(t){function r(n,t){for(var e=0,i=n.length;e<i;e++)ct(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(ct(t),"Input must be an Array");var u=[];return r(t,e),u}function S(n,t){if(t<1)return n;for(;t--&&ct(n)&&1===n.length;)n=n[0];return n}function I(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===et)return!1;switch(i){case tt:if(n.length!==t.length)return!1;L(r,n),L(e,t);break;case rt:var o=O(n),a=O(t);if(o.length!==a.length)return!1;o.sort(),a.sort();for(var s=0,f=o.length;s<f;s++){var c=o[s];if(c!==a[s])return!1;r.push(n[c]),e.push(t[c])}break;default:if(P(n)!==P(t))return!1}}return 0===r.length}function C(n){var t={},r=[];return w(n,function(n){var e=T(n);x(t,e)||(r.push(n),t[e]=0)}),r}function P(n){var t=u(n);switch(t){case Qn:case Wn:case nt:return n.toString();case Gn:return JSON.stringify(n);case Xn:return n.toISOString();case Hn:case Vn:return t;case tt:return"["+n.map(P)+"]";default:var r=t===rt?"":""+e(n),i=O(n);return i.sort(),r+"{"+i.map(function(t){return P(t)+":"+P(n[t])})+"}"}}function T(n){for(var t=0,r=P(n),e=r.length;e;)t=(t<<5)-t^r.charCodeAt(--e);return t>>>0}function q(n,t,r){var e={},u=[],i=n.length,o=[];t=t.bind(r);for(var a=0;a<i;a++){var s=n[a],f=t(s,a);if(h(f))o.push(s);else{var c=T(s);x(e,c)||(e[c]=[f,a]),u.push(s)}}return u.sort(function(n,t){var r=e[T(n)],u=e[T(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 t=t.bind(r),w(n,function(n){var r=t(n),i=T(r),o=-1;d(u[i])&&(o=e.keys.length,u[i]=o,e.keys.push(r),e.groups.push([])),o=u[i],e.groups[o].push(n)}),e}function L(n,t){return Array.prototype.push.apply(n,t),n}function R(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 U(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=T(u);return x(r,o)||(r[o]=n.apply(t,u)),r[o]}}({})}function F(n,r){var e=O(r);return 0===e.length?n:n.map(function(n){var u=t(n);return w(e,function(t){var e=Fn(n,r[t]);Ln(u,t,e)}),u})}function B(n){return n instanceof yt?n:new yt(n)}function z(n){return!!n&&"object"===("undefined"==typeof n?"undefined":lt(n))&&Y(n.next)}function Y(n){return!!n&&"function"==typeof n}function J(n,t){var r=n.slice(t+1);n.splice(t),Array.prototype.push.apply(n,r)}function H(n,t,r){var e=!1,u=-1,i={},o=0;return function(a){a=a===r;try{n:for(;!e;){var s=n();u++;for(var f=-1,c=t.length,l=!1;++f<c;){var v=t[f],h=v.func,p=v.type;switch(p){case dt:s=h(s,u);break;case $t:if(!h(s,u))continue n;break;case gt:--v.func,v.func||(l=!0);break;case mt:--v.func,v.func||J(t,f);continue n;default:break n}}if(e=l,!a)return{value:s,done:!1};r[o++]=s}}catch(d){if(d!==pt)throw d}return i=null,e=!0,{done:!0}}}function V(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 f=e(o),c=0,l=u.length-1;c<l;c++)n(f===e(u[c+1]),"$bucket 'boundaries' must all be of the same type"),n(u[c]<u[c+1],"$bucket 'boundaries' must be sorted in ascending order");!h(i)&&e(r["default"])===e(o)&&n(o>r["default"]||a<r["default"],"$bucket 'default' expression must be out of boundaries range");var v={};w(u,function(n){return v[n]=[]}),h(i)||(v[i]=[]);var p=!1;return B(function(){return p||(t.each(function(t){var e=Fn(t,r.groupBy);if(h(e)||e<o||e>=a)n(!h(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=R(u,e),f=u[Math.max(0,s-1)];v[f].push(t)}}),u.pop(),h(i)||u.push(i),p=B(u).map(function(n){var t=Pn(v[n],null,s);return Object.assign(t,{_id:n})})),p.next()})}function K(t,r){var e=r.output||{count:{$sum:1}},u=r.groupBy,i=r.buckets;return n(i>0,"The $bucketAuto 'buckets' field must be greater than 0, but found: "+i),t.transform(function(n){for(var t=Math.max(1,Math.round(n.length/i)),r=U(Fn),o={},a=[],s=q(n,function(n){var t=r(n,u);return h(t)?a.push(n):(o[t]||(o[t]=[]),o[t].push(n)),t}),f=In(),c=[],l=0,v=0,p=s.length;v<i&&l<p;v++){for(var d={},$=[],g=0;g<t&&l<p;g++){var m=r(s[l],u);if(h(m)&&(m=null),L($,h(m)?a:o[m]),l+=h(m)?a.length:o[m].length,x(d,"min")||(d.min=m),c.length>0){var y=c[c.length-1];y[f].max=d.min}}v==i-1&&L($,s.slice(l)),c.push(Object.assign(Pn($,null,e),{_id:d}))}return c.length>0&&(c[c.length-1][f].max=r(s[s.length-1],u)),c})}function Q(t,r){return n(o(r)&&""!==r.trim()&&r.indexOf(".")===-1&&"$"!==r.trim()[0],"Invalid expression value for $count"),B(function(){var n={};return n[r]=t.size(),{value:n,done:!1}}).first()}function W(n,t){return n.transform(function(n){return[j(t,function(t){return ln(n,t)})]}).first()}function G(n,t){var r=In(),e=t[r];return n.transform(function(n){var u=D(n,function(n){return Fn(n,e,e)});delete t[r];var i=-1,o=u.keys.length;return function(){if(++i===o)return{done:!0};var n=u.keys[i],e={};return d(n)||(e[r]=n),w(t,function(n,t){e[t]=Pn(u.groups[i],t,n)}),{value:e,done:!1}}})}function X(n,t){return n.take(t)}function Z(t,e){function u(n){return T(h(n)?null:n)}var i=e.from,a=e.localField,s=e.foreignField,f=e.as;n(ct(i)&&o(s)&&o(a)&&o(f),"$lookup: invalid argument");var c={};return w(i,function(n){var t=u(n[s]);c[t]=c[t]||[],c[t].push(n)}),t.map(function(n){var t=u(n[a]),e=r(n);return e[f]=c[t]||[],e})}function nn(n,t){var r=new Mt(t);return n.filter(function(n){return r.test(n)})}function tn(t,r){return n(ct(r),"$out: argument must be an array"),t.map(function(n){return r.push(n),n})}function rn(r,e){if(b(e))return r;var u=O(e),i=!1,f=In(),c=[!1,!1];if(w(e,function(t,r){r!==f&&(0===t||t===!1?c[0]=!0:c[1]=!0,n(c[0]!==c[1],"Projection cannot have a mix of inclusion and exclusion."))}),$(u,f)){var l=e[f];0!==l&&l!==!1||(u=u.filter(g.bind(null,[f])),n(g(u,f),"Must not contain collections id key"),i=b(u))}else u.push(f);return r.map(function(n){var r={},c=!1,l=!1,v=[];return i&&v.push(f),w(u,function(t){var u=e[t],i=void 0;if(t!==f&&$([0,!1],u)&&(l=!0),t===f&&b(u))i=n[t];else if(o(u))i=Fn(n,u,t);else if($([1,!0],u));else{if(!s(u))return void v.push(t);var h=O(u);h=!(h.length>1)&&h[0],$(Nn(st),h)?"$slice"===h?_(u[h]).every(a)?(i=bt[h](n,u[h],t),c=!0):i=Fn(n,u,t):i=bt[h](n,u[h],t):i=Fn(n,u,t)}var p=qn(n,t);d(p)||Object.assign(r,p),g([0,1,!1,!0],u)&&(d(i)?Rn(r,t):Ln(r,t,i))}),(c||l||i)&&(r=Object.assign({},n,r),v.length>0&&(r=t(r),w(v,function(n){return Rn(r,n)}))),r})}function en(n,r){return n.map(function(n){return Yn(t(n),r)})}function un(t,r){return t.map(function(t){return t=Fn(t,r.newRoot),n(s(t),"$replaceRoot expression must return an object"),t})}function on(t,r){var e=r.size;return n(a(e),"$sample size must be a positive integer"),t.transform(function(n){var t=n.length,r=-1;return function(){if(++r===e)return{done:!0};var u=Math.floor(Math.random()*t);return{value:n[u],done:!1}}})}function an(n,t){return n.drop(t)}function sn(n,t){return!b(t)&&s(t)&&(n=n.transform(function(n){var r=O(t);return w(r.reverse(),function(r){var e=D(n,function(n){return Tn(n,r)}),u={},i=q(e.keys,function(n,t){return u[n]=t,n});t[r]===-1&&i.reverse(),n=[],w(i,function(t){return L(n,e.groups[u[t]])})}),n})),n}function fn(n,t){var r={count:{$sum:1}};return r[In()]=t,this.$sort(this.$group(n,r),{count:-1})}function cn(n,t){o(t)&&(t={path:t});var e=t.path.substr(1),u=t.includeArrayIndex||!1,i=t.preserveNullAndEmptyArrays||!1,a=function(n,t){return u!==!1&&(n[u]=t),n},s=void 0;return B(function(){for(var t=function(){if(B.isIterator(s)){var t=s.next();if(!t.done)return{v:t}}var u=n.next();if(u.done)return{v:u};if(u=u.value,s=Cn(u,e),ct(s)){if(0===s.length&&i===!0){s=null;var o=r(u);return delete o[e],{v:{value:a(o,null),done:!1}}}s=B(s).map(function(n,t){var i=r(u);return i[e]=n,a(i,t)})}else if(!b(s)||i===!0){var f=a(r(u),null);return{v:{value:f,done:!1}}}};;){var u=t();if("object"===("undefined"==typeof u?"undefined":lt(u)))return u.v}})}function ln(t,r){return n(ct(r),"Aggregation pipeline must be an array"),new xt(r).run(t)}function vn(n,t){return C(this.$push(n,t))}function hn(n,t){var r=this.$push(n,t).filter(a),e=M(r,function(n,t){return n+t},0);return e/(r.length||1)}function pn(n,t){return n.length>0?Fn(n[0],t):void 0}function dn(n,t){return n.length>0?Fn(n[n.length-1],t):void 0}function $n(n,t){return M(this.$push(n,t),function(n,t){return h(n)||t>n?t:n},void 0)}function gn(n,t){return M(n,function(n,r){return Object.assign(n,Fn(r,t))},{})}function mn(n,t){return M(this.$push(n,t),function(n,t){return h(n)||t<n?t:n},void 0)}function yn(n,t){return h(t)?n:n.map(function(n){return Fn(n,t)})}function bn(n,t){return zn({data:this.$push(n,t).filter(a),sampled:!1})}function _n(n,t){return zn({data:this.$push(n,t).filter(a),sampled:!0})}function xn(n,t){return ct(n)?a(t)?n.length*t:M(this.$push(n,t).filter(a),function(n,t){return n+t},0):0}function kn(n,t){return e(n)===e(t)}function On(n,t,r){return new Mt(t).find(n,r)}function wn(n,t){return new Mt(t).remove(n)}function jn(n,t){return new Array(Math.max(t-String(n).length+1,0)).join("0")+n}function Mn(n){if(n<128)return[n];for(var t=n<2048&&1||n<65536&&2||3,r=Lt[t-1],e=[(n>>6*t)+r];t>0;)e.push(128|n>>6*--t&63);return e}function An(n){for(var t=[],r=0,e=n.length;r<e;r++)t.push(Mn(n.codePointAt(r)));return t}function Nn(){return M(arguments,function(n,t){return L(n,O(Ft[t]))},[])}function En(t,r){var e=r(Jn());n(x(Ft,t),"Invalid operator class "+t);var u=Ft[t];w(e,function(r,e){n(/^\$\w+$/.test(e),"Invalid operator name "+e),n(!x(u,e),e+" already exists for '"+t+"' operators")});var o={};switch(t){case ft:w(e,function(t,r){o[r]=function(t,e){return function(u,o){return t=t.bind(e),{test:function(e){var a=Tn(e,u),s=t(u,a,o);return n(i(s),r+" must return a boolean"),s}}}}(t,e)});break;case st:w(e,function(n,t){o[t]=function(n,t){return n=n.bind(t),function(t,r,e){var u=Tn(t,e);return n(e,u,r)}}(n,e)});break;default:w(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(Ft[t],o)}function Sn(n){Object.assign(Bt,n||{})}function In(){return Bt.key}function Cn(n,t){return f(n)?n[t]:void 0}function Pn(t,r,e){if($(Nn(ot),r))return kt[r](t,e);if(s(e)){var u={};return w(e,function(r,i){if(u[i]=Pn(t,i,e[i]),$(Nn(ot),i))return u=u[i],n(1===O(e).length,"Invalid $group expression '"+JSON.stringify(e)+"'"),!1}),u}}function Tn(n,t,r){function e(n,t){for(var r=n,i=0;i<t.length;i++){var o=t[i],a=null===o.match(/^\d+$/);if(a&&ct(r)){if(0===i&&u>0)break;u+=1,t=t.slice(i),r=M(r,function(n,r){var u=e(r,t);return void 0!==u&&n.push(u),n},[]);break}if(r=Cn(r,o),void 0===r)break}return r}var u=0;return r=r||{meta:!1},n=e(n,t.split(".")),r.meta?{result:n,depth:u}:n}function qn(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,s=void 0,f=void 0;try{ct(t)?o?(s=Cn(t,u),a&&(s=qn(s,i)),n(!d(s)),s=[s]):(s=[],w(t,function(n){f=qn(n,r),void 0!==f&&s.push(f)}),n(s.length>0)):(f=Cn(t,u),a&&(f=qn(f,i)),n(void 0!==f),s={},s[u]=f)}catch(c){s=void 0}return s}function Dn(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(ct(n)&&!/^\d+$/.test(i))w(n,function(n){Dn(n,t,r,e)});else{if(e===!0){var a=x(n,i);a&&!h(n[i])||(n[i]={})}Dn(n[i],o,r,e)}}function Ln(n,t,r){Dn(n,t,function(n,t){n[t]=r},!0)}function Rn(n,t){Dn(n,t,function(n,t){ct(n)&&/^\d+$/.test(t)?n.splice(parseInt(t),1):s(n)&&delete n[t]})}function Un(n){if($(ut,u(n)))return l(n)?{$regex:n}:{$eq:n};if(f(n)){var t=O(n),r=0===A(Nn(ft),t).length;if(r)return{$eq:n};if($(t,"$regex")){var e=n.$regex,i=n.$options||"",a="";o(e)&&(a+=e.ignoreCase||i.indexOf("i")>=0?"i":"",a+=e.multiline||i.indexOf("m")>=0?"m":"",a+=e.global||i.indexOf("g")>=0?"g":"",e=new RegExp(e,a)),n.$regex=e,delete n.$options}}return n}function Fn(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,$(Nn(it),e))return Ut[e](t,r,i);if($(Nn(ot),e))return t=Fn(t,r,null,i),n(ct(t),e+" expression must resolve to an array"),kt[e](t,null,i);if(o(r)&&r.length>0&&"$"===r[0]){if($(Jt,r))return zt[r](t,null,i);if($(Ht,r))return r;var a=Jt.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)),Tn(t,r.slice(1))}switch(u(r)){case tt:return r.map(function(n){return Fn(t,n)});case rt:var s={};return w(r,function(e,u){if(s[u]=Fn(t,e,u,i),$(Nn(it,ot),u))return n(1===O(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),s=s[u],!1}),s;default:return r}}function Bn(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return h(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 zn(n){var t=M(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(M(n.data,function(n,t){return n+Math.pow(t-u,2)},0)/(r-e))}function Yn(n,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};r.root=r.root||n;var e=Fn(n,t,null,r);return $(Ht,e)?Yt[e](n,t,r):e}function Jn(){return{assert:n,computeValue:Fn,clone:r,cloneDeep:t,each:w,err:k,getHash:T,getType:e,has:x,idKey:In,includes:$.bind(null),isArray:ct,isBoolean:i,isDate:c,isEmpty:b,isEqual:I,isFunction:v,isNil:h,isNull:p,isNumber:a,isObject:s,isRegExp:l,isString:o,isUndefined:d,keys:O,ops:Nn,resolve:Tn,resolveObj:qn,reduce:M}}var Hn="null",Vn="undefined",Kn="bool",Qn="boolean",Wn="number",Gn="string",Xn="date",Zn="regex",nt="regexp",tt="array",rt="object",et="function",ut=[Hn,Vn,Qn,Wn,Gn,Xn,nt],it="expression",ot="group",at="pipeline",st="projection",ft="query",ct=Array.isArray||function(n){return u(n)===tt},lt="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},vt=function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")},ht=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}}();B.isIterator=z;var pt=new Error,dt=1,$t=2,gt=3,mt=4,yt=function(){function n(t){if(vt(this,n),this.__iteratees=[],this.__first=!1,this.__done=!1,this.__buf=[],Y(t)&&(t={next:t}),z(t))t=function(n){return function(){var t=n.next();if(t.done)throw pt;return t.value}}(t);else if(Array.isArray(t))t=function(n){var t=n.length,r=0;return function(){if(r<t)return n[r++];throw pt}}(t);else if(!Y(t))throw new Error("Source is not iterable. Must be Array, Function or Object{next:Function}");this.next=H(t,this.__iteratees,this.__buf)}return ht(n,[{key:Symbol.iterator,value:function(){return this}},{key:"_validate",value:function(){if(this.__first)throw new Error("Cannot add iteratee/transform after `first()`")}},{key:"_push",value:function(n){return this._validate(),this.__iteratees.push(n),this}},{key:"map",value:function(n){return this._push({type:dt,func:n})}},{key:"filter",value:function(n){return this._push({type:$t,func:n})}},{key:"take",value:function(n){return n>0?this._push({type:gt,func:n}):this}},{key:"drop",value:function(n){return n>0?this._push({type:mt,func:n}):this}},{key:"transform",value:function(n){this._validate();var t=this,r=void 0;return B(function(){return r||(r=B(n(t.value()))),r.next()})}},{key:"first",value:function(){return this.take(1),this.__first=!0,this}},{key:"value",value:function(){return this.__done||(this.__done=this.next(this.__buf).done),this.__first?this.__buf[0]:this.__buf}},{key:"each",value:function(n){for(;;){var t=this.next();if(t.done)break;if(n(t.value)===!1)return!1}return!0}},{key:"reduce",value:function(n,t){var r=this.next(),e=0;for(void 0!==t||r.done||(t=r.value,r=this.next(),e++);!r.done;)t=n(t,r.value,e++),r=this.next();return t}},{key:"size",value:function(){return this.reduce(function(n,t){return++n},0)}}]),n}(),bt={$:function(n,t,r){k("$ not implemented")},$elemMatch:function(t,r,e){var u=Tn(t,e),i=new Mt(r);n(ct(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=Tn(t,e);return ct(u)?ct(r)?Bn(u,r[0],r[1]):(n(a(r),"$slice: invalid arguments for projection"),Bn(u,r)):u}},_t={$addFields:F,$bucket:V,$bucketAuto:K,$count:Q,$facet:W,$group:G,$limit:X,$lookup:Z,$match:nn,$out:tn,$project:rn,$redact:en,$replaceRoot:un,$sample:on,$skip:an,$sort:sn,$sortByCount:fn,$unwind:cn},xt=function(){function t(n){vt(this,t),this.__operators=n}return ht(t,[{key:"stream",value:function(t,r){return t=B(t),b(this.__operators)||w(this.__operators,function(e){var u=O(e);n(1===u.length&&$(Nn(at),u[0]),"Invalid aggregation operator "+u),u=u[0],t=r&&r instanceof Mt?_t[u].call(r,t,e[u]):_t[u](t,e[u])}),t}},{key:"run",value:function(n,t){return this.stream(n,t).value()}}]),t}(),kt={$addToSet:vn,$avg:hn,$first:pn,$last:dn,$mergeObjects:gn,$max:$n,$min:mn,$push:yn,$stdDevPop:bn,$stdDevSamp:_n,$sum:xn},Ot=function(){function n(t,r,e){vt(this,n),this.__filterFn=r.test.bind(r),this.__query=r,this.__source=t,this.__projection=e||r.__projection,this.__operators=[],this.__result=null,this.__stack=[]}return ht(n,[{key:"_fetch",value:function(){return this.__result?this.__result:(s(this.__projection)&&this.__operators.push({$project:this.__projection}),this.__result=B(this.__source).filter(this.__filterFn),this.__operators.length>0&&(this.__result=new xt(this.__operators).stream(this.__result,this.__query)),this.__result)}},{key:"all",value:function(){return this._fetch().value()}},{key:"count",value:function(){return this.all().length}},{key:"skip",value:function(n){return this.__operators.push({$skip:n}),this}},{key:"limit",value:function(n){return this.__operators.push({$limit:n}),this}},{key:"sort",value:function(n){return this.__operators.push({$sort:n}),this}},{key:"next",value:function(){if(this.__stack){if(this.__stack.length>0)return this.__stack.pop();var n=this._fetch().next();return n.done?void(this.__stack=null):n.value}}},{key:"hasNext",value:function(){if(!this.__stack)return!1;if(this.__stack.length>0)return!0;var n=this._fetch().next();return n.done?this.__stack=null:this.__stack.push(n.value),!!this.__stack}},{key:"map",value:function(n){return this._fetch().map(n).value()}},{key:"forEach",value:function(n){this._fetch().each(n)}},{key:Symbol.iterator,value:function(){return this._fetch()}}]),n}(),wt={$eq:function(n,t){if(I(n,t))return!0;if(h(n)&&h(t))return!0;if(ct(n)){var r=I.bind(null,t);return n.some(r)||E(n,1).some(r)}return!1},$ne:function(n,t){return!this.$eq(n,t)},$in:function(n,t){return A(_(n),t).length>0},$nin:function(n,t){return h(n)||!this.$in(n,t)},$lt:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n<t}))},$lte:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n<=t}))},$gt:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n>t}))},$gte:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n>=t}))},$mod:function(n,t){return!d(_(n).find(function(n){return a(n)&&ct(t)&&2===t.length&&n%t[0]===t[1]}))},$regex:function(n,t){n=_(n);var r=function(n){return o(n)&&!!n.match(t)};return n.some(r)||E(n,1).some(r)},$exists:function(n,t){return(t===!1||0===t)&&h(n)||(t===!0||1===t)&&!h(n)},$all:function(n,t){var r=!1;if(ct(n)&&ct(t))for(var e=0,u=t.length;e<u;e++){if(!s(t[e])||!$(O(t[e]),"$elemMatch"))return A(t,n).length===u;r=r||this.$elemMatch(n,t[e].$elemMatch)}return r},$size:function(n,t){return ct(n)&&a(t)&&n.length===t},$elemMatch:function(n,t){if(ct(n)&&!b(n))for(var r=new Mt(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)&&(n+"").indexOf(".")!==-1;case 2:case Gn:return o(n);case 3:case rt:return s(n);case 4:case tt:return ct(n);case 6:case Vn:return h(n);case 8:case Kn:return i(n);case 9:case Xn:return c(n);case 10:case Hn:return p(n);case 11:case Zn:return l(n);case 16:case"int":return a(n)&&n<=2147483647&&(n+"").indexOf(".")===-1;case 18:case"long":return a(n)&&n>2147483647&&n<=0x8000000000000000&&(n+"").indexOf(".")===-1;case 19:case"decimal":return a(n);default:return!1}}},jt={$and:function(t,r){n(ct(r),"Invalid expression: $and expects value to be an Array");var e=[];return w(r,function(n){return e.push(new Mt(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(ct(r),"Invalid expression. $or expects value to be an Array");var e=[];return w(r,function(n){return e.push(new Mt(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(ct(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]=Un(t);var e=new Mt(r);return{test:function(n){return!e.test(n)}}},$where:function(n,t){return v(t)||(t=new Function("return "+t+";")),{test:function(n){return t.call(n)===!0}}},$expr:function(n,t){return{test:function(n){return Fn(n,t)}}}};w(wt,function(n,t){jt[t]=function(n,t){return n=n.bind(t),function(t,r){return{test:function(e){var u=Tn(e,t,{meta:!0});return u=S(u.result,u.depth),n(u,r)}}}}(n,wt)});var Mt=function(){function t(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};vt(this,t),this.__criteria=n,this.__projection=r,this.__compiled=[],this._compile()}return ht(t,[{key:"_compile",value:function(){var t=this;if(!b(this.__criteria)){n(s(this.__criteria),"Criteria must be of type Object");var r=void 0;w(this.__criteria,function(n,e){"$where"===e?r={field:e,expr:n}:"$expr"===e?t._processOperator(e,e,n):$(["$and","$or","$nor"],e)?t._processOperator(e,e,n):(n=Un(n),w(n,function(n,r){t._processOperator(e,r,n)})),s(r)&&t._processOperator(r.field,r.field,r.expr)})}}},{key:"_processOperator",value:function(t,r,e){n($(Nn(ft),r),"Invalid query operator '"+r+"' detected"),this.__compiled.push(jt[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 Ot(n,this,t)}},{key:"remove",value:function(n){var t=this;return M(n,function(n,r){return t.test(r)||n.push(r),n},[])}}]),t}(),At={$abs:function(n,t){var r=Fn(n,t);return null===r||void 0===r?null:Math.abs(r)},$add:function(t,r){var e=Fn(t,r),u=!1,i=M(e,function(t,r){return c(r)&&(n(!u,"'$add' can only have one date value"),u=!0,r=r.getTime()),t+=r},0);return u?new Date(i):i},$ceil:function(t,r){var e=Fn(t,r);return h(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=Fn(n,t);return r[0]/r[1]},$exp:function(t,r){var e=Fn(t,r);return h(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=Fn(t,r);return h(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=Fn(t,r);return h(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=Fn(t,r);return n(ct(e)&&2===e.length,"$log must be a valid expression that resolves to an array of 2 items"),e.some(h)?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=Fn(t,r);return h(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=Fn(n,t);return r[0]%r[1]},$multiply:function(n,t){var r=Fn(n,t);return M(r,function(n,t){return n*t},1)},$pow:function(t,r){var e=Fn(t,r);return n(ct(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=Fn(t,r);return h(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=Fn(n,t);return r[0]-r[1]},$trunc:function(t,r){var e=Fn(t,r);return h(e)?null:(n(a(e)||isNaN(e),"$trunc expression must resolve to a number."),Math.trunc(e))}},Nt={$arrayElemAt:function(t,r){var e=Fn(t,r);n(ct(e)&&2===e.length,"$arrayElemAt expression must resolve to an array of 2 elements"),n(ct(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=Fn(t,r);return n(ct(e),"$arrayToObject expression must resolve to an array"),M(e,function(t,r){return ct(r)&&2==r.length?t[r[0]]=r[1]:(n(s(r)&&x(r,"k")&&x(r,"v"),"$arrayToObject expression is invalid."),t[r.k]=r.v),t},{})},$concatArrays:function(t,r){var e=Fn(t,r,null);return n(ct(e),"$concatArrays must resolve to an array"),e.some(h)?null:e.reduce(function(n,t){return L(n,t)},[])},$filter:function(t,r){var e=Fn(t,r.input),u=r.as,i=r.cond;return n(ct(e),"$filter 'input' expression must resolve to an array"),e.filter(function(n){var t={};return t["$"+u]=n,Fn(t,i)===!0})},$in:function(t,r){var e=Fn(t,r[0]),u=Fn(t,r[1]);return n(ct(u),"$in second argument must be an array"),$(u,e)},$indexOfArray:function(t,r){var e=Fn(t,r);if(h(e))return null;var u=e[0],i=e[1];if(h(u))return null;n(ct(u),"$indexOfArray expression must resolve to an array.");var o=e[2]||0,a=e[3];return h(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(I.bind(null,i))+o)},$isArray:function(n,t){return ct(Fn(n,t[0]))},$map:function(t,r){var e=Fn(t,r.input);n(ct(e),"$map 'input' expression must resolve to an array");var u=r.as,i=r["in"],o="$"+u;return e.map(function(n){return t[o]=n,Fn(t,i)})},$objectToArray:function(t,r){var e=Fn(t,r);n(s(e),"$objectToArray expression must resolve to an object");var u=[];return w(e,function(n,t){return u.push({k:t,v:n})}),u},$range:function(n,t){for(var r=Fn(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=Fn(t,r.input),u=Fn(t,r.initialValue),i=r["in"];return h(e)?null:(n(ct(e),"$reduce 'input' expression must resolve to an array"),M(e,function(n,t){return Fn({$value:n,$this:t},i)},u))},$reverseArray:function(t,r){var e=Fn(t,r);if(h(e))return null;n(ct(e),"$reverseArray expression must resolve to an array");var u=[];return L(u,e),u.reverse(),u},$size:function(n,t){var r=Fn(n,t);return ct(r)?r.length:void 0},$slice:function(n,t){var r=Fn(n,t);return Bn(r[0],r[1],r[2])},$zip:function(t,r){var e=Fn(t,r.inputs),u=r.useLongestLength||!1;n(ct(e),"'inputs' expression must resolve to an array"),n(i(u),"'useLongestLength' must be a boolean"),ct(r.defaults)&&n(m(u),"'useLongestLength' must be set to true to use 'defaults'");for(var o=0,a=0,s=e.length;a<s;a++){var f=e[a];if(h(f))return null;n(ct(f),"'inputs' expression values must resolve to an array or null"),o=u?Math.max(o,f.length):Math.min(o||f.length,f.length)}for(var c=[],l=r.defaults||[],v=function(n){var t=e.map(function(t,r){return h(t[n])?l[r]||null:t[n]});c.push(t)},p=0;p<o;p++)v(p);return c},$mergeObjects:function(n,t){var r=Fn(n,t);return ct(r)?M(r,function(n,t){return Object.assign(n,t)},{}):{}}},Et={$and:function(n,t){var r=Fn(n,t);return m(r)&&r.every(m)},$or:function(n,t){var r=Fn(n,t);return m(r)&&r.some(m)},$not:function(n,t){return!Fn(n,t[0])}},St={$cmp:function(n,t){var r=Fn(n,t);return r[0]>r[1]?1:r[0]<r[1]?-1:0}};w(["$eq","$ne","$gt","$gte","$lt","$lte","$nin"],function(n){St[n]=function(t,r){var e=Fn(t,r);return wt[n](e[0],e[1])}});var It={$cond:function(t,r){var e=void 0,u=void 0,i=void 0,o="$cond: invalid arguments";ct(r)?(n(3===r.length,o),e=r[0],u=r[1],i=r[2]):(n(s(r),o),e=r["if"],u=r.then,i=r["else"]);var a=Fn(t,e);return a?Fn(t,u):Fn(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),Fn(t,r["case"])});return u?Fn(t,u.then):(n(r["default"],e),Fn(t,r["default"]))},$ifNull:function(t,r){n(ct(r)&&2===r.length,"Invalid arguments for $ifNull operator");var e=Fn(t,r);return h(e[0])?e[1]:e[0]}},Ct={"%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],"%%":"%"},Pt={$dayOfYear:function(n,t){var r=Fn(n,t),e=new Date(r.getFullYear(),0,0),u=r-e,i=864e5;return Math.round(u/i)},$dayOfMonth:function(n,t){var r=Fn(n,t);return r.getDate()},$dayOfWeek:function(n,t){var r=Fn(n,t);return r.getDay()+1},$year:function(n,t){var r=Fn(n,t);return r.getFullYear()},$month:function(n,t){var r=Fn(n,t);return r.getMonth()+1},$week:function(n,t){var r=Fn(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){var r=Fn(n,t);return r.getUTCHours()},$minute:function(n,t){var r=Fn(n,t);return r.getMinutes()},$second:function(n,t){var r=Fn(n,t);return r.getSeconds()},$millisecond:function(n,t){var r=Fn(n,t);return r.getMilliseconds()},$dateToString:function(n,t){for(var r=t.format,e=Fn(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=Ct[u[i]],s=a;if(ct(a)){var f=this[a[0]].bind(this),c=a[1];s=jn(f(n,e),c)}r=r.replace(u[i],s)}return r}},Tt={$literal:function(n,t){return t}},qt={$setEquals:function(n,t){var r=Fn(n,t),e=C(r[0]),u=C(r[1]);return e.length===u.length&&e.length===A(e,u).length},$setIntersection:function(n,t){var r=Fn(n,t);return A(r[0],r[1])},$setDifference:function(n,t){var r=Fn(n,t);return r[0].filter(g.bind(null,r[1]))},$setUnion:function(n,t){var r=Fn(n,t);return N(r[0],r[1])},$setIsSubset:function(n,t){ | ||
var r=Fn(n,t);return A(r[0],r[1]).length===r[0].length},$anyElementTrue:function(n,t){var r=Fn(n,t)[0];return r.some(m)},$allElementsTrue:function(n,t){var r=Fn(n,t)[0];return r.every(m)}},Dt={$concat:function(n,t){var r=Fn(n,t);return[null,void 0].some($.bind(null,r))?null:r.join("")},$indexOfBytes:function(t,r){var e=Fn(t,r),u="$indexOfBytes: expression resolves to invalid arguments";if(h(e[0]))return null;n(o(e[0])&&o(e[1]),u);var i=e[0],s=e[1],f=e[2],c=e[3],l=h(f)||a(f)&&f>=0&&Math.round(f)===f;if(l=l&&(h(c)||a(c)&&c>=0&&Math.round(c)===c),n(l,u),f=f||0,c=c||i.length,f>c)return-1;var v=i.substring(f,c).indexOf(s);return v>-1?v+f:v},$split:function(t,r){var e=Fn(t,r);return h(e[0])?null:(n(e.every(o),"$split: invalid argument"),e[0].split(e[1]))},$strLenBytes:function(n,t){return~-encodeURI(Fn(n,t)).split(/%..|./).length},$strLenCP:function(n,t){return Fn(n,t).length},$strcasecmp:function(t,r){var e=Fn(t,r),u=e[0],i=e[1];return I(u,i)||e.every(h)?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=Fn(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 f=An(u),c=[],l=0,v=0;v<f.length;v++)c.push(l),l+=f[v].length;var h=c.indexOf(i),p=c.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=Fn(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=Fn(n,t);return b(r)?"":r.toLowerCase()},$toUpper:function(n,t){var r=Fn(n,t);return b(r)?"":r.toUpperCase()}},Lt=[192,224,240],Rt={$let:function(n,t){var r=t.vars,e=t["in"],u=O(r);return w(u,function(t){var e=Fn(n,r[t]),u="$"+t;n[u]=e}),Fn(n,e)}},Ut=Object.assign({},At,Nt,Et,St,It,Pt,Tt,qt,Dt,Rt),Ft={expression:Ut,group:kt,pipeline:_t,projection:bt,query:jt},Bt={key:"_id"},zt={$$ROOT:function(n,t,r){return r.root},$$CURRENT:function(n,t,r){return n}},Yt={$$KEEP:function(n){return n},$$PRUNE:function(){},$$DESCEND:function(n,t,r){if(!x(t,"$cond"))return n;var e=void 0;return w(n,function(u,i){f(u)&&(ct(u)?(e=[],w(u,function(n){s(n)&&(n=Yn(n,t,r)),h(n)||e.push(n)})):e=Yn(u,t,r),h(e)?delete n[i]:n[i]=e)}),n}},Jt=O(zt),Ht=O(Yt),Vt={query:function(n,t){return new Mt(n).find(this.toJSON(),t)},aggregate:function(n){return new xt(n).run(this.toJSON())}},Kt="2.2.1",Qt={_internal:Jn,Aggregator:xt,CollectionMixin:Vt,Cursor:Ot,Lazy:B,OP_EXPRESSION:it,OP_GROUP:ot,OP_PIPELINE:at,OP_PROJECTION:st,OP_QUERY:ft,Query:Mt,VERSION:Kt,addOperators:En,aggregate:ln,find:On,remove:wn,setup:Sn};return Qt}); | ||
!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){y(n)&&k(t)}function t(n){switch(u(n)){case tt:return n.map(t);case rt:return j(n,t);default:return n}}function r(n){switch(u(n)){case tt:return L([],n);case rt: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)===Qn}function o(n){return u(n)===Gn}function a(n){return u(n)===Wn}function s(n){return u(n)===rt}function f(n){return n===Object(n)}function c(n){return u(n)===Xn}function l(n){return u(n)===nt}function v(n){return u(n)===et}function h(n){return p(n)||d(n)}function p(n){return u(n)===Hn}function d(n){return u(n)===Vn}function $(n,t){return n.some(I.bind(null,t))}function g(n,t){return!$(n,t)}function m(n){return!!n}function y(n){return!n}function b(n){return h(n)||ct(n)&&0===n.length||s(n)&&0===O(n).length||!n}function _(n){return ct(n)?n:[n]}function x(n,t){return n.hasOwnProperty(t)}function k(n){throw new Error(n)}function O(n){return Object.keys(n)}function w(n,t,r){if(t=t.bind(r),ct(n))for(var e=0,u=n.length;e<u&&t(n[e],e,n)!==!1;e++);else for(var i in n)if(x(n,i)&&t(n[i],i,n)===!1)break}function j(n,t,r){t=t.bind(r);var e={};return w(n,function(n,r){e[r]=t(n,r)},n),e}function M(n,t,r){return ct(n)?n.reduce(t,r):(w(n,function(e,u){return r=t(r,e,u,n)}),r)}function A(n,t){return n.filter($.bind(null,t))}function N(n,t){return L(L([],n),t.filter(g.bind(null,n)))}function E(t){function r(n,t){for(var e=0,i=n.length;e<i;e++)ct(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(ct(t),"Input must be an Array");var u=[];return r(t,e),u}function S(n,t){if(t<1)return n;for(;t--&&ct(n)&&1===n.length;)n=n[0];return n}function I(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===et)return!1;switch(i){case tt:if(n.length!==t.length)return!1;L(r,n),L(e,t);break;case rt:var o=O(n),a=O(t);if(o.length!==a.length)return!1;o.sort(),a.sort();for(var s=0,f=o.length;s<f;s++){var c=o[s];if(c!==a[s])return!1;r.push(n[c]),e.push(t[c])}break;default:if(P(n)!==P(t))return!1}}return 0===r.length}function C(n){var t={},r=[];return w(n,function(n){var e=T(n);x(t,e)||(r.push(n),t[e]=0)}),r}function P(n){var t=u(n);switch(t){case Qn:case Wn:case nt:return n.toString();case Gn:return JSON.stringify(n);case Xn:return n.toISOString();case Hn:case Vn:return t;case tt:return"["+n.map(P)+"]";default:var r=t===rt?"":""+e(n),i=O(n);return i.sort(),r+"{"+i.map(function(t){return P(t)+":"+P(n[t])})+"}"}}function T(n){for(var t=0,r=P(n),e=r.length;e;)t=(t<<5)-t^r.charCodeAt(--e);return t>>>0}function q(n,t,r){var e={},u=[],i=n.length,o=[];t=t.bind(r);for(var a=0;a<i;a++){var s=n[a],f=t(s,a);if(h(f))o.push(s);else{var c=T(s);x(e,c)||(e[c]=[f,a]),u.push(s)}}return u.sort(function(n,t){var r=e[T(n)],u=e[T(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 t=t.bind(r),w(n,function(n){var r=t(n),i=T(r),o=-1;d(u[i])&&(o=e.keys.length,u[i]=o,e.keys.push(r),e.groups.push([])),o=u[i],e.groups[o].push(n)}),e}function L(n,t){return Array.prototype.push.apply(n,t),n}function R(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 U(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=T(u);return x(r,o)||(r[o]=n.apply(t,u)),r[o]}}({})}function F(n,r){var e=O(r);return 0===e.length?n:n.map(function(n){var u=t(n);return w(e,function(t){var e=Fn(n,r[t]);Ln(u,t,e)}),u})}function B(n){return n instanceof yt?n:new yt(n)}function z(n){return!!n&&"object"===("undefined"==typeof n?"undefined":lt(n))&&Y(n.next)}function Y(n){return!!n&&"function"==typeof n}function J(n,t){var r=n.slice(t+1);n.splice(t),Array.prototype.push.apply(n,r)}function H(n,t,r){var e=!1,u=-1,i={},o=0;return function(a){a=a===r;try{n:for(;!e;){var s=n();u++;for(var f=-1,c=t.length,l=!1;++f<c;){var v=t[f],h=v.func,p=v.type;switch(p){case dt:s=h(s,u);break;case $t:if(!h(s,u))continue n;break;case gt:--v.func,v.func||(l=!0);break;case mt:--v.func,v.func||J(t,f);continue n;default:break n}}if(e=l,!a)return{value:s,done:!1};r[o++]=s}}catch(d){if(d!==pt)throw d}return i=null,e=!0,{done:!0}}}function V(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 f=e(o),c=0,l=u.length-1;c<l;c++)n(f===e(u[c+1]),"$bucket 'boundaries' must all be of the same type"),n(u[c]<u[c+1],"$bucket 'boundaries' must be sorted in ascending order");!h(i)&&e(r["default"])===e(o)&&n(o>r["default"]||a<r["default"],"$bucket 'default' expression must be out of boundaries range");var v={};w(u,function(n){return v[n]=[]}),h(i)||(v[i]=[]);var p=!1;return B(function(){return p||(t.each(function(t){var e=Fn(t,r.groupBy);if(h(e)||e<o||e>=a)n(!h(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=R(u,e),f=u[Math.max(0,s-1)];v[f].push(t)}}),u.pop(),h(i)||u.push(i),p=B(u).map(function(n){var t=Pn(v[n],null,s);return Object.assign(t,{_id:n})})),p.next()})}function K(t,r){var e=r.output||{count:{$sum:1}},u=r.groupBy,i=r.buckets;return n(i>0,"The $bucketAuto 'buckets' field must be greater than 0, but found: "+i),t.transform(function(n){for(var t=Math.max(1,Math.round(n.length/i)),r=U(Fn),o={},a=[],s=q(n,function(n){var t=r(n,u);return h(t)?a.push(n):(o[t]||(o[t]=[]),o[t].push(n)),t}),f=In(),c=[],l=0,v=0,p=s.length;v<i&&l<p;v++){for(var d={},$=[],g=0;g<t&&l<p;g++){var m=r(s[l],u);if(h(m)&&(m=null),L($,h(m)?a:o[m]),l+=h(m)?a.length:o[m].length,x(d,"min")||(d.min=m),c.length>0){var y=c[c.length-1];y[f].max=d.min}}v==i-1&&L($,s.slice(l)),c.push(Object.assign(Pn($,null,e),{_id:d}))}return c.length>0&&(c[c.length-1][f].max=r(s[s.length-1],u)),c})}function Q(t,r){return n(o(r)&&""!==r.trim()&&r.indexOf(".")===-1&&"$"!==r.trim()[0],"Invalid expression value for $count"),B(function(){var n={};return n[r]=t.size(),{value:n,done:!1}}).first()}function W(n,t){return n.transform(function(n){return[j(t,function(t){return ln(n,t)})]}).first()}function G(n,t){var r=In(),e=t[r];return n.transform(function(n){var u=D(n,function(n){return Fn(n,e,e)});delete t[r];var i=-1,o=u.keys.length;return function(){if(++i===o)return{done:!0};var n=u.keys[i],e={};return d(n)||(e[r]=n),w(t,function(n,t){e[t]=Pn(u.groups[i],t,n)}),{value:e,done:!1}}})}function X(n,t){return n.take(t)}function Z(t,e){function u(n){return T(h(n)?null:n)}var i=e.from,a=e.localField,s=e.foreignField,f=e.as;n(ct(i)&&o(s)&&o(a)&&o(f),"$lookup: invalid argument");var c={};return w(i,function(n){var t=u(n[s]);c[t]=c[t]||[],c[t].push(n)}),t.map(function(n){var t=u(n[a]),e=r(n);return e[f]=c[t]||[],e})}function nn(n,t){var r=new Mt(t);return n.filter(function(n){return r.test(n)})}function tn(t,r){return n(ct(r),"$out: argument must be an array"),t.map(function(n){return r.push(n),n})}function rn(r,e){if(b(e))return r;var u=O(e),i=!1,f=In(),c=[!1,!1];if(w(e,function(t,r){r!==f&&(0===t||t===!1?c[0]=!0:c[1]=!0,n(c[0]!==c[1],"Projection cannot have a mix of inclusion and exclusion."))}),$(u,f)){var l=e[f];0!==l&&l!==!1||(u=u.filter(g.bind(null,[f])),n(g(u,f),"Must not contain collections id key"),i=b(u))}else u.push(f);return r.map(function(n){var r={},c=!1,l=!1,v=[];return i&&v.push(f),w(u,function(t){var u=e[t],i=void 0;if(t!==f&&$([0,!1],u)&&(l=!0),t===f&&b(u))i=n[t];else if(o(u))i=Fn(n,u,t);else if($([1,!0],u));else{if(!s(u))return void v.push(t);var h=O(u);h=!(h.length>1)&&h[0],$(Nn(st),h)?"$slice"===h?_(u[h]).every(a)?(i=bt[h](n,u[h],t),c=!0):i=Fn(n,u,t):i=bt[h](n,u[h],t):i=Fn(n,u,t)}var p=qn(n,t);d(p)||Object.assign(r,p),g([0,1,!1,!0],u)&&(d(i)?Rn(r,t):Ln(r,t,i))}),(c||l||i)&&(r=Object.assign({},n,r),v.length>0&&(r=t(r),w(v,function(n){return Rn(r,n)}))),r})}function en(n,r){return n.map(function(n){return Yn(t(n),r)})}function un(t,r){return t.map(function(t){return t=Fn(t,r.newRoot),n(s(t),"$replaceRoot expression must return an object"),t})}function on(t,r){var e=r.size;return n(a(e),"$sample size must be a positive integer"),t.transform(function(n){var t=n.length,r=-1;return function(){if(++r===e)return{done:!0};var u=Math.floor(Math.random()*t);return{value:n[u],done:!1}}})}function an(n,t){return n.drop(t)}function sn(n,t){return!b(t)&&s(t)&&(n=n.transform(function(n){var r=O(t);return w(r.reverse(),function(r){var e=D(n,function(n){return Tn(n,r)}),u={},i=q(e.keys,function(n,t){return u[n]=t,n});t[r]===-1&&i.reverse(),n=[],w(i,function(t){return L(n,e.groups[u[t]])})}),n})),n}function fn(n,t){var r={count:{$sum:1}};return r[In()]=t,this.$sort(this.$group(n,r),{count:-1})}function cn(n,r){o(r)&&(r={path:r});var e=r.path.substr(1),u=r.includeArrayIndex||!1,i=r.preserveNullAndEmptyArrays||!1,a=function(n,t){return u!==!1&&(n[u]=t),n},s=void 0;return B(function(){for(var r=function(){if(B.isIterator(s)){var r=s.next();if(!r.done)return{v:r}}var u=n.next();if(u.done)return{v:u};if(u=u.value,s=Tn(u,e),ct(s)){if(0===s.length&&i===!0){s=null;var o=t(u);return Rn(o,e),{v:{value:a(o,null),done:!1}}}s=B(s).map(function(n,r){var i=t(u);return Ln(i,e,n),a(i,r)})}else if(!b(s)||i===!0){var f=a(t(u),null);return{v:{value:f,done:!1}}}};;){var u=r();if("object"===("undefined"==typeof u?"undefined":lt(u)))return u.v}})}function ln(t,r){return n(ct(r),"Aggregation pipeline must be an array"),new xt(r).run(t)}function vn(n,t){return C(this.$push(n,t))}function hn(n,t){var r=this.$push(n,t).filter(a),e=M(r,function(n,t){return n+t},0);return e/(r.length||1)}function pn(n,t){return n.length>0?Fn(n[0],t):void 0}function dn(n,t){return n.length>0?Fn(n[n.length-1],t):void 0}function $n(n,t){return M(this.$push(n,t),function(n,t){return h(n)||t>n?t:n},void 0)}function gn(n,t){return M(n,function(n,r){return Object.assign(n,Fn(r,t))},{})}function mn(n,t){return M(this.$push(n,t),function(n,t){return h(n)||t<n?t:n},void 0)}function yn(n,t){return h(t)?n:n.map(function(n){return Fn(n,t)})}function bn(n,t){return zn({data:this.$push(n,t).filter(a),sampled:!1})}function _n(n,t){return zn({data:this.$push(n,t).filter(a),sampled:!0})}function xn(n,t){return ct(n)?a(t)?n.length*t:M(this.$push(n,t).filter(a),function(n,t){return n+t},0):0}function kn(n,t){return e(n)===e(t)}function On(n,t,r){return new Mt(t).find(n,r)}function wn(n,t){return new Mt(t).remove(n)}function jn(n,t){return new Array(Math.max(t-String(n).length+1,0)).join("0")+n}function Mn(n){if(n<128)return[n];for(var t=n<2048&&1||n<65536&&2||3,r=Lt[t-1],e=[(n>>6*t)+r];t>0;)e.push(128|n>>6*--t&63);return e}function An(n){for(var t=[],r=0,e=n.length;r<e;r++)t.push(Mn(n.codePointAt(r)));return t}function Nn(){return M(arguments,function(n,t){return L(n,O(Ft[t]))},[])}function En(t,r){var e=r(Jn());n(x(Ft,t),"Invalid operator class "+t);var u=Ft[t];w(e,function(r,e){n(/^\$\w+$/.test(e),"Invalid operator name "+e),n(!x(u,e),e+" already exists for '"+t+"' operators")});var o={};switch(t){case ft:w(e,function(t,r){o[r]=function(t,e){return function(u,o){return t=t.bind(e),{test:function(e){var a=Tn(e,u),s=t(u,a,o);return n(i(s),r+" must return a boolean"),s}}}}(t,e)});break;case st:w(e,function(n,t){o[t]=function(n,t){return n=n.bind(t),function(t,r,e){var u=Tn(t,e);return n(e,u,r)}}(n,e)});break;default:w(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(Ft[t],o)}function Sn(n){Object.assign(Bt,n||{})}function In(){return Bt.key}function Cn(n,t){return f(n)?n[t]:void 0}function Pn(t,r,e){if($(Nn(ot),r))return kt[r](t,e);if(s(e)){var u={};return w(e,function(r,i){if(u[i]=Pn(t,i,e[i]),$(Nn(ot),i))return u=u[i],n(1===O(e).length,"Invalid $group expression '"+JSON.stringify(e)+"'"),!1}),u}}function Tn(n,t,r){function e(n,t){for(var r=n,i=0;i<t.length;i++){var o=t[i],a=null===o.match(/^\d+$/);if(a&&ct(r)){if(0===i&&u>0)break;u+=1,t=t.slice(i),r=M(r,function(n,r){var u=e(r,t);return void 0!==u&&n.push(u),n},[]);break}if(r=Cn(r,o),void 0===r)break}return r}var u=0;return r=r||{meta:!1},n=e(n,t.split(".")),r.meta?{result:n,depth:u}:n}function qn(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,s=void 0,f=void 0;try{ct(t)?o?(s=Cn(t,u),a&&(s=qn(s,i)),n(!d(s)),s=[s]):(s=[],w(t,function(n){f=qn(n,r),void 0!==f&&s.push(f)}),n(s.length>0)):(f=Cn(t,u),a&&(f=qn(f,i)),n(void 0!==f),s={},s[u]=f)}catch(c){s=void 0}return s}function Dn(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(ct(n)&&!/^\d+$/.test(i))w(n,function(n){Dn(n,t,r,e)});else{if(e===!0){var a=x(n,i);a&&!h(n[i])||(n[i]={})}Dn(n[i],o,r,e)}}function Ln(n,t,r){Dn(n,t,function(n,t){n[t]=r},!0)}function Rn(n,t){Dn(n,t,function(n,t){ct(n)&&/^\d+$/.test(t)?n.splice(parseInt(t),1):s(n)&&delete n[t]})}function Un(n){if($(ut,u(n)))return l(n)?{$regex:n}:{$eq:n};if(f(n)){var t=O(n),r=0===A(Nn(ft),t).length;if(r)return{$eq:n};if($(t,"$regex")){var e=n.$regex,i=n.$options||"",a="";o(e)&&(a+=e.ignoreCase||i.indexOf("i")>=0?"i":"",a+=e.multiline||i.indexOf("m")>=0?"m":"",a+=e.global||i.indexOf("g")>=0?"g":"",e=new RegExp(e,a)),n.$regex=e,delete n.$options}}return n}function Fn(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,$(Nn(it),e))return Ut[e](t,r,i);if($(Nn(ot),e))return t=Fn(t,r,null,i),n(ct(t),e+" expression must resolve to an array"),kt[e](t,null,i);if(o(r)&&r.length>0&&"$"===r[0]){if($(Jt,r))return zt[r](t,null,i);if($(Ht,r))return r;var a=Jt.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)),Tn(t,r.slice(1))}switch(u(r)){case tt:return r.map(function(n){return Fn(t,n)});case rt:var s={};return w(r,function(e,u){if(s[u]=Fn(t,e,u,i),$(Nn(it,ot),u))return n(1===O(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),s=s[u],!1}),s;default:return r}}function Bn(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return h(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 zn(n){var t=M(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(M(n.data,function(n,t){return n+Math.pow(t-u,2)},0)/(r-e))}function Yn(n,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};r.root=r.root||n;var e=Fn(n,t,null,r);return $(Ht,e)?Yt[e](n,t,r):e}function Jn(){return{assert:n,computeValue:Fn,clone:r,cloneDeep:t,each:w,err:k,getHash:T,getType:e,has:x,idKey:In,includes:$.bind(null),isArray:ct,isBoolean:i,isDate:c,isEmpty:b,isEqual:I,isFunction:v,isNil:h,isNull:p,isNumber:a,isObject:s,isRegExp:l,isString:o,isUndefined:d,keys:O,ops:Nn,resolve:Tn,resolveObj:qn,reduce:M}}var Hn="null",Vn="undefined",Kn="bool",Qn="boolean",Wn="number",Gn="string",Xn="date",Zn="regex",nt="regexp",tt="array",rt="object",et="function",ut=[Hn,Vn,Qn,Wn,Gn,Xn,nt],it="expression",ot="group",at="pipeline",st="projection",ft="query",ct=Array.isArray||function(n){return u(n)===tt},lt="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},vt=function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")},ht=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}}();B.isIterator=z;var pt=new Error,dt=1,$t=2,gt=3,mt=4,yt=function(){function n(t){if(vt(this,n),this.__iteratees=[],this.__first=!1,this.__done=!1,this.__buf=[],Y(t)&&(t={next:t}),z(t))t=function(n){return function(){var t=n.next();if(t.done)throw pt;return t.value}}(t);else if(Array.isArray(t))t=function(n){var t=n.length,r=0;return function(){if(r<t)return n[r++];throw pt}}(t);else if(!Y(t))throw new Error("Source is not iterable. Must be Array, Function or Object{next:Function}");this.next=H(t,this.__iteratees,this.__buf)}return ht(n,[{key:Symbol.iterator,value:function(){return this}},{key:"_validate",value:function(){if(this.__first)throw new Error("Cannot add iteratee/transform after `first()`")}},{key:"_push",value:function(n){return this._validate(),this.__iteratees.push(n),this}},{key:"map",value:function(n){return this._push({type:dt,func:n})}},{key:"filter",value:function(n){return this._push({type:$t,func:n})}},{key:"take",value:function(n){return n>0?this._push({type:gt,func:n}):this}},{key:"drop",value:function(n){return n>0?this._push({type:mt,func:n}):this}},{key:"transform",value:function(n){this._validate();var t=this,r=void 0;return B(function(){return r||(r=B(n(t.value()))),r.next()})}},{key:"first",value:function(){return this.take(1),this.__first=!0,this}},{key:"value",value:function(){return this.__done||(this.__done=this.next(this.__buf).done),this.__first?this.__buf[0]:this.__buf}},{key:"each",value:function(n){for(;;){var t=this.next();if(t.done)break;if(n(t.value)===!1)return!1}return!0}},{key:"reduce",value:function(n,t){var r=this.next(),e=0;for(void 0!==t||r.done||(t=r.value,r=this.next(),e++);!r.done;)t=n(t,r.value,e++),r=this.next();return t}},{key:"size",value:function(){return this.reduce(function(n,t){return++n},0)}}]),n}(),bt={$:function(n,t,r){k("$ not implemented")},$elemMatch:function(t,r,e){var u=Tn(t,e),i=new Mt(r);n(ct(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=Tn(t,e);return ct(u)?ct(r)?Bn(u,r[0],r[1]):(n(a(r),"$slice: invalid arguments for projection"),Bn(u,r)):u}},_t={$addFields:F,$bucket:V,$bucketAuto:K,$count:Q,$facet:W,$group:G,$limit:X,$lookup:Z,$match:nn,$out:tn,$project:rn,$redact:en,$replaceRoot:un,$sample:on,$skip:an,$sort:sn,$sortByCount:fn,$unwind:cn},xt=function(){function t(n){vt(this,t),this.__operators=n}return ht(t,[{key:"stream",value:function(t,r){return t=B(t),b(this.__operators)||w(this.__operators,function(e){var u=O(e);n(1===u.length&&$(Nn(at),u[0]),"Invalid aggregation operator "+u),u=u[0],t=r&&r instanceof Mt?_t[u].call(r,t,e[u]):_t[u](t,e[u])}),t}},{key:"run",value:function(n,t){return this.stream(n,t).value()}}]),t}(),kt={$addToSet:vn,$avg:hn,$first:pn,$last:dn,$mergeObjects:gn,$max:$n,$min:mn,$push:yn,$stdDevPop:bn,$stdDevSamp:_n,$sum:xn},Ot=function(){function n(t,r,e){vt(this,n),this.__filterFn=r.test.bind(r),this.__query=r,this.__source=t,this.__projection=e||r.__projection,this.__operators=[],this.__result=null,this.__stack=[]}return ht(n,[{key:"_fetch",value:function(){return this.__result?this.__result:(s(this.__projection)&&this.__operators.push({$project:this.__projection}),this.__result=B(this.__source).filter(this.__filterFn),this.__operators.length>0&&(this.__result=new xt(this.__operators).stream(this.__result,this.__query)),this.__result)}},{key:"all",value:function(){return this._fetch().value()}},{key:"count",value:function(){return this.all().length}},{key:"skip",value:function(n){return this.__operators.push({$skip:n}),this}},{key:"limit",value:function(n){return this.__operators.push({$limit:n}),this}},{key:"sort",value:function(n){return this.__operators.push({$sort:n}),this}},{key:"next",value:function(){if(this.__stack){if(this.__stack.length>0)return this.__stack.pop();var n=this._fetch().next();return n.done?void(this.__stack=null):n.value}}},{key:"hasNext",value:function(){if(!this.__stack)return!1;if(this.__stack.length>0)return!0;var n=this._fetch().next();return n.done?this.__stack=null:this.__stack.push(n.value),!!this.__stack}},{key:"map",value:function(n){return this._fetch().map(n).value()}},{key:"forEach",value:function(n){this._fetch().each(n)}},{key:Symbol.iterator,value:function(){return this._fetch()}}]),n}(),wt={$eq:function(n,t){if(I(n,t))return!0;if(h(n)&&h(t))return!0;if(ct(n)){var r=I.bind(null,t);return n.some(r)||E(n,1).some(r)}return!1},$ne:function(n,t){return!this.$eq(n,t)},$in:function(n,t){return A(_(n),t).length>0},$nin:function(n,t){return h(n)||!this.$in(n,t)},$lt:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n<t}))},$lte:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n<=t}))},$gt:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n>t}))},$gte:function(n,t){return!d(_(n).find(function(n){return kn(n,t)&&n>=t}))},$mod:function(n,t){return!d(_(n).find(function(n){return a(n)&&ct(t)&&2===t.length&&n%t[0]===t[1]}))},$regex:function(n,t){n=_(n);var r=function(n){return o(n)&&!!n.match(t)};return n.some(r)||E(n,1).some(r)},$exists:function(n,t){return(t===!1||0===t)&&h(n)||(t===!0||1===t)&&!h(n)},$all:function(n,t){var r=!1;if(ct(n)&&ct(t))for(var e=0,u=t.length;e<u;e++){if(!s(t[e])||!$(O(t[e]),"$elemMatch"))return A(t,n).length===u;r=r||this.$elemMatch(n,t[e].$elemMatch)}return r},$size:function(n,t){return ct(n)&&a(t)&&n.length===t},$elemMatch:function(n,t){if(ct(n)&&!b(n))for(var r=new Mt(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)&&(n+"").indexOf(".")!==-1;case 2:case Gn:return o(n);case 3:case rt:return s(n);case 4:case tt:return ct(n);case 6:case Vn:return h(n);case 8:case Kn:return i(n);case 9:case Xn:return c(n);case 10:case Hn:return p(n);case 11:case Zn:return l(n);case 16:case"int":return a(n)&&n<=2147483647&&(n+"").indexOf(".")===-1;case 18:case"long":return a(n)&&n>2147483647&&n<=0x8000000000000000&&(n+"").indexOf(".")===-1;case 19:case"decimal":return a(n);default:return!1}}},jt={$and:function(t,r){n(ct(r),"Invalid expression: $and expects value to be an Array");var e=[];return w(r,function(n){return e.push(new Mt(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(ct(r),"Invalid expression. $or expects value to be an Array");var e=[];return w(r,function(n){return e.push(new Mt(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(ct(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]=Un(t);var e=new Mt(r);return{test:function(n){return!e.test(n)}}},$where:function(n,t){return v(t)||(t=new Function("return "+t+";")),{test:function(n){return t.call(n)===!0}}},$expr:function(n,t){return{test:function(n){return Fn(n,t)}}}};w(wt,function(n,t){jt[t]=function(n,t){return n=n.bind(t),function(t,r){return{test:function(e){var u=Tn(e,t,{meta:!0});return u=S(u.result,u.depth),n(u,r)}}}}(n,wt)});var Mt=function(){function t(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};vt(this,t),this.__criteria=n,this.__projection=r,this.__compiled=[],this._compile()}return ht(t,[{key:"_compile",value:function(){var t=this;if(!b(this.__criteria)){n(s(this.__criteria),"Criteria must be of type Object");var r=void 0;w(this.__criteria,function(n,e){"$where"===e?r={field:e,expr:n}:"$expr"===e?t._processOperator(e,e,n):$(["$and","$or","$nor"],e)?t._processOperator(e,e,n):(n=Un(n),w(n,function(n,r){t._processOperator(e,r,n)})),s(r)&&t._processOperator(r.field,r.field,r.expr)})}}},{key:"_processOperator",value:function(t,r,e){n($(Nn(ft),r),"Invalid query operator '"+r+"' detected"),this.__compiled.push(jt[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 Ot(n,this,t)}},{key:"remove",value:function(n){var t=this;return M(n,function(n,r){return t.test(r)||n.push(r),n},[])}}]),t}(),At={$abs:function(n,t){var r=Fn(n,t);return null===r||void 0===r?null:Math.abs(r)},$add:function(t,r){var e=Fn(t,r),u=!1,i=M(e,function(t,r){return c(r)&&(n(!u,"'$add' can only have one date value"),u=!0,r=r.getTime()),t+=r},0);return u?new Date(i):i},$ceil:function(t,r){var e=Fn(t,r);return h(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=Fn(n,t);return r[0]/r[1]},$exp:function(t,r){var e=Fn(t,r);return h(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=Fn(t,r);return h(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=Fn(t,r);return h(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=Fn(t,r);return n(ct(e)&&2===e.length,"$log must be a valid expression that resolves to an array of 2 items"),e.some(h)?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=Fn(t,r);return h(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=Fn(n,t);return r[0]%r[1]},$multiply:function(n,t){var r=Fn(n,t);return M(r,function(n,t){return n*t},1)},$pow:function(t,r){var e=Fn(t,r);return n(ct(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=Fn(t,r);return h(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=Fn(n,t);return r[0]-r[1]},$trunc:function(t,r){var e=Fn(t,r);return h(e)?null:(n(a(e)||isNaN(e),"$trunc expression must resolve to a number."),Math.trunc(e))}},Nt={$arrayElemAt:function(t,r){var e=Fn(t,r);n(ct(e)&&2===e.length,"$arrayElemAt expression must resolve to an array of 2 elements"),n(ct(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=Fn(t,r);return n(ct(e),"$arrayToObject expression must resolve to an array"),M(e,function(t,r){return ct(r)&&2==r.length?t[r[0]]=r[1]:(n(s(r)&&x(r,"k")&&x(r,"v"),"$arrayToObject expression is invalid."),t[r.k]=r.v),t},{})},$concatArrays:function(t,r){var e=Fn(t,r,null);return n(ct(e),"$concatArrays must resolve to an array"),e.some(h)?null:e.reduce(function(n,t){return L(n,t)},[])},$filter:function(t,r){var e=Fn(t,r.input),u=r.as,i=r.cond;return n(ct(e),"$filter 'input' expression must resolve to an array"),e.filter(function(n){var t={};return t["$"+u]=n,Fn(t,i)===!0})},$in:function(t,r){var e=Fn(t,r[0]),u=Fn(t,r[1]);return n(ct(u),"$in second argument must be an array"),$(u,e)},$indexOfArray:function(t,r){var e=Fn(t,r);if(h(e))return null;var u=e[0],i=e[1];if(h(u))return null;n(ct(u),"$indexOfArray expression must resolve to an array.");var o=e[2]||0,a=e[3];return h(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(I.bind(null,i))+o)},$isArray:function(n,t){return ct(Fn(n,t[0]))},$map:function(t,r){var e=Fn(t,r.input);n(ct(e),"$map 'input' expression must resolve to an array");var u=r.as,i=r["in"],o="$"+u;return e.map(function(n){return t[o]=n,Fn(t,i)})},$objectToArray:function(t,r){var e=Fn(t,r);n(s(e),"$objectToArray expression must resolve to an object");var u=[];return w(e,function(n,t){return u.push({k:t,v:n})}),u},$range:function(n,t){for(var r=Fn(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=Fn(t,r.input),u=Fn(t,r.initialValue),i=r["in"];return h(e)?null:(n(ct(e),"$reduce 'input' expression must resolve to an array"),M(e,function(n,t){return Fn({$value:n,$this:t},i)},u))},$reverseArray:function(t,r){var e=Fn(t,r);if(h(e))return null;n(ct(e),"$reverseArray expression must resolve to an array");var u=[];return L(u,e),u.reverse(),u},$size:function(n,t){var r=Fn(n,t);return ct(r)?r.length:void 0},$slice:function(n,t){var r=Fn(n,t);return Bn(r[0],r[1],r[2])},$zip:function(t,r){var e=Fn(t,r.inputs),u=r.useLongestLength||!1;n(ct(e),"'inputs' expression must resolve to an array"),n(i(u),"'useLongestLength' must be a boolean"),ct(r.defaults)&&n(m(u),"'useLongestLength' must be set to true to use 'defaults'");for(var o=0,a=0,s=e.length;a<s;a++){var f=e[a];if(h(f))return null;n(ct(f),"'inputs' expression values must resolve to an array or null"),o=u?Math.max(o,f.length):Math.min(o||f.length,f.length)}for(var c=[],l=r.defaults||[],v=function(n){var t=e.map(function(t,r){return h(t[n])?l[r]||null:t[n]});c.push(t)},p=0;p<o;p++)v(p);return c},$mergeObjects:function(n,t){var r=Fn(n,t);return ct(r)?M(r,function(n,t){return Object.assign(n,t)},{}):{}}},Et={$and:function(n,t){var r=Fn(n,t);return m(r)&&r.every(m)},$or:function(n,t){var r=Fn(n,t);return m(r)&&r.some(m)},$not:function(n,t){return!Fn(n,t[0])}},St={$cmp:function(n,t){var r=Fn(n,t);return r[0]>r[1]?1:r[0]<r[1]?-1:0}};w(["$eq","$ne","$gt","$gte","$lt","$lte","$nin"],function(n){St[n]=function(t,r){var e=Fn(t,r);return wt[n](e[0],e[1])}});var It={$cond:function(t,r){var e=void 0,u=void 0,i=void 0,o="$cond: invalid arguments";ct(r)?(n(3===r.length,o),e=r[0],u=r[1],i=r[2]):(n(s(r),o),e=r["if"],u=r.then,i=r["else"]);var a=Fn(t,e);return a?Fn(t,u):Fn(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),Fn(t,r["case"])});return u?Fn(t,u.then):(n(r["default"],e),Fn(t,r["default"]))},$ifNull:function(t,r){n(ct(r)&&2===r.length,"Invalid arguments for $ifNull operator");var e=Fn(t,r);return h(e[0])?e[1]:e[0]}},Ct={"%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],"%%":"%"},Pt={$dayOfYear:function(n,t){var r=Fn(n,t),e=new Date(r.getFullYear(),0,0),u=r-e,i=864e5;return Math.round(u/i)},$dayOfMonth:function(n,t){var r=Fn(n,t);return r.getDate()},$dayOfWeek:function(n,t){var r=Fn(n,t);return r.getDay()+1},$year:function(n,t){var r=Fn(n,t);return r.getFullYear()},$month:function(n,t){var r=Fn(n,t);return r.getMonth()+1},$week:function(n,t){var r=Fn(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){var r=Fn(n,t);return r.getUTCHours()},$minute:function(n,t){var r=Fn(n,t);return r.getMinutes()},$second:function(n,t){var r=Fn(n,t);return r.getSeconds()},$millisecond:function(n,t){var r=Fn(n,t);return r.getMilliseconds()},$dateToString:function(n,t){for(var r=t.format,e=Fn(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=Ct[u[i]],s=a;if(ct(a)){var f=this[a[0]].bind(this),c=a[1];s=jn(f(n,e),c)}r=r.replace(u[i],s)}return r}},Tt={$literal:function(n,t){return t}},qt={$setEquals:function(n,t){var r=Fn(n,t),e=C(r[0]),u=C(r[1]);return e.length===u.length&&e.length===A(e,u).length},$setIntersection:function(n,t){var r=Fn(n,t);return A(r[0],r[1])},$setDifference:function(n,t){var r=Fn(n,t);return r[0].filter(g.bind(null,r[1]))},$setUnion:function(n,t){var r=Fn(n,t);return N(r[0],r[1])},$setIsSubset:function(n,t){ | ||
var r=Fn(n,t);return A(r[0],r[1]).length===r[0].length},$anyElementTrue:function(n,t){var r=Fn(n,t)[0];return r.some(m)},$allElementsTrue:function(n,t){var r=Fn(n,t)[0];return r.every(m)}},Dt={$concat:function(n,t){var r=Fn(n,t);return[null,void 0].some($.bind(null,r))?null:r.join("")},$indexOfBytes:function(t,r){var e=Fn(t,r),u="$indexOfBytes: expression resolves to invalid arguments";if(h(e[0]))return null;n(o(e[0])&&o(e[1]),u);var i=e[0],s=e[1],f=e[2],c=e[3],l=h(f)||a(f)&&f>=0&&Math.round(f)===f;if(l=l&&(h(c)||a(c)&&c>=0&&Math.round(c)===c),n(l,u),f=f||0,c=c||i.length,f>c)return-1;var v=i.substring(f,c).indexOf(s);return v>-1?v+f:v},$split:function(t,r){var e=Fn(t,r);return h(e[0])?null:(n(e.every(o),"$split: invalid argument"),e[0].split(e[1]))},$strLenBytes:function(n,t){return~-encodeURI(Fn(n,t)).split(/%..|./).length},$strLenCP:function(n,t){return Fn(n,t).length},$strcasecmp:function(t,r){var e=Fn(t,r),u=e[0],i=e[1];return I(u,i)||e.every(h)?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=Fn(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 f=An(u),c=[],l=0,v=0;v<f.length;v++)c.push(l),l+=f[v].length;var h=c.indexOf(i),p=c.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=Fn(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=Fn(n,t);return b(r)?"":r.toLowerCase()},$toUpper:function(n,t){var r=Fn(n,t);return b(r)?"":r.toUpperCase()}},Lt=[192,224,240],Rt={$let:function(n,t){var r=t.vars,e=t["in"],u=O(r);return w(u,function(t){var e=Fn(n,r[t]),u="$"+t;n[u]=e}),Fn(n,e)}},Ut=Object.assign({},At,Nt,Et,St,It,Pt,Tt,qt,Dt,Rt),Ft={expression:Ut,group:kt,pipeline:_t,projection:bt,query:jt},Bt={key:"_id"},zt={$$ROOT:function(n,t,r){return r.root},$$CURRENT:function(n,t,r){return n}},Yt={$$KEEP:function(n){return n},$$PRUNE:function(){},$$DESCEND:function(n,t,r){if(!x(t,"$cond"))return n;var e=void 0;return w(n,function(u,i){f(u)&&(ct(u)?(e=[],w(u,function(n){s(n)&&(n=Yn(n,t,r)),h(n)||e.push(n)})):e=Yn(u,t,r),h(e)?delete n[i]:n[i]=e)}),n}},Jt=O(zt),Ht=O(Yt),Vt={query:function(n,t){return new Mt(n).find(this.toJSON(),t)},aggregate:function(n){return new xt(n).run(this.toJSON())}},Kt="2.2.2",Qt={_internal:Jn,Aggregator:xt,CollectionMixin:Vt,Cursor:Ot,Lazy:B,OP_EXPRESSION:it,OP_GROUP:ot,OP_PIPELINE:at,OP_PROJECTION:st,OP_QUERY:ft,Query:Mt,VERSION:Kt,addOperators:En,aggregate:ln,find:On,remove:wn,setup:Sn};return Qt}); | ||
//# sourceMappingURL=dist/mingo.min.map |
@@ -10,3 +10,3 @@ import { OP_EXPRESSION, OP_GROUP, OP_PIPELINE, OP_PROJECTION, OP_QUERY } from './lib/constants' | ||
const VERSION = '2.2.1' | ||
const VERSION = '2.2.2' | ||
@@ -13,0 +13,0 @@ // mingo! |
@@ -1,3 +0,3 @@ | ||
import { assert, clone, each, isArray, isEmpty, isString } from '../../util' | ||
import { getValue } from '../../internal' | ||
import { assert, clone, each, isArray, isEmpty, isString, cloneDeep } from '../../util' | ||
import { resolve, setValue, removeValue } from '../../internal' | ||
import { Lazy } from '../../lazy' | ||
@@ -44,3 +44,3 @@ | ||
// get the value of the field to unwind | ||
value = getValue(obj, field) | ||
value = resolve(obj, field) | ||
@@ -51,4 +51,4 @@ // throw error if value is not an array??? | ||
value = null // reset unwind value | ||
let tmp = clone(obj) | ||
delete tmp[field] | ||
let tmp = cloneDeep(obj) | ||
removeValue(tmp, field) | ||
return { value: format(tmp, null), done: false } | ||
@@ -58,4 +58,4 @@ } else { | ||
value = Lazy(value).map((item, i) => { | ||
let tmp = clone(obj) | ||
tmp[field] = item | ||
let tmp = cloneDeep(obj) | ||
setValue(tmp, field, item) | ||
return format(tmp, i) | ||
@@ -65,3 +65,3 @@ }) | ||
} else if (!isEmpty(value) || preserveNullAndEmptyArrays === true) { | ||
let tmp = format(clone(obj), null) | ||
let tmp = format(cloneDeep(obj), null) | ||
return { value: tmp, done: false } | ||
@@ -68,0 +68,0 @@ } |
{ | ||
"name": "mingo", | ||
"version": "2.2.1", | ||
"version": "2.2.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
441834