Comparing version 2.2.5 to 2.2.6
Changelog | ||
========= | ||
## 2.2.6 / 2018-11-22 | ||
- Update `mergeObjects` to handle more use cases. | ||
## 2.2.5 / 2018-11-21 | ||
@@ -4,0 +7,0 @@ - Fix merge objects to project subdocuments correctly. Fixes #91 |
@@ -1,6 +0,6 @@ | ||
// mingo.js 2.2.5 | ||
// mingo.js 2.2.6 | ||
// 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 rt:return n.map(t);case et:return M(n,t);default:return n}}function r(n){switch(u(n)){case rt:return L([],n);case et: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)===Wn}function o(n){return u(n)===Xn}function a(n){return u(n)===Gn}function s(n){return u(n)===et}function f(n){return n===Object(n)}function c(n){return u(n)===Zn}function l(n){return u(n)===tt}function v(n){return u(n)===ut}function h(n){return p(n)||d(n)}function p(n){return null===n}function d(n){return void 0===n}function $(n,t){return n.some(P.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)||lt(n)&&0===n.length||s(n)&&0===O(n).length||!n}function _(n){return lt(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),lt(n))for(var e=0,u=n.length;e<u&&t(n[e],e,n)!==!1;e++);else for(var i in n)if(n.hasOwnProperty(i)&&t(n[i],i,n)===!1)break}function M(n,t,r){t=t.bind(r);for(var e={},u=O(n),i=0;i<u.length;i++){var o=u[i];e[o]=t(n[o],o)}return e}function j(){for(var n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];for(var e=t[0],u=1;u<t.length;u++)for(var i=t[u],o=O(i),a=0;a<o.length;a++){var f=o[a];s(e[f])||lt(e[f])?e[f]=j(e[f],i[f]):Ln(e,f,i[f])}return e}function A(n,t,r){return lt(n)?n.reduce(t,r):(w(n,function(e,u){return r=t(r,e,u,n)}),r)}function N(n,t){return n.filter($.bind(null,t))}function E(n,t){return L(L([],n),t.filter(g.bind(null,n)))}function S(t){function r(n,t){for(var e=0,i=n.length;e<i;e++)lt(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(lt(t),"Input must be an Array");var u=[];return r(t,e),u}function I(n,t){if(t<1)return n;for(;t--&<(n)&&1===n.length;)n=n[0];return n}function P(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===ut)return!1;switch(i){case rt:if(n.length!==t.length)return!1;L(r,n),L(e,t);break;case et: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(T(n)!==T(t))return!1}}return 0===r.length}function C(n){var t={},r=[];return w(n,function(n){var e=q(n);x(t,e)||(r.push(n),t[e]=0)}),r}function T(n){var t=u(n);switch(t){case Wn:case Gn:case tt:return n.toString();case Xn:return JSON.stringify(n);case Zn:return n.toISOString();case Vn:case Kn:return t;case rt:return"["+n.map(T)+"]";default:var r=t===et?"":""+e(n),i=O(n);return i.sort(),r+"{"+i.map(function(t){return T(t)+":"+T(n[t])})+"}"}}function q(n){for(var t=0,r=T(n),e=r.length;e;)t=(t<<5)-t^r.charCodeAt(--e);return t>>>0}function R(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=q(s);x(e,c)||(e[c]=[f,a]),u.push(s)}}return u.sort(function(n,t){var r=e[q(n)],u=e[q(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=q(r),o=-1;void 0===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 U(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=q(u);return x(r,o)||(r[o]=n.apply(t,u)),r[o]}}({})}function B(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=Bn(n,r[t]);Ln(u,t,e)}),u})}function z(n){return n instanceof kt?n:new kt(n)}function Y(n){return!!n&&"object"===("undefined"==typeof n?"undefined":dt(n))&&J(n.next)}function J(n){return!!n&&"function"==typeof n}function H(n,t){var r=n.slice(t+1);n.splice(t),Array.prototype.push.apply(n,r)}function V(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 yt:s=h(s,u);break;case bt:if(!h(s,u))continue n;break;case _t:--v.func,v.func||(l=!0);break;case xt:--v.func,v.func||H(t,f);continue n;default:break n}}if(e=l,!a)return{value:s,done:!1};r[o++]=s}}catch(d){if(d!==mt)throw d}return i=null,e=!0,{done:!0}}}function K(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 z(function(){return p||(t.each(function(t){var e=Bn(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=U(u,e),f=u[Math.max(0,s-1)];v[f].push(t)}}),u.pop(),h(i)||u.push(i),p=z(u).map(function(n){var t=Tn(v[n],null,s);return Object.assign(t,{_id:n})})),p.next()})}function Q(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=F(Bn),o={},a=[],s=R(n,function(n){var t=r(n,u);return h(t)?a.push(n):(o[t]||(o[t]=[]),o[t].push(n)),t}),f=Pn(),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(Tn($,null,e),{_id:d}))}return c.length>0&&(c[c.length-1][f].max=r(s[s.length-1],u)),c})}function W(t,r){return n(o(r)&&""!==r.trim()&&r.indexOf(".")===-1&&"$"!==r.trim()[0],"Invalid expression value for $count"),z(function(){var n={};return n[r]=t.size(),{value:n,done:!1}}).first()}function G(n,t){return n.transform(function(n){return[M(t,function(t){return vn(n,t)})]}).first()}function X(n,t){var r=Pn(),e=t[r];return n.transform(function(n){var u=D(n,function(n){return Bn(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 void 0!==n&&(e[r]=n),w(t,function(n,t){e[t]=Tn(u.groups[i],t,n)}),{value:e,done:!1}}})}function Z(n,t){return n.take(t)}function nn(t,e){function u(n){return q(h(n)?null:n)}var i=e.from,a=e.localField,s=e.foreignField,f=e.as;n(lt(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 tn(n,t){var r=new At(t);return n.filter(function(n){return r.test(n)})}function rn(t,r){return n(lt(r),"$out: argument must be an array"),t.map(function(n){return r.push(n),n})}function en(r,e){if(b(e))return r;var u=O(e),i=!1,f=Pn(),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=Bn(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],$(En(ft),h)?"$slice"===h?_(u[h]).every(a)?(i=Ot[h](n,u[h],t),c=!0):i=Bn(n,u,t):i=Ot[h](n,u[h],t):i=Bn(n,u,t)}var p=Rn(n,t);void 0!==p&&j(r,p),g([0,1,!1,!0],u)&&(void 0===i?Un(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 Un(r,n)}))),r})}function un(n,r){return n.map(function(n){return Jn(t(n),r)})}function on(t,r){return t.map(function(t){return t=Bn(t,r.newRoot),n(s(t),"$replaceRoot expression must return an object"),t})}function an(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 sn(n,t){return n.drop(t)}function fn(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 qn(n,r)}),u={},i=R(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 cn(n,t){var r={count:{$sum:1}};return r[Pn()]=t,this.$sort(this.$group(n,r),{count:-1})}function ln(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 z(function(){for(var r=function(){if(z.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=qn(u,e),lt(s)){if(0===s.length&&i===!0){s=null;var o=t(u);return Un(o,e),{v:{value:a(o,null),done:!1}}}s=z(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":dt(u)))return u.v}})}function vn(t,r){return n(lt(r),"Aggregation pipeline must be an array"),new Mt(r).run(t)}function hn(n,t,r){return new At(t).find(n,r)}function pn(n,t){return new At(t).remove(n)}function dn(n,t){return e(n)===e(t)}function $n(n,t){return new Array(Math.max(t-String(n).length+1,0)).join("0")+n}function gn(n){if(n<128)return[n];for(var t=n<2048&&1||n<65536&&2||3,r=Dt[t-1],e=[(n>>6*t)+r];t>0;)e.push(128|n>>6*--t&63);return e}function mn(n){for(var t=[],r=0,e=n.length;r<e;r++)t.push(gn(n.codePointAt(r)));return t}function yn(n,t){return C(this.$push(n,t))}function bn(n,t){var r=this.$push(n,t).filter(a),e=A(r,function(n,t){return n+t},0);return e/(r.length||1)}function _n(n,t){return n.length>0?Bn(n[0],t):void 0}function xn(n,t){return n.length>0?Bn(n[n.length-1],t):void 0}function kn(n,t){return A(this.$push(n,t),function(n,t){return h(n)||t>n?t:n},void 0)}function On(n,t){return A(n,function(n,r){return Object.assign(n,Bn(r,t))},{})}function wn(n,t){return A(this.$push(n,t),function(n,t){return h(n)||t<n?t:n},void 0)}function Mn(n,t){return h(t)?n:n.map(function(n){return Bn(n,t)})}function jn(n,t){return Yn({data:this.$push(n,t).filter(a),sampled:!1})}function An(n,t){return Yn({data:this.$push(n,t).filter(a),sampled:!0})}function Nn(n,t){return lt(n)?a(t)?n.length*t:A(this.$push(n,t).filter(a),function(n,t){return n+t},0):0}function En(){return A(arguments,function(n,t){return L(n,O(Bt[t]))},[])}function Sn(t,r){var e=r(Hn());n(x(Bt,t),"Invalid operator class "+t);var u=Bt[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 ct:w(e,function(t,r){o[r]=function(t,e){return function(u,o){return t=t.bind(e),{test:function(e){var a=qn(e,u),s=t(u,a,o);return n(i(s),r+" must return a boolean"),s}}}}(t,e)});break;case ft:w(e,function(n,t){o[t]=function(n,t){return n=n.bind(t),function(t,r,e){var u=qn(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(Bt[t],o)}function In(n){Object.assign(zt,n||{})}function Pn(){return zt.key}function Cn(n,t){return f(n)?n[t]:void 0}function Tn(t,r,e){if($(En(at),r))return Ft[r](t,e);if(s(e)){var u={};return w(e,function(r,i){if(u[i]=Tn(t,i,e[i]),$(En(at),i))return u=u[i],n(1===O(e).length,"Invalid $group expression '"+JSON.stringify(e)+"'"),!1}),u}}function qn(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&<(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(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 Rn(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{lt(t)?o?(s=Cn(t,u),a&&(s=Rn(s,i)),n(void 0!==s),s=[s]):(s=[],w(t,function(n){f=Rn(n,r),void 0!==f&&s.push(f)}),n(s.length>0)):(f=Cn(t,u),a&&(f=Rn(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(".");1===u.length?r(n,i):(e===!0&&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 Un(n,t){Dn(n,t,function(n,t){lt(n)&&/^\d+$/.test(t)?n.splice(parseInt(t),1):s(n)&&delete n[t]})}function Fn(n){if($(it,u(n)))return l(n)?{$regex:n}:{$eq:n};if(f(n)){var t=O(n),r=0===N(En(ct),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 Bn(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,$(En(ot),e))return Ut[e](t,r,i);if($(En(at),e))return t=Bn(t,r,null,i),n(lt(t),e+" expression must resolve to an array"),Ft[e](t,null,i);if(o(r)&&r.length>0&&"$"===r[0]){if($(Ht,r))return Yt[r](t,null,i);if($(Vt,r))return r;var a=Ht.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)),qn(t,r.slice(1))}switch(u(r)){case rt:return r.map(function(n){return Bn(t,n)});case et:var s={};return w(r,function(e,u){if(s[u]=Bn(t,e,u,i),$(En(ot,at),u))return n(1===O(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),s=s[u],!1}),s;default:return r}}function zn(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 Yn(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 Jn(n,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};r.root=r.root||n;var e=Bn(n,t,null,r);return $(Vt,e)?Jt[e](n,t,r):e}function Hn(){return{assert:n,computeValue:Bn,clone:r,cloneDeep:t,each:w,err:k,getHash:q,getType:e,has:x,idKey:Pn,includes:$.bind(null),isArray:lt,isBoolean:i,isDate:c,isEmpty:b,isEqual:P,isFunction:v,isNil:h,isNull:p,isNumber:a,isObject:s,isRegExp:l,isString:o,isUndefined:d,keys:O,ops:En,resolve:qn,resolveObj:Rn,reduce:A}}var Vn="null",Kn="undefined",Qn="bool",Wn="boolean",Gn="number",Xn="string",Zn="date",nt="regex",tt="regexp",rt="array",et="object",ut="function",it=[Vn,Kn,Wn,Gn,Xn,Zn,tt],ot="expression",at="group",st="pipeline",ft="projection",ct="query",lt=Array.isArray||function(n){return u(n)===rt},vt={$abs:function(n,t){var r=Bn(n,t);return null===r||void 0===r?null:Math.abs(r)},$add:function(t,r){var e=Bn(t,r),u=!1,i=A(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=Bn(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=Bn(n,t);return r[0]/r[1]},$exp:function(t,r){var e=Bn(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=Bn(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=Bn(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=Bn(t,r);return n(lt(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=Bn(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=Bn(n,t);return r[0]%r[1]},$multiply:function(n,t){var r=Bn(n,t);return A(r,function(n,t){return n*t},1)},$pow:function(t,r){var e=Bn(t,r);return n(lt(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=Bn(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=Bn(n,t);return r[0]-r[1]},$trunc:function(t,r){var e=Bn(t,r);return h(e)?null:(n(a(e)||isNaN(e),"$trunc expression must resolve to a number."),Math.trunc(e))}},ht={$arrayElemAt:function(t,r){var e=Bn(t,r);n(lt(e)&&2===e.length,"$arrayElemAt expression must resolve to an array of 2 elements"),n(lt(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=Bn(t,r);return n(lt(e),"$arrayToObject expression must resolve to an array"),A(e,function(t,r){return lt(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=Bn(t,r,null);return n(lt(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=Bn(t,r.input),u=r.as,i=r.cond;return n(lt(e),"$filter 'input' expression must resolve to an array"),e.filter(function(n){var t={};return t["$"+u]=n,Bn(t,i)===!0})},$in:function(t,r){var e=Bn(t,r[0]),u=Bn(t,r[1]);return n(lt(u),"$in second argument must be an array"),$(u,e)},$indexOfArray:function(t,r){var e=Bn(t,r);if(h(e))return null;var u=e[0],i=e[1];if(h(u))return null;n(lt(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(P.bind(null,i))+o)},$isArray:function(n,t){return lt(Bn(n,t[0]))},$map:function(t,r){var e=Bn(t,r.input);n(lt(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,Bn(t,i)})},$objectToArray:function(t,r){var e=Bn(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=Bn(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=Bn(t,r.input),u=Bn(t,r.initialValue),i=r["in"];return h(e)?null:(n(lt(e),"$reduce 'input' expression must resolve to an array"),A(e,function(n,t){return Bn({$value:n,$this:t},i)},u))},$reverseArray:function(t,r){var e=Bn(t,r);if(h(e))return null;n(lt(e),"$reverseArray expression must resolve to an array");var u=[];return L(u,e),u.reverse(),u},$size:function(n,t){var r=Bn(n,t);return lt(r)?r.length:void 0},$slice:function(n,t){var r=Bn(n,t);return zn(r[0],r[1],r[2])},$zip:function(t,r){var e=Bn(t,r.inputs),u=r.useLongestLength||!1;n(lt(e),"'inputs' expression must resolve to an array"),n(i(u),"'useLongestLength' must be a boolean"),lt(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(lt(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=Bn(n,t);return lt(r)?A(r,function(n,t){return Object.assign(n,t)},{}):{}}},pt={$and:function(n,t){var r=Bn(n,t);return m(r)&&r.every(m)},$or:function(n,t){var r=Bn(n,t);return m(r)&&r.some(m)},$not:function(n,t){return!Bn(n,t[0])}},dt="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},$t=function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")},gt=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}}();z.isIterator=Y;var mt=new Error,yt=1,bt=2,_t=3,xt=4,kt=function(){function n(t){if($t(this,n),this.__iteratees=[],this.__first=!1,this.__done=!1,this.__buf=[],J(t)&&(t={next:t}),Y(t))t=function(n){return function(){var t=n.next();if(t.done)throw mt;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 mt}}(t);else if(!J(t))throw new Error("Source is not iterable. Must be Array, Function or Object{next:Function}");this.next=V(t,this.__iteratees,this.__buf)}return gt(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:yt,func:n})}},{key:"filter",value:function(n){return this._push({type:bt,func:n})}},{key:"take",value:function(n){return n>0?this._push({type:_t,func:n}):this}},{key:"drop",value:function(n){return n>0?this._push({type:xt,func:n}):this}},{key:"transform",value:function(n){this._validate();var t=this,r=void 0;return z(function(){return r||(r=z(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}(),Ot={$:function(n,t,r){k("$ not implemented")},$elemMatch:function(t,r,e){var u=qn(t,e),i=new At(r);n(lt(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=qn(t,e);return lt(u)?lt(r)?zn(u,r[0],r[1]):(n(a(r),"$slice: invalid arguments for projection"),zn(u,r)):u}},wt={$addFields:B,$bucket:K,$bucketAuto:Q,$count:W,$facet:G,$group:X,$limit:Z,$lookup:nn,$match:tn,$out:rn,$project:en,$redact:un,$replaceRoot:on,$sample:an,$skip:sn,$sort:fn,$sortByCount:cn,$unwind:ln},Mt=function(){function t(n){$t(this,t),this.__operators=n}return gt(t,[{key:"stream",value:function(t,r){return t=z(t),b(this.__operators)||w(this.__operators,function(e){var u=O(e);n(1===u.length&&$(En(st),u[0]),"Invalid aggregation operator "+u),u=u[0],t=r&&r instanceof At?wt[u].call(r,t,e[u]):wt[u](t,e[u])}),t}},{key:"run",value:function(n,t){return this.stream(n,t).value()}}]),t}(),jt=function(){function n(t,r,e){$t(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 gt(n,[{key:"_fetch",value:function(){return this.__result?this.__result:(s(this.__projection)&&this.__operators.push({$project:this.__projection}),this.__result=z(this.__source).filter(this.__filterFn),this.__operators.length>0&&(this.__result=new Mt(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}(),At=function(){function t(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};$t(this,t),this.__criteria=n,this.__projection=r,this.__compiled=[],this._compile()}return gt(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=Fn(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($(En(ct),r),"Invalid query operator '"+r+"' detected"),this.__compiled.push(Et[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 jt(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}(),Nt={$eq:function(n,t){if(P(n,t))return!0;if(h(n)&&h(t))return!0;if(lt(n)){var r=P.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 h(n)?t.some(p):N(_(n),t).length>0},$nin:function(n,t){return!this.$in(n,t)},$lt:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n<t})},$lte:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n<=t})},$gt:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n>t})},$gte:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n>=t})},$mod:function(n,t){return void 0!==_(n).find(function(n){return a(n)&<(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)||S(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(lt(n)&<(t))for(var e=0,u=t.length;e<u;e++){if(!s(t[e])||!$(O(t[e]),"$elemMatch"))return N(t,n).length===u;r=r||this.$elemMatch(n,t[e].$elemMatch)}return r},$size:function(n,t){return lt(n)&&a(t)&&n.length===t},$elemMatch:function(n,t){if(lt(n)&&!b(n))for(var r=new At(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 Xn:return o(n);case 3:case et:return s(n);case 4:case rt:return lt(n);case 6:case Kn:return h(n);case 8:case Qn:return i(n);case 9:case Zn:return c(n);case 10:case Vn:return p(n);case 11:case nt: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}}},Et={$and:function(t,r){n(lt(r),"Invalid expression: $and expects value to be an Array");var e=[];return w(r,function(n){return e.push(new At(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(lt(r),"Invalid expression. $or expects value to be an Array");var e=[];return w(r,function(n){return e.push(new At(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(lt(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]=Fn(t);var e=new At(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 Bn(n,t)}}}};w(Nt,function(n,t){Et[t]=function(n,t){return n=n.bind(t),function(t,r){return{test:function(e){var u=qn(e,t,{meta:!0});return u=I(u.result,u.depth),n(u,r)}}}}(n,Nt)});var St={$cmp:function(n,t){var r=Bn(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=Bn(t,r);return Nt[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";lt(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=Bn(t,e);return a?Bn(t,u):Bn(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),Bn(t,r["case"])});return u?Bn(t,u.then):(n(r["default"],e),Bn(t,r["default"]))},$ifNull:function(t,r){n(lt(r)&&2===r.length,"Invalid arguments for $ifNull operator");var e=Bn(t,r);return h(e[0])?e[1]:e[0]}},Pt={"%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],"%%":"%"},Ct={$dayOfYear:function(n,t){var r=Bn(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=Bn(n,t);return r.getDate()},$dayOfWeek:function(n,t){var r=Bn(n,t);return r.getDay()+1},$year:function(n,t){var r=Bn(n,t);return r.getFullYear()},$month:function(n,t){var r=Bn(n,t);return r.getMonth()+1},$week:function(n,t){var r=Bn(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=Bn(n,t);return r.getUTCHours()},$minute:function(n,t){var r=Bn(n,t);return r.getMinutes()},$second:function(n,t){var r=Bn(n,t);return r.getSeconds()},$millisecond:function(n,t){var r=Bn(n,t);return r.getMilliseconds()},$dateToString:function(n,t){for(var r=t.format,e=Bn(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=Pt[u[i]],s=a;if(lt(a)){var f=this[a[0]].bind(this),c=a[1];s=$n(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=Bn(n,t),e=C(r[0]),u=C(r[1]);return e.length===u.length&&e.length===N(e,u).length},$setIntersection:function(n,t){var r=Bn(n,t);return N(r[0],r[1])},$setDifference:function(n,t){var r=Bn(n,t);return r[0].filter(g.bind(null,r[1])); | ||
},$setUnion:function(n,t){var r=Bn(n,t);return E(r[0],r[1])},$setIsSubset:function(n,t){var r=Bn(n,t);return N(r[0],r[1]).length===r[0].length},$anyElementTrue:function(n,t){var r=Bn(n,t)[0];return r.some(m)},$allElementsTrue:function(n,t){var r=Bn(n,t)[0];return r.every(m)}},Rt={$concat:function(n,t){var r=Bn(n,t);return[null,void 0].some($.bind(null,r))?null:r.join("")},$indexOfBytes:function(t,r){var e=Bn(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=Bn(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(Bn(n,t)).split(/%..|./).length},$strLenCP:function(n,t){return Bn(n,t).length},$strcasecmp:function(t,r){var e=Bn(t,r),u=e[0],i=e[1];return P(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=Bn(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=mn(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=Bn(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=Bn(n,t);return b(r)?"":r.toLowerCase()},$toUpper:function(n,t){var r=Bn(n,t);return b(r)?"":r.toUpperCase()}},Dt=[192,224,240],Lt={$let:function(n,t){var r=t.vars,e=t["in"],u=O(r);return w(u,function(t){var e=Bn(n,r[t]),u="$"+t;n[u]=e}),Bn(n,e)}},Ut=Object.assign({},vt,ht,pt,St,It,Ct,Tt,qt,Rt,Lt),Ft={$addToSet:yn,$avg:bn,$first:_n,$last:xn,$mergeObjects:On,$max:kn,$min:wn,$push:Mn,$stdDevPop:jn,$stdDevSamp:An,$sum:Nn},Bt={expression:Ut,group:Ft,pipeline:wt,projection:Ot,query:Et},zt={key:"_id"},Yt={$$ROOT:function(n,t,r){return r.root},$$CURRENT:function(n,t,r){return n},$$REMOVE:function(n,t,r){}},Jt={$$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)&&(lt(u)?(e=[],w(u,function(n){s(n)&&(n=Jn(n,t,r)),h(n)||e.push(n)})):e=Jn(u,t,r),h(e)?delete n[i]:n[i]=e)}),n}},Ht=O(Yt),Vt=O(Jt),Kt={query:function(n,t){return new At(n).find(this.toJSON(),t)},aggregate:function(n){return new Mt(n).run(this.toJSON())}},Qt="2.2.5",Wt={_internal:Hn,Aggregator:Mt,CollectionMixin:Kt,Cursor:jt,Lazy:z,OP_EXPRESSION:ot,OP_GROUP:at,OP_PIPELINE:st,OP_PROJECTION:ft,OP_QUERY:ct,Query:At,VERSION:Qt,addOperators:Sn,aggregate:vn,find:hn,remove:pn,setup:In};return Wt}); | ||
!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 rt:return n.map(t);case et:return j(n,t);default:return n}}function r(n){switch(u(n)){case rt:return L([],n);case et: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)===Wn}function o(n){return u(n)===Xn}function a(n){return u(n)===Gn}function s(n){return u(n)===et}function c(n){return n===Object(n)}function f(n){return u(n)===Zn}function l(n){return u(n)===tt}function v(n){return u(n)===ut}function h(n){return p(n)||d(n)}function p(n){return null===n}function d(n){return void 0===n}function $(n,t){return n.some(P.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)||lt(n)&&0===n.length||s(n)&&0===O(n).length||!n}function _(n){return lt(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),lt(n))for(var e=0,u=n.length;e<u&&t(n[e],e,n)!==!1;e++);else for(var i in n)if(n.hasOwnProperty(i)&&t(n[i],i,n)===!1)break}function j(n,t,r){t=t.bind(r);for(var e={},u=O(n),i=0;i<u.length;i++){var o=u[i];e[o]=t(n[o],o)}return e}function M(n,r){if(!n||!r)return r;var e=n.constructor;if(e!==r.constructor)throw Error("mismatched types. must both be array or object");if(e!==Object&&e!==Array)return r;for(var u=e==Array&&1===n.length,i=Object.keys(r),o=0;o<i.length;o++){var a=i[o],s=r[a];n.constructor===Array?s&&s.constructor===Array?Array.prototype.push.apply(n,s):n.push(s):n.hasOwnProperty(a)?n[a]=M(n[a],s):n[a]=s}if(u&&n[0]&&n[0].constructor===Object){var c=t(n[0]);try{for(var f=1;f<n.length;f++)c=M(c,n[f]);n.splice(0,n.length),n.push(c)}catch(l){}}return n}function A(n,t,r){return lt(n)?n.reduce(t,r):(w(n,function(e,u){return r=t(r,e,u,n)}),r)}function N(n,t){return n.filter($.bind(null,t))}function E(n,t){return L(L([],n),t.filter(g.bind(null,n)))}function S(t){function r(n,t){for(var e=0,i=n.length;e<i;e++)lt(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(lt(t),"Input must be an Array");var u=[];return r(t,e),u}function I(n,t){if(t<1)return n;for(;t--&<(n)&&1===n.length;)n=n[0];return n}function P(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===ut)return!1;switch(i){case rt:if(n.length!==t.length)return!1;L(r,n),L(e,t);break;case et:var o=O(n),a=O(t);if(o.length!==a.length)return!1;o.sort(),a.sort();for(var s=0,c=o.length;s<c;s++){var f=o[s];if(f!==a[s])return!1;r.push(n[f]),e.push(t[f])}break;default:if(T(n)!==T(t))return!1}}return 0===r.length}function C(n){var t={},r=[];return w(n,function(n){var e=q(n);x(t,e)||(r.push(n),t[e]=0)}),r}function T(n){var t=u(n);switch(t){case Wn:case Gn:case tt:return n.toString();case Xn:return JSON.stringify(n);case Zn:return n.toISOString();case Vn:case Kn:return t;case rt:return"["+n.map(T)+"]";default:var r=t===et?"":""+e(n),i=O(n);return i.sort(),r+"{"+i.map(function(t){return T(t)+":"+T(n[t])})+"}"}}function q(n){for(var t=0,r=T(n),e=r.length;e;)t=(t<<5)-t^r.charCodeAt(--e);return t>>>0}function R(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],c=t(s,a);if(h(c))o.push(s);else{var f=q(s);x(e,f)||(e[f]=[c,a]),u.push(s)}}return u.sort(function(n,t){var r=e[q(n)],u=e[q(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=q(r),o=-1;void 0===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 U(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=q(u);return x(r,o)||(r[o]=n.apply(t,u)),r[o]}}({})}function B(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=Bn(n,r[t]);Ln(u,t,e)}),u})}function z(n){return n instanceof kt?n:new kt(n)}function Y(n){return!!n&&"object"===("undefined"==typeof n?"undefined":dt(n))&&J(n.next)}function J(n){return!!n&&"function"==typeof n}function H(n,t){var r=n.slice(t+1);n.splice(t),Array.prototype.push.apply(n,r)}function V(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 c=-1,f=t.length,l=!1;++c<f;){var v=t[c],h=v.func,p=v.type;switch(p){case yt:s=h(s,u);break;case bt:if(!h(s,u))continue n;break;case _t:--v.func,v.func||(l=!0);break;case xt:--v.func,v.func||H(t,c);continue n;default:break n}}if(e=l,!a)return{value:s,done:!1};r[o++]=s}}catch(d){if(d!==mt)throw d}return i=null,e=!0,{done:!0}}}function K(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),f=0,l=u.length-1;f<l;f++)n(c===e(u[f+1]),"$bucket 'boundaries' must all be of the same type"),n(u[f]<u[f+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 z(function(){return p||(t.each(function(t){var e=Bn(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=U(u,e),c=u[Math.max(0,s-1)];v[c].push(t)}}),u.pop(),h(i)||u.push(i),p=z(u).map(function(n){var t=Tn(v[n],null,s);return Object.assign(t,{_id:n})})),p.next()})}function Q(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=F(Bn),o={},a=[],s=R(n,function(n){var t=r(n,u);return h(t)?a.push(n):(o[t]||(o[t]=[]),o[t].push(n)),t}),c=Pn(),f=[],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),f.length>0){var y=f[f.length-1];y[c].max=d.min}}v==i-1&&L($,s.slice(l)),f.push(Object.assign(Tn($,null,e),{_id:d}))}return f.length>0&&(f[f.length-1][c].max=r(s[s.length-1],u)),f})}function W(t,r){return n(o(r)&&""!==r.trim()&&r.indexOf(".")===-1&&"$"!==r.trim()[0],"Invalid expression value for $count"),z(function(){var n={};return n[r]=t.size(),{value:n,done:!1}}).first()}function G(n,t){return n.transform(function(n){return[j(t,function(t){return vn(n,t)})]}).first()}function X(n,t){var r=Pn(),e=t[r];return n.transform(function(n){var u=D(n,function(n){return Bn(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 void 0!==n&&(e[r]=n),w(t,function(n,t){e[t]=Tn(u.groups[i],t,n)}),{value:e,done:!1}}})}function Z(n,t){return n.take(t)}function nn(t,e){function u(n){return q(h(n)?null:n)}var i=e.from,a=e.localField,s=e.foreignField,c=e.as;n(lt(i)&&o(s)&&o(a)&&o(c),"$lookup: invalid argument");var f={};return w(i,function(n){var t=u(n[s]);f[t]=f[t]||[],f[t].push(n)}),t.map(function(n){var t=u(n[a]),e=r(n);return e[c]=f[t]||[],e})}function tn(n,t){var r=new At(t);return n.filter(function(n){return r.test(n)})}function rn(t,r){return n(lt(r),"$out: argument must be an array"),t.map(function(n){return r.push(n),n})}function en(r,e){if(b(e))return r;var u=O(e),i=!1,c=Pn(),f=[!1,!1];if(w(e,function(t,r){r!==c&&(0===t||t===!1?f[0]=!0:f[1]=!0,n(f[0]!==f[1],"Projection cannot have a mix of inclusion and exclusion."))}),$(u,c)){var l=e[c];0!==l&&l!==!1||(u=u.filter(g.bind(null,[c])),n(g(u,c),"Must not contain collections id key"),i=b(u))}else u.push(c);return r.map(function(n){var r={},f=!1,l=!1,v=[];return i&&v.push(c),w(u,function(t){var u=e[t],i=void 0;if(t!==c&&$([0,!1],u)&&(l=!0),t===c&&b(u))i=n[t];else if(o(u))i=Bn(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],$(En(ct),h)?"$slice"===h?_(u[h]).every(a)?(i=Ot[h](n,u[h],t),f=!0):i=Bn(n,u,t):i=Ot[h](n,u[h],t):i=Bn(n,u,t)}var p=Rn(n,t);void 0!==p&&M(r,p),g([0,1,!1,!0],u)&&(void 0===i?Un(r,t):Ln(r,t,i))}),(f||l||i)&&(r=Object.assign({},n,r),v.length>0&&(r=t(r),w(v,function(n){return Un(r,n)}))),r})}function un(n,r){return n.map(function(n){return Jn(t(n),r)})}function on(t,r){return t.map(function(t){return t=Bn(t,r.newRoot),n(s(t),"$replaceRoot expression must return an object"),t})}function an(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 sn(n,t){return n.drop(t)}function cn(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 qn(n,r)}),u={},i=R(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[Pn()]=t,this.$sort(this.$group(n,r),{count:-1})}function ln(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 z(function(){for(var r=function(){if(z.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=qn(u,e),lt(s)){if(0===s.length&&i===!0){s=null;var o=t(u);return Un(o,e),{v:{value:a(o,null),done:!1}}}s=z(s).map(function(n,r){var i=t(u);return Ln(i,e,n),a(i,r)})}else if(!b(s)||i===!0){var c=a(t(u),null);return{v:{value:c,done:!1}}}};;){var u=r();if("object"===("undefined"==typeof u?"undefined":dt(u)))return u.v}})}function vn(t,r){return n(lt(r),"Aggregation pipeline must be an array"),new jt(r).run(t)}function hn(n,t,r){return new At(t).find(n,r)}function pn(n,t){return new At(t).remove(n)}function dn(n,t){return e(n)===e(t)}function $n(n,t){return new Array(Math.max(t-String(n).length+1,0)).join("0")+n}function gn(n){if(n<128)return[n];for(var t=n<2048&&1||n<65536&&2||3,r=Dt[t-1],e=[(n>>6*t)+r];t>0;)e.push(128|n>>6*--t&63);return e}function mn(n){for(var t=[],r=0,e=n.length;r<e;r++)t.push(gn(n.codePointAt(r)));return t}function yn(n,t){return C(this.$push(n,t))}function bn(n,t){var r=this.$push(n,t).filter(a),e=A(r,function(n,t){return n+t},0);return e/(r.length||1)}function _n(n,t){return n.length>0?Bn(n[0],t):void 0}function xn(n,t){return n.length>0?Bn(n[n.length-1],t):void 0}function kn(n,t){return A(this.$push(n,t),function(n,t){return h(n)||t>n?t:n},void 0)}function On(n,t){return A(n,function(n,r){return Object.assign(n,Bn(r,t))},{})}function wn(n,t){return A(this.$push(n,t),function(n,t){return h(n)||t<n?t:n},void 0)}function jn(n,t){return h(t)?n:n.map(function(n){return Bn(n,t)})}function Mn(n,t){return Yn({data:this.$push(n,t).filter(a),sampled:!1})}function An(n,t){return Yn({data:this.$push(n,t).filter(a),sampled:!0})}function Nn(n,t){return lt(n)?a(t)?n.length*t:A(this.$push(n,t).filter(a),function(n,t){return n+t},0):0}function En(){return A(arguments,function(n,t){return L(n,O(Bt[t]))},[])}function Sn(t,r){var e=r(Hn());n(x(Bt,t),"Invalid operator class "+t);var u=Bt[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=qn(e,u),s=t(u,a,o);return n(i(s),r+" must return a boolean"),s}}}}(t,e)});break;case ct:w(e,function(n,t){o[t]=function(n,t){return n=n.bind(t),function(t,r,e){var u=qn(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(Bt[t],o)}function In(n){Object.assign(zt,n||{})}function Pn(){return zt.key}function Cn(n,t){return c(n)?n[t]:void 0}function Tn(t,r,e){if($(En(at),r))return Ft[r](t,e);if(s(e)){var u={};return w(e,function(r,i){if(u[i]=Tn(t,i,e[i]),$(En(at),i))return u=u[i],n(1===O(e).length,"Invalid $group expression '"+JSON.stringify(e)+"'"),!1}),u}}function qn(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&<(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(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 Rn(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,c=void 0;try{lt(t)?o?(s=Cn(t,u),a&&(s=Rn(s,i)),n(void 0!==s),s=[s]):(s=[],w(t,function(n){c=Rn(n,r),void 0!==c&&s.push(c)}),n(s.length>0)):(c=Cn(t,u),a&&(c=Rn(c,i)),n(void 0!==c),s={},s[u]=c)}catch(f){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(".");1===u.length?r(n,i):(e===!0&&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 Un(n,t){Dn(n,t,function(n,t){lt(n)&&/^\d+$/.test(t)?n.splice(parseInt(t),1):s(n)&&delete n[t]})}function Fn(n){if($(it,u(n)))return l(n)?{$regex:n}:{$eq:n};if(c(n)){var t=O(n),r=0===N(En(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 Bn(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,$(En(ot),e))return Ut[e](t,r,i);if($(En(at),e))return t=Bn(t,r,null,i),n(lt(t),e+" expression must resolve to an array"),Ft[e](t,null,i);if(o(r)&&r.length>0&&"$"===r[0]){if($(Ht,r))return Yt[r](t,null,i);if($(Vt,r))return r;var a=Ht.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)),qn(t,r.slice(1))}switch(u(r)){case rt:return r.map(function(n){return Bn(t,n)});case et:var s={};return w(r,function(e,u){if(s[u]=Bn(t,e,u,i),$(En(ot,at),u))return n(1===O(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),s=s[u],!1}),s;default:return r}}function zn(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 Yn(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 Jn(n,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};r.root=r.root||n;var e=Bn(n,t,null,r);return $(Vt,e)?Jt[e](n,t,r):e}function Hn(){return{assert:n,computeValue:Bn,clone:r,cloneDeep:t,each:w,err:k,getHash:q,getType:e,has:x,idKey:Pn,includes:$.bind(null),isArray:lt,isBoolean:i,isDate:f,isEmpty:b,isEqual:P,isFunction:v,isNil:h,isNull:p,isNumber:a,isObject:s,isRegExp:l,isString:o,isUndefined:d,keys:O,ops:En,resolve:qn,resolveObj:Rn,reduce:A}}var Vn="null",Kn="undefined",Qn="bool",Wn="boolean",Gn="number",Xn="string",Zn="date",nt="regex",tt="regexp",rt="array",et="object",ut="function",it=[Vn,Kn,Wn,Gn,Xn,Zn,tt],ot="expression",at="group",st="pipeline",ct="projection",ft="query",lt=Array.isArray||function(n){return u(n)===rt},vt={$abs:function(n,t){var r=Bn(n,t);return null===r||void 0===r?null:Math.abs(r)},$add:function(t,r){var e=Bn(t,r),u=!1,i=A(e,function(t,r){return f(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=Bn(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=Bn(n,t);return r[0]/r[1]},$exp:function(t,r){var e=Bn(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=Bn(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=Bn(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=Bn(t,r);return n(lt(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=Bn(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=Bn(n,t);return r[0]%r[1]},$multiply:function(n,t){var r=Bn(n,t);return A(r,function(n,t){return n*t},1)},$pow:function(t,r){var e=Bn(t,r);return n(lt(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=Bn(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=Bn(n,t);return r[0]-r[1]},$trunc:function(t,r){var e=Bn(t,r);return h(e)?null:(n(a(e)||isNaN(e),"$trunc expression must resolve to a number."),Math.trunc(e))}},ht={$arrayElemAt:function(t,r){var e=Bn(t,r);n(lt(e)&&2===e.length,"$arrayElemAt expression must resolve to an array of 2 elements"),n(lt(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=Bn(t,r);return n(lt(e),"$arrayToObject expression must resolve to an array"),A(e,function(t,r){return lt(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=Bn(t,r,null);return n(lt(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=Bn(t,r.input),u=r.as,i=r.cond;return n(lt(e),"$filter 'input' expression must resolve to an array"),e.filter(function(n){var t={};return t["$"+u]=n,Bn(t,i)===!0})},$in:function(t,r){var e=Bn(t,r[0]),u=Bn(t,r[1]);return n(lt(u),"$in second argument must be an array"),$(u,e)},$indexOfArray:function(t,r){var e=Bn(t,r);if(h(e))return null;var u=e[0],i=e[1];if(h(u))return null;n(lt(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(P.bind(null,i))+o)},$isArray:function(n,t){return lt(Bn(n,t[0]))},$map:function(t,r){var e=Bn(t,r.input);n(lt(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,Bn(t,i)})},$objectToArray:function(t,r){var e=Bn(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=Bn(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=Bn(t,r.input),u=Bn(t,r.initialValue),i=r["in"];return h(e)?null:(n(lt(e),"$reduce 'input' expression must resolve to an array"),A(e,function(n,t){return Bn({$value:n,$this:t},i)},u))},$reverseArray:function(t,r){var e=Bn(t,r);if(h(e))return null;n(lt(e),"$reverseArray expression must resolve to an array");var u=[];return L(u,e),u.reverse(),u},$size:function(n,t){var r=Bn(n,t);return lt(r)?r.length:void 0},$slice:function(n,t){var r=Bn(n,t);return zn(r[0],r[1],r[2])},$zip:function(t,r){var e=Bn(t,r.inputs),u=r.useLongestLength||!1;n(lt(e),"'inputs' expression must resolve to an array"),n(i(u),"'useLongestLength' must be a boolean"),lt(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 c=e[a];if(h(c))return null;n(lt(c),"'inputs' expression values must resolve to an array or null"),o=u?Math.max(o,c.length):Math.min(o||c.length,c.length)}for(var f=[],l=r.defaults||[],v=function(n){var t=e.map(function(t,r){return h(t[n])?l[r]||null:t[n]});f.push(t)},p=0;p<o;p++)v(p);return f},$mergeObjects:function(n,t){var r=Bn(n,t);return lt(r)?A(r,function(n,t){return Object.assign(n,t)},{}):{}}},pt={$and:function(n,t){var r=Bn(n,t);return m(r)&&r.every(m)},$or:function(n,t){var r=Bn(n,t);return m(r)&&r.some(m)},$not:function(n,t){return!Bn(n,t[0])}},dt="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},$t=function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")},gt=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}}();z.isIterator=Y;var mt=new Error,yt=1,bt=2,_t=3,xt=4,kt=function(){function n(t){if($t(this,n),this.__iteratees=[],this.__first=!1,this.__done=!1,this.__buf=[],J(t)&&(t={next:t}),Y(t))t=function(n){return function(){var t=n.next();if(t.done)throw mt;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 mt}}(t);else if(!J(t))throw new Error("Source is not iterable. Must be Array, Function or Object{next:Function}");this.next=V(t,this.__iteratees,this.__buf)}return gt(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:yt,func:n})}},{key:"filter",value:function(n){return this._push({type:bt,func:n})}},{key:"take",value:function(n){return n>0?this._push({type:_t,func:n}):this}},{key:"drop",value:function(n){return n>0?this._push({type:xt,func:n}):this}},{key:"transform",value:function(n){this._validate();var t=this,r=void 0;return z(function(){return r||(r=z(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}(),Ot={$:function(n,t,r){k("$ not implemented")},$elemMatch:function(t,r,e){var u=qn(t,e),i=new At(r);n(lt(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=qn(t,e);return lt(u)?lt(r)?zn(u,r[0],r[1]):(n(a(r),"$slice: invalid arguments for projection"),zn(u,r)):u}},wt={$addFields:B,$bucket:K,$bucketAuto:Q,$count:W,$facet:G,$group:X,$limit:Z,$lookup:nn,$match:tn,$out:rn,$project:en,$redact:un,$replaceRoot:on,$sample:an,$skip:sn,$sort:cn,$sortByCount:fn,$unwind:ln},jt=function(){function t(n){$t(this,t),this.__operators=n}return gt(t,[{key:"stream",value:function(t,r){return t=z(t),b(this.__operators)||w(this.__operators,function(e){var u=O(e);n(1===u.length&&$(En(st),u[0]),"Invalid aggregation operator "+u),u=u[0],t=r&&r instanceof At?wt[u].call(r,t,e[u]):wt[u](t,e[u])}),t}},{key:"run",value:function(n,t){return this.stream(n,t).value()}}]),t}(),Mt=function(){function n(t,r,e){$t(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 gt(n,[{key:"_fetch",value:function(){return this.__result?this.__result:(s(this.__projection)&&this.__operators.push({$project:this.__projection}),this.__result=z(this.__source).filter(this.__filterFn),this.__operators.length>0&&(this.__result=new jt(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}(),At=function(){function t(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};$t(this,t),this.__criteria=n,this.__projection=r,this.__compiled=[],this._compile()}return gt(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=Fn(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($(En(ft),r),"Invalid query operator '"+r+"' detected"),this.__compiled.push(Et[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 Mt(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}(),Nt={$eq:function(n,t){if(P(n,t))return!0;if(h(n)&&h(t))return!0;if(lt(n)){var r=P.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 h(n)?t.some(p):N(_(n),t).length>0},$nin:function(n,t){return!this.$in(n,t)},$lt:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n<t})},$lte:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n<=t})},$gt:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n>t})},$gte:function(n,t){return void 0!==_(n).find(function(n){return dn(n,t)&&n>=t})},$mod:function(n,t){return void 0!==_(n).find(function(n){return a(n)&<(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)||S(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(lt(n)&<(t))for(var e=0,u=t.length;e<u;e++){if(!s(t[e])||!$(O(t[e]),"$elemMatch"))return N(t,n).length===u;r=r||this.$elemMatch(n,t[e].$elemMatch)}return r},$size:function(n,t){return lt(n)&&a(t)&&n.length===t},$elemMatch:function(n,t){if(lt(n)&&!b(n))for(var r=new At(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 Xn:return o(n);case 3:case et:return s(n);case 4:case rt:return lt(n);case 6:case Kn:return h(n);case 8:case Qn:return i(n);case 9:case Zn:return f(n);case 10:case Vn:return p(n);case 11:case nt: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}}},Et={$and:function(t,r){n(lt(r),"Invalid expression: $and expects value to be an Array");var e=[];return w(r,function(n){return e.push(new At(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(lt(r),"Invalid expression. $or expects value to be an Array");var e=[];return w(r,function(n){return e.push(new At(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(lt(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]=Fn(t);var e=new At(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 Bn(n,t)}}}};w(Nt,function(n,t){Et[t]=function(n,t){return n=n.bind(t),function(t,r){return{test:function(e){var u=qn(e,t,{meta:!0});return u=I(u.result,u.depth),n(u,r)}}}}(n,Nt)});var St={$cmp:function(n,t){var r=Bn(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=Bn(t,r);return Nt[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";lt(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=Bn(t,e);return a?Bn(t,u):Bn(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),Bn(t,r["case"])});return u?Bn(t,u.then):(n(r["default"],e),Bn(t,r["default"]))},$ifNull:function(t,r){n(lt(r)&&2===r.length,"Invalid arguments for $ifNull operator");var e=Bn(t,r);return h(e[0])?e[1]:e[0]}},Pt={"%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],"%%":"%"},Ct={$dayOfYear:function(n,t){var r=Bn(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=Bn(n,t);return r.getDate()},$dayOfWeek:function(n,t){var r=Bn(n,t);return r.getDay()+1},$year:function(n,t){var r=Bn(n,t);return r.getFullYear()},$month:function(n,t){var r=Bn(n,t);return r.getMonth()+1},$week:function(n,t){var r=Bn(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=Bn(n,t);return r.getUTCHours()},$minute:function(n,t){var r=Bn(n,t);return r.getMinutes()},$second:function(n,t){var r=Bn(n,t);return r.getSeconds()},$millisecond:function(n,t){var r=Bn(n,t);return r.getMilliseconds()},$dateToString:function(n,t){for(var r=t.format,e=Bn(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=Pt[u[i]],s=a;if(lt(a)){var c=this[a[0]].bind(this),f=a[1];s=$n(c(n,e),f); | ||
}r=r.replace(u[i],s)}return r}},Tt={$literal:function(n,t){return t}},qt={$setEquals:function(n,t){var r=Bn(n,t),e=C(r[0]),u=C(r[1]);return e.length===u.length&&e.length===N(e,u).length},$setIntersection:function(n,t){var r=Bn(n,t);return N(r[0],r[1])},$setDifference:function(n,t){var r=Bn(n,t);return r[0].filter(g.bind(null,r[1]))},$setUnion:function(n,t){var r=Bn(n,t);return E(r[0],r[1])},$setIsSubset:function(n,t){var r=Bn(n,t);return N(r[0],r[1]).length===r[0].length},$anyElementTrue:function(n,t){var r=Bn(n,t)[0];return r.some(m)},$allElementsTrue:function(n,t){var r=Bn(n,t)[0];return r.every(m)}},Rt={$concat:function(n,t){var r=Bn(n,t);return[null,void 0].some($.bind(null,r))?null:r.join("")},$indexOfBytes:function(t,r){var e=Bn(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],c=e[2],f=e[3],l=h(c)||a(c)&&c>=0&&Math.round(c)===c;if(l=l&&(h(f)||a(f)&&f>=0&&Math.round(f)===f),n(l,u),c=c||0,f=f||i.length,c>f)return-1;var v=i.substring(c,f).indexOf(s);return v>-1?v+c:v},$split:function(t,r){var e=Bn(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(Bn(n,t)).split(/%..|./).length},$strLenCP:function(n,t){return Bn(n,t).length},$strcasecmp:function(t,r){var e=Bn(t,r),u=e[0],i=e[1];return P(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=Bn(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=mn(u),f=[],l=0,v=0;v<c.length;v++)f.push(l),l+=c[v].length;var h=f.indexOf(i),p=f.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=Bn(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=Bn(n,t);return b(r)?"":r.toLowerCase()},$toUpper:function(n,t){var r=Bn(n,t);return b(r)?"":r.toUpperCase()}},Dt=[192,224,240],Lt={$let:function(n,t){var r=t.vars,e=t["in"],u=O(r);return w(u,function(t){var e=Bn(n,r[t]),u="$"+t;n[u]=e}),Bn(n,e)}},Ut=Object.assign({},vt,ht,pt,St,It,Ct,Tt,qt,Rt,Lt),Ft={$addToSet:yn,$avg:bn,$first:_n,$last:xn,$mergeObjects:On,$max:kn,$min:wn,$push:jn,$stdDevPop:Mn,$stdDevSamp:An,$sum:Nn},Bt={expression:Ut,group:Ft,pipeline:wt,projection:Ot,query:Et},zt={key:"_id"},Yt={$$ROOT:function(n,t,r){return r.root},$$CURRENT:function(n,t,r){return n},$$REMOVE:function(n,t,r){}},Jt={$$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){c(u)&&(lt(u)?(e=[],w(u,function(n){s(n)&&(n=Jn(n,t,r)),h(n)||e.push(n)})):e=Jn(u,t,r),h(e)?delete n[i]:n[i]=e)}),n}},Ht=O(Yt),Vt=O(Jt),Kt={query:function(n,t){return new At(n).find(this.toJSON(),t)},aggregate:function(n){return new jt(n).run(this.toJSON())}},Qt="2.2.6",Wt={_internal:Hn,Aggregator:jt,CollectionMixin:Kt,Cursor:Mt,Lazy:z,OP_EXPRESSION:ot,OP_GROUP:at,OP_PIPELINE:st,OP_PROJECTION:ct,OP_QUERY:ft,Query:At,VERSION:Qt,addOperators:Sn,aggregate:vn,find:hn,remove:pn,setup:In};return Wt}); | ||
//# 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.5' | ||
const VERSION = '2.2.6' | ||
@@ -13,0 +13,0 @@ // mingo! |
@@ -17,3 +17,2 @@ /** | ||
} from './constants' | ||
import { setValue } from './internal'; | ||
@@ -127,20 +126,53 @@ export function assert (condition, message) { | ||
/** | ||
* Deep merge objects | ||
* @param {...any} args Objects to merges | ||
* Deep merge objects or arrays. | ||
* When the inputs have unmergeable types, the source value (right hand side) is returned. | ||
* If the target is an array of a single object, this attempts to merge an array of source objects into that element. | ||
* If any of the elements are unmergeable, a normal array merge is performed and returned. | ||
* @param target {Object|Array} the target to merge into | ||
* @param obj {Object|Array} the source object | ||
*/ | ||
export function mergeObjects(...args) { | ||
let o = args[0] | ||
for(var i = 1; i < args.length; i++) { | ||
let obj = args[i] | ||
let objKeys = keys(obj) | ||
for (let j = 0; j < objKeys.length; j++) { | ||
let k = objKeys[j] | ||
if (isObject(o[k]) || isArray(o[k])) { | ||
o[k] = mergeObjects(o[k], obj[k]) | ||
export function mergeObjects(target, obj) { | ||
// take care of null inputs | ||
if (!target || !obj) return obj | ||
let typ = target.constructor | ||
if (typ !== obj.constructor) throw Error('mismatched types. must both be array or object') | ||
if (typ !== Object && typ !== Array) return obj | ||
// handle unit arrays specially | ||
let unitArray = typ == Array && target.length === 1 | ||
var objKeys = Object.keys(obj); | ||
for (var j = 0; j < objKeys.length; j++) { | ||
var k = objKeys[j]; | ||
var src = obj[k] | ||
if (target.constructor === Array) { | ||
if (!!src && src.constructor === Array) { | ||
Array.prototype.push.apply(target, src) | ||
} else { | ||
setValue(o, k, obj[k]) | ||
target.push(src) | ||
} | ||
} else { | ||
if (target.hasOwnProperty(k)) { | ||
target[k] = mergeObjects(target[k], src); | ||
} else { | ||
target[k] = src | ||
} | ||
} | ||
} | ||
return o | ||
// special case for unit arrays. attempt to merge all values into first element | ||
if (unitArray && !!target[0] && target[0].constructor === Object) { | ||
let tgt = cloneDeep(target[0]) | ||
try { | ||
for (let i = 1; i < target.length; i++) { | ||
tgt = mergeObjects(tgt, target[i]) | ||
} | ||
target.splice(0, target.length) | ||
target.push(tgt) | ||
} catch (e) { | ||
// on error return the already valid merged target | ||
} | ||
} | ||
return target; | ||
} | ||
@@ -147,0 +179,0 @@ |
{ | ||
"name": "mingo", | ||
"version": "2.2.5", | ||
"version": "2.2.6", | ||
"description": "JavaScript implementation of MongoDB query language", | ||
@@ -5,0 +5,0 @@ "main": "dist/mingo.js", |
@@ -165,5 +165,5 @@ # mingo | ||
* Squash changes into one commit | ||
* Run `make` to ensure build and tests pass | ||
* Run `make test` to ensure build and tests pass | ||
## License | ||
MIT |
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
447645
11913