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

mingo

Package Overview
Dependencies
Maintainers
1
Versions
144
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mingo - npm Package Compare versions

Comparing version 2.1.1 to 2.2.0

lib/operators/group/mergeObjects.js

6

CHANGELOG.md
Changelog
=========
## 2.2.0 / 2018-01-25
- More Performance improvements for lazy evaluation
- Added `$mergeObjects` operator
- Change `Lazy` to factory
- Remove `Lazy` static methods except `isIterator`
## 2.1.1 / 2017-12-18

@@ -4,0 +10,0 @@ - Use iterator input for Query

8

dist/mingo.min.js

@@ -1,6 +0,6 @@

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

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

@@ -28,3 +28,3 @@ import { OP_PIPELINE } from './constants'

stream (source, query) {
if (!(source instanceof Lazy)) source = new Lazy(source)
source = Lazy(source)

@@ -53,3 +53,3 @@ if (!isEmpty(this.__operators)) {

run (collection, query) {
return this.stream(collection, query).all()
return this.stream(collection, query).value()
}

@@ -60,3 +60,3 @@ }

* Return the result collection after running the aggregation pipeline for the given collection.
* Shorthand for `agg.run(input).all()`
* Shorthand for `agg.run(input).value()`
*

@@ -63,0 +63,0 @@ * @param collection

@@ -16,2 +16,3 @@ import { assert, each, has, isArray, isObject } from './util'

constructor (source, query, projection) {
this.__filterFn = query.test.bind(query)
this.__query = query

@@ -33,3 +34,3 @@ this.__source = source

// filter collection
this.__result = new Lazy(this.__source).filter(o => this.__query.test(o))
this.__result = Lazy(this.__source).filter(this.__filterFn)

@@ -48,3 +49,3 @@ if (this.__operators.length > 0) {

all () {
return this._fetch().all()
return this._fetch().value()
}

@@ -97,5 +98,5 @@

if (this.__stack.length > 0) return this.__stack.pop() // yield value obtains in hasNext()
let obj = this._fetch().next()
let o = this._fetch().next()
if (Lazy.isVal(obj)) return obj.value
if (!o.done) return o.value
this.__stack = null

@@ -114,3 +115,3 @@ return

let o = this._fetch().next()
if (Lazy.isVal(o)) {
if (!o.done) {
this.__stack.push(o.value)

@@ -130,3 +131,3 @@ } else {

map (callback) {
return this._fetch().map(callback).all()
return this._fetch().map(callback).value()
}

@@ -133,0 +134,0 @@

/**
* A lazy sequence for iterable sources
*
* Terms
* - Lazy: An object of this class. Supports high order functions such as; map, filter, etc
* - Iterator: Any object with the interface Object{next:Function}. Lazy class is an iterator by default
* - Sequence: An Array or Iterator
* Returns an iterator
* @param {*} source An iterable source (Array, Function, Object{next:Function})
*/
export class Lazy {
/**
* @param {*} src Any object as seed for Lazy
* @param {Function} fn An optional transformation function
*/
constructor (src, fn) {
this.__src = src
this.__fn = fn
this.__index = 0
this.__done = false
}
export function Lazy (source) {
return (source instanceof Iterator) ? source : new Iterator(source)
}
static _cmp (a,b) {
return a < b ? -1 : (a > b ? 1 : 0)
}
Lazy.isIterator = isIterator
static _isobject (o) {
return !!o && o.constructor.name === 'Object'
}
/**
* Checks whether the given object is compatible with iterator i.e Object{next:Function}
* @param {*} o An object
*/
function isIterator (o) {
return !!o && typeof o === 'object' && isFn(o.next)
}
static _isfunction (f) {
return f instanceof Function
}
function isFn (f) {
return !!f && typeof f === 'function'
}
static _has (o,k) {
return o.hasOwnProperty(k)
}
function dropItem (array, i) {
let rest = array.slice(i + 1)
array.splice(i)
Array.prototype.push.apply(array, rest)
}
static isDone (o) {
return Lazy._isobject(o) && Object.keys(o).length === 1 && Lazy._has(o, 'done') && o.done
}
// stop iteration error
const DONE = new Error()
static isVal (o) {
return Lazy._isobject(o) && Object.keys(o).length === 2 && Lazy._has(o, 'value') && Lazy._has(o, 'done')
}
// Lazy function type flags
const LAZY_MAP = 1
const LAZY_FILTER = 2
const LAZY_TAKE = 3
const LAZY_DROP = 4
static done () {
return { done: true }
}
function baseIterator (nextFn, iteratees, buffer) {
static isIterator (o) {
return o instanceof Object && Lazy._isfunction(o.next)
}
let done = false
let index = -1
let hashes = {} // used for LAZY_UNIQ
let bIndex = 0 // index for the buffer
static value (o) {
return { value: o, done: false }
}
return function (b) {
/**
* Returns the given value as `Lazy` object
* @param {*} val Input value or function that returns input value.
*/
static _iter (val) {
if (Lazy._isfunction(val)) {
val = { next: val }
// special hack to collect all values into buffer
b = b === buffer
try {
outer: while (!done) {
let o = nextFn()
index++
let mIndex = -1
let mSize = iteratees.length
let innerDone = false
while (++mIndex < mSize) {
let member = iteratees[mIndex],
func = member.func,
type = member.type;
switch (type) {
case LAZY_MAP:
o = func(o, index)
break
case LAZY_FILTER:
if (!func(o, index)) continue outer
break
case LAZY_TAKE:
--member.func
if (!member.func) innerDone = true
break
case LAZY_DROP:
--member.func
if (!member.func) dropItem(iteratees, mIndex)
continue outer
default:
break outer
}
}
done = innerDone
if (b) {
buffer[bIndex++] = o
} else {
return { value: o, done: false }
}
}
} catch (e) {
if (e !== DONE) throw e
}
return new Lazy(val)
}
/**
* Returns a new `Lazy` from the transforming the entire input sequence
* @param {*} xs Finite sequence source
* @param {Function} f Function of (Array) => (Any). Accepts the entire input as an array to transform
*/
static transform (xs, f) {
return Lazy._iter(f(Lazy.all(xs)))
hashes = null // clear the hash cache
done = true
return { done: true }
}
}
class Iterator {
/**
* Returns all values from a sequence as an Array.
* @param {*} xs A finite iterator or sequence
* @param {*} source An iterable object or function.
* Array - return one element per cycle
* Object{next:Function} - call next() for the next value (this also handles generator functions)
* Function - call to return the next value
* @param {Function} fn An optional transformation function
*/
static all (xs) {
if (xs instanceof Array) return xs
if (!Lazy.isIterator(xs)) return [xs]
constructor (source) {
this.__iteratees = [] // lazy function chain
this.__first = false // flag whether to return a single value
this.__done = false
this.__buf = []
let result = []
while (true) {
let o = xs.next()
if (Lazy.isDone(o)) break
if (Lazy.isVal(o)) result.push(o.value)
if (isFn(source)) {
// make iterable
source = { next: source }
}
return result
}
/**
* Return a lazy range
* @param {Number} start
* @param {Number} end
* @param {Number} step
*/
static range (start, end, step) {
if (end === undefined) {
end = start
start = 0
if (isIterator(source)) {
source = (src => () => {
let o = src.next()
if (o.done) throw DONE
return o.value
})(source)
} else if (Array.isArray(source)) {
source = (data => {
let size = data.length
let index = 0
return () => {
if (index < size) return data[index++]
throw DONE
}
})(source)
} else if (!isFn(source)) {
throw new Error("Source is not iterable. Must be Array, Function or Object{next:Function}")
}
if (!step) step = start < end ? 1 : -1
return new Lazy({
next () {
if (step > 0 && start < end || step < 0 && start > end) {
let val = Lazy.value(start)
start += step
return val
}
return Lazy.done()
}
})
// create next function
this.next = baseIterator(source, this.__iteratees, this.__buf)
}

@@ -123,99 +149,113 @@

_end() {
this.__done = true
this.__src = null
_validate () {
if (this.__first) throw new Error("Cannot add iteratee/transform after `first()`")
}
all () {
return Lazy.all(this)
/**
* Add an iteratee to this lazy sequence
* @param {Object} iteratee
*/
_push (iteratee) {
this._validate()
this.__iteratees.push(iteratee)
return this
}
next () {
//// Iteratees methods //////
let obj = Lazy.done()
/**
* Transform each item in the sequence to a new value
* @param {Function} f
*/
map (f) {
return this._push({ type: LAZY_MAP, func: f })
}
while (!this.__done) {
if (Lazy.isIterator(this.__src)) {
obj = this.__src.next()
} else if (this.__src instanceof Array) {
if (this.__index < this.__src.length) {
obj = { value: this.__src[this.__index++], done: false }
}
} else {
obj = { value: this.__src, done: false }
this._end()
}
/**
* Select only items matching the given predicate
* @param {Function} pred
*/
filter (pred) {
return this._push({ type: LAZY_FILTER, func: pred })
}
if (Lazy.isVal(obj)) {
// transform value if we have function
if (!!this.__fn) obj = this.__fn(obj)
if (Lazy.isVal(obj)) break
}
if (Lazy.isDone(obj)) this._end()
}
return obj
/**
* Take given numbe for values from sequence
* @param {Number} n A number greater than 0
*/
take (n) {
return n > 0 ? this._push({ type: LAZY_TAKE, func: n }) : this
}
each (f) {
// iterate without storing values
this.filter(x => {
f(x)
}).all()
/**
* Drop a number of values from the sequence
* @param {Number} n Number of items to drop greater than 0
*/
drop (n) {
return n > 0 ? this._push({ type: LAZY_DROP, func: n }) : this
}
map (f) {
let i = 0
return new Lazy(this, obj => {
obj.value = f(obj.value, i++)
return obj
//////// Transformations ////////
/**
* Returns a new lazy object with results of the transformation
* The entire sequence is realized.
*
* @param {Function} fn Tranform function of type (Array) => (Any)
*/
transform (fn) {
this._validate()
let self = this
let iter
return Lazy(() => {
if (!iter) {
iter = Lazy(fn(self.value()))
}
return iter.next()
})
}
filter (pred) {
return new Lazy(this, obj => {
if (pred(obj.value)) return obj
})
/**
* Mark this lazy object to return only the first result on `lazy.value()`.
* No more iteratees or transformations can be added after this method is called.
*/
first () {
this.take(1)
this.__first = true
return this
}
////////////////////////////////////////////////////////////////
// Terminal methods
/**
* Take values from the sequence
* @param {Number|Function} n A number or predicate function
* Returns the fully realized values of the iterators.
* The return value will be an array unless `lazy.first()` was used.
* The realized values are cached for subsequent calls
*/
take (n) {
if (Lazy._isfunction(n)) {
return new Lazy(this, obj => {
return n(obj.value) ? obj : Lazy.done()
})
} else {
let i = 0
return new Lazy(this, obj => {
return n > i++ ? obj : Lazy.done()
})
value () {
if (!this.__done) {
this.__done = this.next(this.__buf).done
}
return this.__first ? this.__buf[0] : this.__buf
}
/**
* Skips values in the sequence
* @param {Number|Function} n Number or predicate function
* Execute the funcion for each value. Will stop when an execution returns false.
* @param {Function} f
* @returns {Boolean} false iff `f` return false for any execution, otherwise true
*/
skip (n) {
if (Lazy._isfunction(n)) {
return new Lazy(this, obj => {
return n(obj.value) ? null : obj
})
} else {
let i = n
return new Lazy(this, obj => {
if (i == 0) {
return obj
} else {
i--
}
})
each (f) {
while (1) {
let o = this.next()
if (o.done) break
if (f(o.value) === false) return false
}
return true
}
/**
* Returns a reduction
* Returns the reduction of sequence according the reducing function
*
* @param {*} f a reducing function

@@ -225,62 +265,26 @@ * @param {*} init

reduce (f, init) {
let self = this
return new Lazy._iter(() => {
let o = self.next()
if (Lazy.isDone(o)) return o
let o = this.next()
let i = 0
let i = 0
while (Lazy.isVal(o)) {
init = (i === 0 && init === undefined) ? o.value : f(init, o.value, i)
o = self.next()
i++
}
return Lazy.value(init)
})
}
if (init === undefined && !o.done) {
init = o.value
o = this.next()
i++
}
sample () {
return this.filter(n => Math.random() > 0.5)
}
while (!o.done) {
init = f(init, o.value, i++)
o = this.next()
}
reverse () {
return Lazy.transform(this, xs => {
xs.reverse()
return xs
})
return init
}
sort (cmp) {
return Lazy.transform(this, xs => {
cmp = cmp || Lazy._cmp
xs.sort(cmp)
return xs
})
}
sortBy (f, cmp) {
return Lazy.transform(this, xs => {
cmp = cmp || Lazy._cmp
xs.sort((a,b) => {
return cmp(f(a), f(b))
})
return xs
})
}
count () {
return this.reduce((acc,n) => ++acc).all()[0]
}
/**
* Returns an Iterator with an `all()` method which yields only the first value.
* This is useful when `reduce` yields a single value which should be returned unwrapped in a call to `all()`
* Returns the number of matched items in the sequence
*/
one () {
let self = this
return {
next () { return self.next() },
all () { return self.all()[0] }
}
size () {
return this.reduce((acc,n) => ++acc, 0)
}
}
}

@@ -315,3 +315,16 @@ import {

return result
},
/**
* Combines multiple documents into a single document.
* @param {*} obj
* @param {*} expr
*/
$mergeObjects (obj, expr) {
let docs = computeValue(obj, expr)
if (isArray(docs)) {
return reduce(docs, (memo, o) => Object.assign(memo, o), {})
}
return {}
}
}

@@ -165,5 +165,5 @@

// reuse date operators
let fn = this[hdlr[0]]
let fn = this[hdlr[0]].bind(this)
let pad = hdlr[1]
value = padDigits(fn.call(this, obj, date), pad)
value = padDigits(fn(obj, date), pad)
}

@@ -170,0 +170,0 @@ // replace the match with resolved value

@@ -10,3 +10,3 @@ import { union, unique, intersection, notInArray, inArray, truthy } from '../../util.js'

*/
$setEquals (obj, expr) {
$setEquals (obj, expr) {
let args = computeValue(obj, expr)

@@ -23,3 +23,3 @@ let xs = unique(args[0])

*/
$setIntersection (obj, expr) {
$setIntersection (obj, expr) {
let args = computeValue(obj, expr)

@@ -34,3 +34,3 @@ return intersection(args[0], args[1])

*/
$setDifference (obj, expr) {
$setDifference (obj, expr) {
let args = computeValue(obj, expr)

@@ -45,3 +45,3 @@ return args[0].filter(notInArray.bind(null, args[1]))

*/
$setUnion (obj, expr) {
$setUnion (obj, expr) {
let args = computeValue(obj, expr)

@@ -56,3 +56,3 @@ return union(args[0], args[1])

*/
$setIsSubset (obj, expr) {
$setIsSubset (obj, expr) {
let args = computeValue(obj, expr)

@@ -67,3 +67,3 @@ return intersection(args[0], args[1]).length === args[0].length

*/
$anyElementTrue (obj, expr) {
$anyElementTrue (obj, expr) {
// mongodb nests the array expression in another

@@ -79,3 +79,3 @@ let args = computeValue(obj, expr)[0]

*/
$allElementsTrue (obj, expr) {
$allElementsTrue (obj, expr) {
// mongodb nests the array expression in another

@@ -82,0 +82,0 @@ let args = computeValue(obj, expr)[0]

@@ -6,2 +6,3 @@ import { $addToSet } from './addToSet.js'

import { $max } from './max.js'
import { $mergeObjects } from './mergeObjects.js'
import { $min } from './min.js'

@@ -22,2 +23,3 @@ import { $push } from './push.js'

$last,
$mergeObjects,
$max,

@@ -24,0 +26,0 @@ $min,

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

return (selector, value) => {
f = f.bind(ctx)
return {

@@ -60,3 +61,3 @@ test: (obj) => {

let lhs = resolve(obj, selector)
let result = f.call(ctx, selector, lhs, value)
let result = f(selector, lhs, value)
assert(isBoolean(result), `${op} must return a boolean`)

@@ -73,5 +74,6 @@ return result

wrapped[op] = ((f, ctx) => {
f = f.bind(ctx)
return (obj, expr, selector) => {
let lhs = resolve(obj, selector)
return f.call(ctx, selector, lhs, expr)
return f(selector, lhs, expr)
}

@@ -78,0 +80,0 @@ })(fn, newOperators)

@@ -43,28 +43,31 @@ import {

return Lazy.transform(collection, coll => {
each(coll, (obj) => {
let key = computeValue(obj, expr.groupBy)
let iter = false
if (isNil(key) || key < lower || key >= upper) {
assert(!isNil(defaultKey), '$bucket require a default for out of range values')
grouped[defaultKey].push(obj)
} else {
assert(key >= lower && key < upper, "$bucket 'groupBy' expression must resolve to a value in range of boundaries")
let index = findInsertIndex(boundaries, key)
let boundKey = boundaries[Math.max(0, index - 1)]
grouped[boundKey].push(obj)
}
})
return Lazy(() => {
if (!iter) {
collection.each(obj => {
let key = computeValue(obj, expr.groupBy)
// upper bound is exclusive so we remove it
boundaries.pop()
if (!isNil(defaultKey)) boundaries.push(defaultKey)
if (isNil(key) || key < lower || key >= upper) {
assert(!isNil(defaultKey), '$bucket require a default for out of range values')
grouped[defaultKey].push(obj)
} else {
assert(key >= lower && key < upper, "$bucket 'groupBy' expression must resolve to a value in range of boundaries")
let index = findInsertIndex(boundaries, key)
let boundKey = boundaries[Math.max(0, index - 1)]
grouped[boundKey].push(obj)
}
})
boundaries = new Lazy(boundaries)
// upper bound is exclusive so we remove it
boundaries.pop()
if (!isNil(defaultKey)) boundaries.push(defaultKey)
return boundaries.map(key => {
let acc = accumulate(grouped[key], null, outputExpr)
return Object.assign(acc, { '_id': key })
})
iter = Lazy(boundaries).map(key => {
let acc = accumulate(grouped[key], null, outputExpr)
return Object.assign(acc, { '_id': key })
})
}
return iter.next()
})
}

@@ -25,3 +25,3 @@ import {

return Lazy.transform(collection, coll => {
return collection.transform(coll => {
let approxBucketSize = Math.max(1, Math.round(coll.length / bucketCount))

@@ -84,3 +84,4 @@

return result
})
}

@@ -1,2 +0,2 @@

import { assert, isString } from '../../util'
import { assert, isString, memoize } from '../../util'
import { Lazy } from '../../lazy'

@@ -16,9 +16,7 @@

let o = {}
o[expr] = 0
return collection.reduce((memo,n) => {
memo[expr] += 1
return memo
}, o).one()
return Lazy(() => {
let o = {}
o[expr] = collection.size()
return { value: o, done: false }
}).first()
}

@@ -10,5 +10,5 @@ import { map, clone } from '../../util'

export function $facet (collection, expr) {
return Lazy.transform(collection, xs => {
return map(expr, pipeline => aggregate(xs, pipeline))
}).one()
return collection.transform(array => {
return [ map(expr, pipeline => aggregate(array, pipeline)) ]
}).first()
}

@@ -19,7 +19,6 @@ import {

const ID_KEY = idKey()
let objectId = expr[ID_KEY]
let id = expr[ID_KEY]
return Lazy.transform(collection, coll => {
let partitions = groupBy(coll, (obj) => computeValue(obj, objectId, objectId))
let result = []
return collection.transform(coll => {
let partitions = groupBy(coll, obj => computeValue(obj, id, id))

@@ -29,3 +28,10 @@ // remove the group key

each(partitions.keys, (value, i) => {
let i = -1
let size = partitions.keys.length
return () => {
if (++i === size) return { done: true }
let value = partitions.keys[i]
let obj = {}

@@ -42,7 +48,6 @@

})
result.push(obj)
})
return result
return { value: obj, done: false }
}
})
}

@@ -39,3 +39,2 @@ import {

// result collection
let projected = []
let objKeys = keys(expr)

@@ -42,0 +41,0 @@ let idOnlyExcludedExpression = false

@@ -16,11 +16,11 @@ import { assert, isNumber } from '../../util'

return Lazy.transform(collection, xs => {
let result = []
return collection.transform(xs => {
let len = xs.length
for (let i = 0; i < size; i++) {
let i = -1
return () => {
if (++i === size) return { done: true }
let n = Math.floor(Math.random() * len)
result.push(xs[n])
return { value: xs[n], done: false }
}
return result
})
}

@@ -9,3 +9,3 @@ /**

export function $skip (collection, value) {
return collection.skip(value)
return collection.drop(value)
}

@@ -1,2 +0,2 @@

import { each, getHash, groupBy, into, isEmpty, isObject, keys, sortBy } from '../../util'
import { each, groupBy, into, isEmpty, isObject, keys, sortBy } from '../../util'
import { resolve } from '../../internal'

@@ -15,13 +15,12 @@ import { Lazy } from '../../lazy'

return Lazy.transform(collection, coll => {
collection = collection.transform(coll => {
let modifiers = keys(sortKeys)
each(modifiers.reverse(), (key) => {
let grouped = groupBy(coll, (obj) => resolve(obj, key))
let grouped = groupBy(coll, obj => resolve(obj, key))
let sortedIndex = {}
let getIndex = (k) => sortedIndex[getHash(k)]
let indexKeys = sortBy(grouped.keys, (item, i) => {
sortedIndex[getHash(item)] = i
return item
let indexKeys = sortBy(grouped.keys, (k, i) => {
sortedIndex[k] = i
return k
})

@@ -31,8 +30,10 @@

coll = []
each(indexKeys, (item) => into(coll, grouped.groups[getIndex(item)]))
each(indexKeys, k => into(coll, grouped.groups[sortedIndex[k]]))
})
return coll
})
}
return collection
}

@@ -28,40 +28,38 @@ import { assert, clone, each, isArray, isEmpty, isString } from '../../util'

return new Lazy({
next () {
while (true) {
// take from lazy sequence if available
if (Lazy.isIterator(value)) {
let tmp = value.next()
if (Lazy.isVal(tmp)) return tmp
}
return Lazy(() => {
while (true) {
// take from lazy sequence if available
if (Lazy.isIterator(value)) {
let tmp = value.next()
if (!tmp.done) return tmp
}
// fetch next object
let obj = collection.next()
if (Lazy.isDone(obj)) return Lazy.done()
// fetch next object
let obj = collection.next()
if (obj.done) return obj
// unwrap value
obj = obj.value
// unwrap value
obj = obj.value
// get the value of the field to unwind
value = getValue(obj, field)
// get the value of the field to unwind
value = getValue(obj, field)
// throw error if value is not an array???
if (isArray(value)) {
if (value.length === 0 && preserveNullAndEmptyArrays === true) {
value = null // reset unwind value
// throw error if value is not an array???
if (isArray(value)) {
if (value.length === 0 && preserveNullAndEmptyArrays === true) {
value = null // reset unwind value
let tmp = clone(obj)
delete tmp[field]
return { value: format(tmp, null), done: false }
} else {
// construct a lazy sequence for elements per value
value = Lazy(value).map((item, i) => {
let tmp = clone(obj)
delete tmp[field]
return { value: format(tmp, null), done: false }
} else {
// construct a lazy sequence for elements per value
value = new Lazy(value).map((item, i) => {
let tmp = clone(obj)
tmp[field] = item
return format(tmp, i)
})
}
} else if (!isEmpty(value) || preserveNullAndEmptyArrays === true) {
let tmp = format(clone(obj), null)
return { value: tmp, done: false }
tmp[field] = item
return format(tmp, i)
})
}
} else if (!isEmpty(value) || preserveNullAndEmptyArrays === true) {
let tmp = format(clone(obj), null)
return { value: tmp, done: false }
}

@@ -68,0 +66,0 @@ }

@@ -398,2 +398,3 @@ /**

queryOperators[op] = ((f, ctx) => {
f = f.bind(ctx)
return (selector, value) => {

@@ -405,3 +406,3 @@ return {

lhs = unwrap(lhs.result, lhs.depth)
return f.call(ctx, lhs, value)
return f(lhs, value)
}

@@ -408,0 +409,0 @@ }

@@ -94,8 +94,7 @@ /**

*/
export function each (obj, fn, ctx = null) {
assert(obj === Object(obj), "Cannot iterate over object of type '" + jsType(obj) + "'")
export function each (obj, fn, ctx) {
fn = fn.bind(ctx)
if (isArrayLike(obj)) {
for (let i = 0, len = obj.length; i < len; i++) {
if (fn.call(ctx, obj[i], i, obj) === false) break
if (fn(obj[i], i, obj) === false) break
}

@@ -105,3 +104,3 @@ } else {

if (has(obj, k)) {
if (fn.call(ctx, obj[k], k, obj) === false) break
if (fn(obj[k], k, obj) === false) break
}

@@ -120,9 +119,10 @@ }

*/
export function map (obj, fn, ctx = null) {
export function map (obj, fn, ctx) {
if (isArray(obj)) {
return obj.map(fn, ctx)
} else if (isObject(obj)) {
fn = fn.bind(ctx)
let o = {}
each(obj, (v, k) => {
o[k] = fn.call(ctx, v, k)
o[k] = fn(v, k)
}, obj)

@@ -340,3 +340,3 @@ return o

*/
export function sortBy (collection, fn, ctx = null) {
export function sortBy (collection, fn, ctx) {
let sortKeys = {}

@@ -347,5 +347,7 @@ let sorted = []

fn = fn.bind(ctx)
for (let i = 0; i < len; i++) {
let obj = collection[i]
let key = fn.call(ctx, obj, i)
let key = fn(obj, i)
if (isNil(key)) {

@@ -389,4 +391,5 @@ // objects with null keys will go in first

let lookup = {}
fn = fn.bind(ctx)
each(collection, (obj) => {
let key = fn.call(ctx, obj)
let key = fn(obj)
let hash = getHash(key)

@@ -393,0 +396,0 @@ let index = -1

{
"name": "mingo",
"version": "2.1.1",
"version": "2.2.0",
"description": "JavaScript implementation of MongoDB query language",

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

@@ -13,3 +13,3 @@ # mingo

## Features
- Supports Dot Notation for both '_<array>.<index>_' and '_<document>.<field>_' selectors
- Supports Dot Notation for both _`<array>.<index>`_ and _`<document>.<field>`_ selectors
- Query and Projection Operators

@@ -16,0 +16,0 @@ - [Array Operators](https://docs.mongodb.com/manual/reference/operator/query-array/)

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

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc