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

mingo

Package Overview
Dependencies
Maintainers
1
Versions
143
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mingo - npm Package Compare versions

Comparing version 0.8.1 to 0.9.0

7

CHANGELOG.md

@@ -6,2 +6,9 @@ Changelog

## v0.9.0 / 2017-02-06
- Added support for system variables (`$$ROOT`,`$$CURRENT`)
- Implemented more pipeline operators (`$redact`,`$addFields`,`$sample`,`$sortByCount`,`$count`,`$replaceRoot`)
- Added `$switch` conditional operator
- Fixed `$ifNull` conditional operator
- Allow use of `$in` and `$nin` as aggregation comparison operators
## v0.8.1 / 2016-12-08

@@ -8,0 +15,0 @@ - Fix querying deeply nested nested arrays and object equality matching. See [issue#36](https://github.com/kofrasa/mingo/issues/36)

2

dist/mingo.min.js

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

!function(n,r){"use strict";function t(n,r){if(w(n))throw new Error(r)}function e(n,r){if(w(n))throw new TypeError(r)}function u(n){return t(!y(n))}function i(n,r){e(n===Object(n),r)}function o(n,r){return Object.prototype.toString.call(n)==="[object "+r+"]"}function c(n){return o(n,"Boolean")}function l(n){return o(n,"String")}function a(n){return o(n,"Number")}function f(n){return o(n,"Array")}function s(n){return o(n,"Object")}function h(n){return n===Object(n)}function p(n){return o(n,"Date")}function d(n,r){return o(n,"RegExp")}function g(n,r){return o(n,"Function")}function v(n){return o(n,"Null")}function y(n){return o(n,"Undefined")}function $(n,r){return!n.includes(r)}function b(n,r){return n.includes(r)}function m(n){return!!n}function w(n){return!n}function O(n){return["undefined","null"].includes(typeof n)||f(n)&&0===n.length||s(n)&&0===Object.keys(n).length||!n}function j(n){return f(n)?n:[n]}function _(n){return Object.prototype.toString.call(n).match(/\s(\w+)/)[1].toLowerCase()}function E(n,r){return Object.prototype.hasOwnProperty.call(n,r)}function k(n,r,t){if(i(n,"Cannot iterate over object of type '"+_(n)+"'"),f(n))n.forEach(r,t);else for(var e in n)E(n,e)&&r.call(t,n[e],e)}function x(n,r,t){if(f(n))return n.map(r,t);if(s(n)){for(var e,u={},i=Object.keys(n),o=0,c=i.length;c>o;o++)e=i[o],u[e]=r.call(t,n[e],e);return u}throw new TypeError("Input must be an Array or Object type")}function A(n,r){return n.filter(b.bind(null,r))}function I(n,r){var t=[];return nn.apply(t,n),nn.apply(t,r.filter($.bind(null,n))),t}function S(n,r){e(f(n),"Input must be an Array");var t=[],u=function(n,r){for(var e=0,i=n.length;i>e;e++)f(n[e])&&(r>0||0>r)?u(n[e],Math.max(-1,r-1)):nn.call(t,n[e])};return u(n,r||-1),t}function M(n,r){if(n===r)return!0;var t=_(n);if(t!==_(r))return!1;if("number"===t&&isNaN(n)&&isNaN(r))return!0;if(["date","regexp"].includes(t))return n.toString()===r.toString();if("array"===t){if(n.length===r.length&&0===n.length)return!0;if(n.length!==r.length)return!1;for(var e=0,u=n.length;u>e;e++)if(!M(n[e],r[e]))return!1}else{if(![n,r].every(s))return!1;var i=Object.keys(n),o=Object.keys(r);if(i.length!==o.length)return!1;if(i.sort(),o.sort(),!M(i,o))return!1;for(var e=0,c=i.length;c>e;e++){var l=i[e];if(!M(n[l],r[l]))return!1}}return!0}function q(n){var r={},t=[];return n.forEach(function(n){var e=z(n);E(r,e)||(t.push(n),r[e]=0)}),t}function C(n,r){return n[r]}function N(n,r,t){for(var e=r.split("."),u=n,i=0;i<e.length;i++){var o=v(e[i].match(/^\d+$/));if(o&&f(u)){if(t===!0&&0===i)return u;u=u.map(function(n){return N(n,e[i],!0)}),1===u.length&&(u=u[0])}else u=C(u,e[i]),t=!1;if(y(u))break}return u}function Q(n,e){if(!y(n)){var i,o=e.split("."),c=o[0],l=1===o.length||o.slice(1).join("."),a=null!==c.match(/^\d+$/);try{if(1===o.length)if(f(n))a?(i=C(n,c),u(i),i=[i]):(i=[],n.forEach(function(n){var r=Q(n,e);y(r)||i.push(r)}),t(i.length>0));else{var s=C(n,c);u(s),i={},i[c]=s}else if(f(n))a?(i=C(n,c),i=Q(i,l),u(i),i=[i]):(i=[],n.forEach(function(n){var r=Q(n,e);y(r)||i.push(r)}),t(i.length>0));else{var s=C(n,c);s=Q(s,l),u(s),i={},i[c]=s}}catch(h){i=r}return i}}function T(n,r,t){var e=r.split("."),u=e[0],i=1===e.length||e.slice(1).join("."),o=/^\d+$/.test(u);1===e.length?t(n,u):f(n)&&!o?n.forEach(function(n){T(n,r,t)}):T(n[u],i,t)}function P(n,r,t){T(n,r,function(n,r){n[r]=t})}function D(n,r){T(n,r,function(n,r){f(n)&&/^\d+$/.test(r)?n.splice(parseInt(r),1):s(n)&&delete n[r]})}function U(n){switch(_(n)){case"array":return n.map(function(n){return U(n)});case"object":return x(n,function(n,r){return U(n)});default:return n}}function F(n){for(var r=0;r<Sn.length;r++)if(Sn[r](n))return!0;return!1}function R(n){return F(n)||!h(n)}function Y(n){if(R(n))return d(n)?{$regex:n}:{$eq:n};if(h(n)){var r=Object.keys(n),t=0===A(B(jn),r).length;if(t)return{$eq:n};if(r.includes("$regex")){var e=n.$regex,u=n.$options||"",i="";l(e)&&(i+=e.ignoreCase||u.indexOf("i")>=0?"i":"",i+=e.multiline||u.indexOf("m")>=0?"m":"",i+=e.global||u.indexOf("g")>=0?"g":"",e=new RegExp(e,i)),n.$regex=e,delete n.$options}}return n}function L(n,r){return new Array(Math.max(r-String(n).length+1,0)).join("0")+n}function B(n){return Object.keys(An[n])}function J(n,r,e){for(var u,i,o,c={},l=[],a=n.length,f=0;a>f;f++)i=n[f],u=r.call(e,i,f),o=z(i),E(c,o)||(c[o]=[u,f]),l.push(U(i));return l.sort(function(n,r){var t=c[z(n)],e=c[z(r)];return t[0]<e[0]?-1:t[0]>e[0]?1:t[1]<e[1]?-1:t[1]>e[1]?1:0}),t(l.length===n.length,"sortBy must retain collection length"),l}function G(n,r,e){var u={keys:[],groups:[]},i={};return n.forEach(function(n){var t=r.call(e,n),o=z(t),c=-1;y(i[o])&&(c=u.keys.length,i[o]=c,u.keys.push(t),u.groups.push([])),c=i[o],u.groups[c].push(n)}),t(u.keys.length===u.groups.length,"Cardinality must be equal for groups and keys"),u}function H(n){return JSON.stringify({"":n})+_(n)+n}function z(n){var r,t,e,u=0,i=H(n);if(0===i.length)return u;for(r=0,e=i.length;e>r;r++)t=i.charCodeAt(r),u=(u<<5)-u+t,u|=0;return u.toString()}function V(n,t,e){if(B(_n).includes(t))return sn[t](n,e);if(s(e)){var u={};for(var i in e)if(E(e,i)&&(u[i]=V(n,i,e[i]),B(_n).includes(i))){if(u=u[i],Object.keys(e).length>1)throw new Error("Invalid $group expression '"+JSON.stringify(e)+"'");break}return u}return r}function W(n,r,e){if(B(En).includes(e))return On[e](n,r);if(l(r)&&r.length>0&&"$"===r[0])return N(n,r.slice(1));switch(_(r)){case"array":return r.map(function(r){return W(n,r,null)});case"object":var u={};for(var i in r)if(E(r,i)&&(u[i]=W(n,r[i],i),B(En).includes(i))){t(1===Object.keys(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),u=u[i];break}return u;default:return U(r)}}var K,X={};X.VERSION="0.8.1",null!==n&&(K=n.Mingo),X.noConflict=function(){return n.Mingo=K,X};var Z=r!==module&&r!==require;Z?module!==r&&(module.exports=X):n.Mingo=X;var nn=Array.prototype.push,rn=Array.prototype.slice;!function(){Function.prototype.bind||(Function.prototype.bind=function(n){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var r=rn.call(arguments,1),t=this,e=function(){},u=function(){return t.apply(this instanceof e?this:n,r.concat(rn.call(arguments)))};return this.prototype&&(e.prototype=this.prototype),u.prototype=new e,u}),Array.prototype.includes||(Array.prototype.includes=function(n){if(null===this)throw new TypeError("Array.prototype.includes called on null or undefined");var r=Object(this),t=parseInt(r.length,10)||0;if(0===t)return!1;var e,u=parseInt(arguments[1],10)||0;u>=0?e=u:(e=t+u,0>e&&(e=0));for(var i;t>e;){if(i=r[e],n===i||n!==n&&i!==i)return!0;e++}return!1}),Array.prototype.find||(Array.prototype.find=function(n){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if(!g(n))throw new TypeError("predicate must be a function");for(var t,e=Object(this),u=e.length>>>0,i=arguments[1],o=0;u>o;o++)if(t=e[o],n.call(i,t,o,e))return t;return r}),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(n){if(null==this)throw new TypeError("Array.prototype.findIndex called on null or undefined");if("function"!=typeof n)throw new TypeError("predicate must be a function");for(var r,t=Object(this),e=t.length>>>0,u=arguments[1],i=0;e>i;i++)if(r=t[i],n.call(u,r,i,t))return i;return-1},enumerable:!1,configurable:!1,writable:!1}),Object.keys||(Object.keys=function(n){i(n,"Object.keys called on a non-object");var r=[];for(var t in n)E(n,t)&&r.push(t);return r}),Object.values||(Object.values=function(n){i(n,"Object.values called on a non-object");var r=[];for(var t in n)E(n,t)&&r.push(n[t]);return r}),Object.assign||(Object.assign=function(n){if(v(n)||y(n))throw new TypeError("Cannot convert undefined or null to object");for(var r=Object(n),t=1;t<arguments.length;t++){var e=arguments[t];if(!y(e)&&!v(e))for(var u in e)E(e,u)&&(r[u]=e[u])}return r})}();var tn={key:"_id"};if(X._internal=function(){return{assert:t.bind(null),each:k.bind(null),falsey:w.bind(null),flatten:S.bind(null),groupBy:G.bind(null),has:E.bind(null),inArray:b.bind(null),intersection:A.bind(null),isArray:f.bind(null),isBoolean:c.bind(null),isDate:p.bind(null),isEmpty:O.bind(null),isEqual:M.bind(null),isFunction:g.bind(null),isNull:v.bind(null),isNumber:a.bind(null),isObject:s.bind(null),isObjectLike:h.bind(null),isRegExp:d.bind(null),isString:l.bind(null),isUndefined:y.bind(null),map:x.bind(null),notInArray:$.bind(null),sortBy:J.bind(null),truthy:m.bind(null),union:I.bind(null),unique:q.bind(null)}},X.setup=function(n){Object.assign(tn,n||{})},X.Query=function(n,r){return this instanceof X.Query?(this._criteria=n,this._projection=r,this._compiled=[],void this._compile()):new X.Query(n,r)},X.Query.prototype={_compile:function(){if(!O(this._criteria)){e(s(this._criteria),"Criteria must be of type Object");for(var n in this._criteria)if(E(this._criteria,n)){var r=this._criteria[n];if(["$and","$or","$nor","$where"].includes(n))this._processOperator(n,n,r);else{r=Y(r);for(var t in r)E(r,t)&&this._processOperator(n,t,r[t])}}}},_processOperator:function(n,r,t){if(!B(jn).includes(r))throw new Error("Invalid query operator '"+r+"' detected");this._compiled.push(cn[r](n,t))},test:function(n){for(var r=0;r<this._compiled.length;r++)if(!this._compiled[r].test(n))return!1;return!0},find:function(n,r){return new X.Cursor(n,this,r)},remove:function(n){for(var r=[],t=0;t<n.length;t++)this.test(n[t])||r.push(n[t]);return r}},Z){var en=require("stream").Transform,un=require("util");X.Query.prototype.stream=function(n){return new X.Stream(this,n)},X.Stream=function(n,r){return this instanceof X.Stream?(r=r||{},Object.assign(r,{objectMode:!0}),en.call(this,r),void(this._query=n)):new X.Stream(n,r)},un.inherits(X.Stream,en),X.Stream.prototype._transform=function(n,r,t){if(s(n)&&this._query.test(n))if(O(this._query._projection))this.push(n);else{var e=new X.Cursor([n],this._query);e.hasNext()&&this.push(e.next())}t()}}X.Cursor=function(n,r,t){return this instanceof X.Cursor?(this._query=r,this._collection=n,this._projection=t||r._projection,this._operators={},this._result=!1,void(this._position=0)):new X.Cursor(n,r,t)},X.Cursor.prototype={_fetch:function(){var n=this;if(this._result!==!1)return this._result;if(s(this._projection)&&Object.assign(this._operators,{$project:this._projection}),!f(this._collection))throw new Error("Input collection is not of valid type. Must be an Array.");this._result=this._collection.filter(this._query.test,this._query);var r=[];if(["$sort","$skip","$limit","$project"].forEach(function(t){if(E(n._operators,t)){var e={};e[t]=n._operators[t],r.push(e)}}),r.length>0){var t=new X.Aggregator(r);this._result=t.run(this._result,this._query)}return this._result},all:function(){return this._fetch()},first:function(){return this.count()>0?this._fetch()[0]:null},last:function(){return this.count()>0?this._fetch()[this.count()-1]:null},count:function(){return this._fetch().length},skip:function(n){return Object.assign(this._operators,{$skip:n}),this},limit:function(n){return Object.assign(this._operators,{$limit:n}),this},sort:function(n){return Object.assign(this._operators,{$sort:n}),this},next:function(){return this.hasNext()?this._fetch()[this._position++]:null},hasNext:function(){return this.count()>this._position},max:function(n){return sn.$max(this._fetch(),n)},min:function(n){return sn.$min(this._fetch(),n)},map:function(n){return this._fetch().map(n)},forEach:function(n){this._fetch().forEach(n)}},X.Aggregator=function(n){return this instanceof X.Aggregator?void(this._operators=n):new X.Aggregator(n)},X.Aggregator.prototype={run:function(n,r){if(!O(this._operators))for(var t=0;t<this._operators.length;t++){var e=this._operators[t],u=Object.keys(e);if(1!==u.length||!B(kn).includes(u[0]))throw new Error("Invalid aggregation operator '"+u+"'");u=u[0],n=r instanceof X.Query?on[u].call(r,n,e[u]):on[u](n,e[u])}return n}},X.find=function(n,r,t){return new X.Query(r).find(n,t)},X.remove=function(n,r){return new X.Query(r).remove(n)},X.aggregate=function(n,r){if(!f(r))throw new Error("Aggregation pipeline must be an array");return new X.Aggregator(r).run(n)},X.addOperators=function(n,r){var e=r({resolve:N,computeValue:W,ops:B,key:function(){return tn.key}});t([En,_n,kn,xn,jn].includes(n),"Could not identify type '"+n+"'");var u=B(n);Object.keys(e).forEach(function(r){t(/^\$\w+$/.test(r),"Invalid operator name '"+r+"'"),t(!u.includes(r),"Operator "+r+" is already defined for "+n+" operators")});var i={};switch(n){case jn:Object.keys(e).forEach(function(n){i[n]=function(r,t){return function(e,u){return{test:function(i){var o=N(i,e),l=r.call(t,e,o,u);if(c(l))return l;if(l instanceof X.Query)return l.test(i);throw new Error("Invalid return type for '"+n+"'. Must return a Boolean or Mingo.Query")}}}}(e[n],e)});break;case xn:Object.keys(e).forEach(function(n){i[n]=function(n,r){return function(t,e,u){var i=N(t,u);return n.call(r,u,i,e)}}(e[n],e)});break;default:Object.keys(e).forEach(function(n){i[n]=function(n,r){return function(){var t=rn.call(arguments);return n.apply(r,t)}}(e[n],e)})}Object.assign(An[n],i)},X.CollectionMixin={query:function(n,r){return X.find(this.toJSON(),n,r)},aggregate:function(n){return X.aggregate.call(null,this.toJSON(),n)}};var on={$group:function(n,r){var t=r[tn.key],e=G(n,function(n){return W(n,t,t)}),u=[];return delete r[tn.key],e.keys.forEach(function(n,t){var i={};y(n)||(i[tn.key]=n);for(var o in r)E(r,o)&&(i[o]=V(e.groups[t],o,r[o]));u.push(i)}),u},$match:function(n,r){return new X.Query(r).find(n).all()},$project:function(n,r){if(O(r))return n;for(var e=[],u=Object.keys(r),i=!1,o=[!1,!1],c=0;c<u.length;c++){var a=u[c],f=r[a];a!==tn.key&&(0===f||f===!1?o[0]=!0:o[1]=!0,t(o[0]!==o[1],"Projection cannot have a mix of inclusion and exclusion."))}if(u.includes(tn.key)){var h=r[tn.key];0!==h&&h!==!1||(u=u.filter($.bind(null,[tn.key])),t(!u.includes(tn.key),"Must not contain collections _id"),i=O(u))}else u.push(tn.key);for(var c=0;c<n.length;c++){var p=n[c],d={},g=!1,v=!1,b=[];i&&b.push(tn.key),u.forEach(function(n){var t,e,u=r[n];if(n!==tn.key&&0===u&&(v=!0),n===tn.key&&O(u))t=p[n];else if(l(u))t=W(p,u,n);else if(1===u||u===!0);else{if(!s(u))return void b.push(n);var i=Object.keys(u);i=i.length>1?!1:i[0],i!==!1&&B(xn).includes(i)?(t=fn[i](p,u[i],n),"$slice"===i&&(g=!0)):t=W(p,u,n)}t=U(t),e=U(Q(p,n)),y(e)?y(t)||(d[n]=t):(y(t)||P(e,n,t),Object.assign(d,e))}),(g||v||i)&&(d=Object.assign(U(p),d),b.forEach(function(n){D(d,n)})),e.push(d)}return e},$limit:function(n,r){return n.slice(0,r)},$skip:function(n,r){return n.slice(r)},$unwind:function(n,r){for(var t=[],e=r.substr(1),u=0;u<n.length;u++){var i=n[u],o=C(i,e);if(!f(o))throw new Error("Target field '"+e+"' is not of type Array.");o.forEach(function(n){var r=U(i);r[e]=n,t.push(r)})}return t},$sort:function(n,r){if(!O(r)&&s(r)){var t=Object.keys(r);t.reverse().forEach(function(t){var e=G(n,function(n){return N(n,t)}),u={},i=function(n){return u[z(n)]},o=J(e.keys,function(n,r){return u[z(n)]=r,n});-1===r[t]&&o.reverse(),n=[],o.forEach(function(r){nn.apply(n,e.groups[i(r)])})})}return n}},cn={},ln={$and:function(n,r){e(f(r),"Invalid expression: $and expects value to be an Array");var t=[];return r.forEach(function(n){t.push(new X.Query(n))}),{test:function(n){for(var r=0;r<t.length;r++)if(!t[r].test(n))return!1;return!0}}},$or:function(n,r){if(!f(r))throw new Error("Invalid expression for $or criteria");var t=[];return r.forEach(function(n){t.push(new X.Query(n))}),{test:function(n){for(var r=0;r<t.length;r++)if(t[r].test(n))return!0;return!1}}},$nor:function(n,r){if(!f(r))throw new Error("Invalid expression for $nor criteria");var t=this.$or("$or",r);return{test:function(n){return!t.test(n)}}},$not:function(n,r){var t={};t[n]=Y(r);var e=new X.Query(t);return{test:function(n){return!e.test(n)}}},$where:function(n,r){return g(r)||(r=new Function("return "+r+";")),{test:function(n){return r.call(n)===!0}}}};Object.assign(cn,ln);var an={$eq:function(n,r){return M(n,r)||f(n)&&-1!==n.findIndex(M.bind(null,r))},$ne:function(n,r){return!this.$eq(n,r)},$in:function(n,r){return n=j(n),A(n,r).length>0},$nin:function(n,r){return y(n)||!this.$in(n,r)},$lt:function(n,t){return n=j(n).find(function(n){return t>n}),n!==r},$lte:function(n,t){return n=j(n).find(function(n){return t>=n}),n!==r},$gt:function(n,t){return n=j(n).find(function(n){return n>t}),n!==r},$gte:function(n,t){return n=j(n).find(function(n){return n>=t}),n!==r},$mod:function(n,t){return n=j(n).find(function(n){return a(n)&&f(t)&&2===t.length&&n%t[0]===t[1]}),n!==r},$regex:function(n,t){return n=j(n).find(function(n){return l(n)&&d(t)&&!!n.match(t)}),n!==r},$exists:function(n,r){return r===!1&&y(n)||r===!0&&!y(n)},$all:function(n,r){var t=this,e=!1;if(f(n)&&f(r))for(var u=0;u<r.length;u++){if(!s(r[u])||!Object.keys(r[u]).includes("$elemMatch"))return A(r,n).length===r.length;e=e||t.$elemMatch(n,r[u].$elemMatch)}return e},$size:function(n,r){return f(n)&&a(r)&&n.length===r},$elemMatch:function(n,r){if(f(n)&&!O(n))for(var t=new X.Query(r),e=0;e<n.length;e++)if(t.test(n[e]))return!0;return!1},$type:function(n,r){switch(r){case 1:return a(n)&&-1!==(n+"").indexOf(".");case 2:case 5:return l(n);case 3:return s(n);case 4:return f(n);case 8:return c(n);case 9:return p(n);case 10:return v(n);case 11:return d(n);case 16:return a(n)&&2147483647>=n&&-1===(n+"").indexOf(".");case 18:return a(n)&&n>2147483647&&0x8000000000000000>=n&&-1===(n+"").indexOf(".");default:return!1}}};Object.keys(an).forEach(function(n){cn[n]=function(n,r){return function(t,e){return{test:function(u){var i=N(u,t);return n.call(r,i,e)}}}}(an[n],an)});var fn={$:function(n,r,t){throw new Error("$ not implemented")},$elemMatch:function(n,t,e){var u=N(n,e),i=new X.Query(t);if(y(u)||!f(u))return r;for(var o=0;o<u.length;o++)if(i.test(u[o]))return[u[o]];return r},$slice:function(n,r,t){var e=N(n,t);if(!f(e))return e;if(f(r)){var u=r[0]<0?e.length+r[0]:r,i=u+r[1];r=[u,i]}else{if(!a(r))throw new Error("Invalid type for $slice operator");r=0>r?[r]:[0,r]}return rn.apply(e,r)}},sn={$addToSet:function(n,r){var t=n.map(function(n){return W(n,r,null)});return q(t)},$sum:function(n,r){return f(n)?a(r)?n.length*r:n.reduce(function(n,t){var e=W(t,r,null);return a(e)?n+e:n},0):0},$max:function(n,r){var t,e=n.map(function(n){return W(n,r,null)});return e.length>0&&(t=e[0],e.forEach(function(n){n>t&&(t=n)})),t},$min:function(n,r){var t,e=n.map(function(n){return W(n,r,null)});return e.length>0&&(t=e[0],e.forEach(function(n){t>n&&(t=n)})),t},$avg:function(n,r){return this.$sum(n,r)/(n.length||1)},$push:function(n,r){return n.map(function(n){return W(n,r,null)})},$first:function(n,t){return n.length>0?W(n[0],t):r},$last:function(n,t){return n.length>0?W(n[n.length-1],t):r}},hn={$add:function(n,r){var t=W(n,r,null);return t.reduce(function(n,r){return n+r},0)},$subtract:function(n,r){var t=W(n,r,null);return t[0]-t[1]},$divide:function(n,r){var t=W(n,r,null);return t[0]/t[1]},$multiply:function(n,r){var t=W(n,r,null);return t.reduce(function(n,r){return n*r},1)},$mod:function(n,r){var t=W(n,r,null);return t[0]%t[1]}},pn={$concat:function(n,t){var e=W(n,t,null);return[null,r].some(b.bind(null,e))?null:e.join("")},$strcasecmp:function(n,r){var t=W(n,r,null);return t[0]=O(t[0])?"":t[0].toUpperCase(),t[1]=O(t[1])?"":t[1].toUpperCase(),t[0]>t[1]?1:t[0]<t[1]?-1:0},$substr:function(n,r){var t=W(n,r,null);return l(t[0])?t[1]<0?"":t[2]<0?t[0].substr(t[1]):t[0].substr(t[1],t[2]):""},$toLower:function(n,r){var t=W(n,r,null);return O(t)?"":t.toLowerCase()},$toUpper:function(n,r){var t=W(n,r,null);return O(t)?"":t.toUpperCase()}},dn={$dayOfYear:function(n,t){var e=W(n,t,null);if(p(e)){var u=new Date(e.getFullYear(),0,0),i=e-u,o=864e5;return Math.round(i/o)}return r},$dayOfMonth:function(n,t){var e=W(n,t,null);return p(e)?e.getDate():r},$dayOfWeek:function(n,t){var e=W(n,t,null);return p(e)?e.getDay()+1:r},$year:function(n,t){var e=W(n,t,null);return p(e)?e.getFullYear():r},$month:function(n,t){var e=W(n,t,null);return p(e)?e.getMonth()+1:r},$week:function(n,r){var t=W(n,r,null);t=new Date(+t),t.setHours(0,0,0),t.setDate(t.getDate()+4-(t.getDay()||7));var e=new Date(t.getFullYear(),0,1);return Math.floor(((t-e)/864e5+1)/7)},$hour:function(n,t){var e=W(n,t,null);return p(e)?e.getHours():r},$minute:function(n,t){var e=W(n,t,null);return p(e)?e.getMinutes():r},$second:function(n,t){var e=W(n,t,null);return p(e)?e.getSeconds():r},$millisecond:function(n,t){var e=W(n,t,null);return p(e)?e.getMilliseconds():r},$dateToString:function(n,r){for(var t=r.format,e=W(n,r.date,null),u=t.match(/(%%|%Y|%m|%d|%H|%M|%S|%L|%j|%w|%U)/g),i=0,o=u.length;o>i;i++){var c=In[u[i]],l=c;if(f(c)){var a=this[c[0]],s=c[1];l=L(a.call(this,n,e),s)}t=t.replace(u[i],l)}return t}},gn={$setEquals:function(n,r){var t=W(n,r,null),e=q(t[0]),u=q(t[1]);return e.length===u.length&&e.length===A(e,u).length},$setIntersection:function(n,r){var t=W(n,r,null);return A(t[0],t[1])},$setDifference:function(n,r){var t=W(n,r,null);return t[0].filter($.bind(null,t[1]))},$setUnion:function(n,r){var t=W(n,r,null);return I(t[0],t[1])},$setIsSubset:function(n,r){var t=W(n,r,null);return A(t[0],t[1]).length===t[0].length},$anyElementTrue:function(n,r){var t=W(n,r,null)[0];return t.some(m)},$allElementsTrue:function(n,r){var t=W(n,r,null)[0];return t.every(m)}},vn={$cond:function(n,r){var t,e,u;if(f(r)){if(3!=r.length)throw new Error("Invalid arguments for $cond operator");t=r[0],e=r[1],u=r[2]}else s(r)&&(t=r["if"],e=r.then,u=r["else"]);var i=W(n,t,null);return i?W(n,e,null):W(n,u,null)},$ifNull:function(n,e){t(!f(e)||2!=e.length,"Invalid arguments for $ifNull operator");var u=W(n,e,null);return null===u[0]||u[0]===r?u[1]:u[0]}},yn={$cmp:function(n,r){var t=W(n,r,null);return t[0]>t[1]?1:t[0]<t[1]?-1:0}};["$eq","$ne","$gt","$gte","$lt","$lte"].forEach(function(n){yn[n]=function(r,t){var e=W(r,t,null);return an[n](e[0],e[1])}});var $n={$size:function(n,t){var e=W(n,t,null);return f(e)?e.length:r}},bn={$literal:function(n,r){return r}},mn={$map:function(n,r){var t=W(n,r.input,null);if(!f(t))throw new Error("Input expression for $map must resolve to an array");var e=r.as,u=r["in"],i="$"+e,o=n[i];return t.map(function(r){n[i]=r;var t=W(n,u,null);return y(o)?delete n[i]:n[i]=o,t})},$let:function(n,r){var t=r.vars,e=r["in"],u={},i=Object.keys(t);i.forEach(function(r){var e=W(n,t[r],null),i="$"+r;u[i]=n[i],n[i]=e});var o=W(n,e,null);return i.forEach(function(r){var t="$"+r;y(u[t])?delete n[t]:n[t]=u[t]}),o}},wn={$and:function(n,r){var t=W(n,r,null);return m(t)&&t.every(m)},$or:function(n,r){var t=W(n,r,null);return m(t)&&t.some(m)},$not:function(n,r){return!W(n,r[0],null)}},On=Object.assign({},$n,hn,wn,yn,vn,dn,bn,gn,pn,mn),jn=X.OP_QUERY="query",_n=X.OP_GROUP="group",En=X.OP_AGGREGATE="aggregate",kn=X.OP_PIPELINE="pipeline",xn=X.OP_PROJECTION="projection",An={aggregate:On,group:sn,pipeline:on,projection:fn,query:cn},In={"%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],"%%":"%"},Sn=[l,c,a,p,v,d,y]}(this);
!function(n,r){"use strict";function t(n,r){if(w(n))throw new Error(r)}function e(n,r){if(w(n))throw new TypeError(r)}function u(n){return t(!y(n))}function i(n,r){e(n===Object(n),r)}function o(n,r){return Object.prototype.toString.call(n)==="[object "+r+"]"}function a(n){return o(n,"Boolean")}function c(n){return o(n,"String")}function l(n){return o(n,"Number")}function f(n){return o(n,"Array")}function s(n){return o(n,"Object")}function h(n){return n===Object(n)}function p(n){return o(n,"Date")}function d(n,r){return o(n,"RegExp")}function v(n,r){return o(n,"Function")}function g(n){return o(n,"Null")}function y(n){return o(n,"Undefined")}function $(n,r){return!n.includes(r)}function b(n,r){return n.includes(r)}function m(n){return!!n}function w(n){return!n}function O(n){return["undefined","null"].includes(typeof n)||f(n)&&0===n.length||s(n)&&0===Object.keys(n).length||!n}function j(n){return f(n)?n:[n]}function E(n){return Object.prototype.toString.call(n).match(/\s(\w+)/)[1].toLowerCase()}function _(n,r){return Object.prototype.hasOwnProperty.call(n,r)}function k(n,r,t){if(i(n,"Cannot iterate over object of type '"+E(n)+"'"),f(n))n.forEach(r,t);else for(var e in n)_(n,e)&&r.call(t,n[e],e)}function x(n,r,t){if(f(n))return n.map(r,t);if(s(n)){for(var e,u={},i=Object.keys(n),o=0,a=i.length;a>o;o++)e=i[o],u[e]=r.call(t,n[e],e);return u}throw new TypeError("Input must be an Array or Object type")}function I(n,r){return n.filter(b.bind(null,r))}function S(n,r){var t=[];return tn.apply(t,n),tn.apply(t,r.filter($.bind(null,n))),t}function A(n,r){e(f(n),"Input must be an Array");var t=[],u=function(n,r){for(var e=0,i=n.length;i>e;e++)f(n[e])&&(r>0||0>r)?u(n[e],Math.max(-1,r-1)):tn.call(t,n[e])};return u(n,r||-1),t}function M(n,r){if(n===r)return!0;var t=E(n);if(t!==E(r))return!1;if("number"===t&&isNaN(n)&&isNaN(r))return!0;if(["date","regexp"].includes(t))return n.toString()===r.toString();if("array"===t){if(n.length===r.length&&0===n.length)return!0;if(n.length!==r.length)return!1;for(var e=0,u=n.length;u>e;e++)if(!M(n[e],r[e]))return!1}else{if(![n,r].every(s))return!1;var i=Object.keys(n),o=Object.keys(r);if(i.length!==o.length)return!1;if(i.sort(),o.sort(),!M(i,o))return!1;for(var e=0,a=i.length;a>e;e++){var c=i[e];if(!M(n[c],r[c]))return!1}}return!0}function C(n){var r={},t=[];return n.forEach(function(n){var e=V(n);_(r,e)||(t.push(n),r[e]=0)}),t}function q(n,r,t){t=t||{},t.root=t.root||U(n);var e=K(n,r,null,t);return In.includes(e)?kn[e](n,r,t):e}function N(n,r){return n[r]}function T(n,r,t){for(var e=r.split("."),u=n,i=0;i<e.length;i++){var o=g(e[i].match(/^\d+$/));if(o&&f(u)){if(t===!0&&0===i)return u;u=u.map(function(n){return T(n,e[i],!0)}),1===u.length&&(u=u[0])}else u=N(u,e[i]),t=!1;if(y(u))break}return u}function R(n,e){if(!y(n)){var i,o=e.split("."),a=o[0],c=1===o.length||o.slice(1).join("."),l=null!==a.match(/^\d+$/);try{if(1===o.length)if(f(n))l?(i=N(n,a),u(i),i=[i]):(i=[],n.forEach(function(n){var r=R(n,e);y(r)||i.push(r)}),t(i.length>0));else{var s=N(n,a);u(s),i={},i[a]=s}else if(f(n))l?(i=N(n,a),i=R(i,c),u(i),i=[i]):(i=[],n.forEach(function(n){var r=R(n,e);y(r)||i.push(r)}),t(i.length>0));else{var s=N(n,a);s=R(s,c),u(s),i={},i[a]=s}}catch(h){i=r}return i}}function D(n,r,t,e){var u=r.split("."),i=u[0],o=1===u.length||u.slice(1).join("."),a=/^\d+$/.test(i);if(1===u.length)t(n,i);else if(f(n)&&!a)n.forEach(function(n){D(n,r,t,e)});else{if(e===!0){var c=_(n,i);(!c||y(n[i])||g(n[i]))&&(n[i]={})}D(n[i],o,t,e)}}function Q(n,r,t){D(n,r,function(n,r){n[r]=t})}function P(n,r){D(n,r,function(n,r){f(n)&&/^\d+$/.test(r)?n.splice(parseInt(r),1):s(n)&&delete n[r]})}function U(n){switch(E(n)){case"array":return n.map(function(n){return U(n)});case"object":return x(n,function(n,r){return U(n)});default:return n}}function F(n){for(var r=0;r<Rn.length;r++)if(Rn[r](n))return!0;return!1}function Y(n){return F(n)||!h(n)}function B(n){if(Y(n))return d(n)?{$regex:n}:{$eq:n};if(h(n)){var r=Object.keys(n),t=0===I(L(Sn),r).length;if(t)return{$eq:n};if(r.includes("$regex")){var e=n.$regex,u=n.$options||"",i="";c(e)&&(i+=e.ignoreCase||u.indexOf("i")>=0?"i":"",i+=e.multiline||u.indexOf("m")>=0?"m":"",i+=e.global||u.indexOf("g")>=0?"g":"",e=new RegExp(e,i)),n.$regex=e,delete n.$options}}return n}function J(n,r){return new Array(Math.max(r-String(n).length+1,0)).join("0")+n}function L(n){return Object.keys(Nn[n])}function z(n,r,e){for(var u,i,o,a={},c=[],l=n.length,f=0;l>f;f++)i=n[f],u=r.call(e,i,f),o=V(i),_(a,o)||(a[o]=[u,f]),c.push(U(i));return c.sort(function(n,r){var t=a[V(n)],e=a[V(r)];return t[0]<e[0]?-1:t[0]>e[0]?1:t[1]<e[1]?-1:t[1]>e[1]?1:0}),t(c.length===n.length,"sortBy must retain collection length"),c}function G(n,r,e){var u={keys:[],groups:[]},i={};return n.forEach(function(n){var t=r.call(e,n),o=V(t),a=-1;y(i[o])&&(a=u.keys.length,i[o]=a,u.keys.push(t),u.groups.push([])),a=i[o],u.groups[a].push(n)}),t(u.keys.length===u.groups.length,"Cardinality must be equal for groups and keys"),u}function H(n){return JSON.stringify({"":n})+E(n)+n}function V(n){var r,t,e,u=0,i=H(n);if(0===i.length)return u;for(r=0,e=i.length;e>r;r++)t=i.charCodeAt(r),u=(u<<5)-u+t,u|=0;return u.toString()}function W(n,t,e){if(L(An).includes(t))return pn[t](n,e);if(s(e)){var u={};for(var i in e)if(_(e,i)&&(u[i]=W(n,i,e[i]),L(An).includes(i))){if(u=u[i],Object.keys(e).length>1)throw new Error("Invalid $group expression '"+JSON.stringify(e)+"'");break}return u}return r}function K(n,r,u,i){if(i=i||{},i.root=i.root||U(n),L(Mn).includes(u))return En[u](n,r,i);if(L(An).includes(u))return n=K(n,r,null,i),e(f(n),"Must use collection type with "+u+" operator"),pn[u](n,null,i);if(c(r)&&r.length>0&&"$"===r[0]){if(xn.includes(r))return _n[r](n,null,i);if(In.includes(r))return console.log(i),r;var o="$$CURRENT";return 0===r.indexOf(o+".")?T(n,r.slice(o.length+2)):T(n,r.slice(1))}switch(E(r)){case"array":return r.map(function(r){return K(n,r,null)});case"object":var a={};for(var l in r)if(_(r,l)&&(a[l]=K(n,r[l],l,i),L(Mn).includes(l))){t(1===Object.keys(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),a=a[l];break}return a;default:return U(r)}}function X(n){var r=n.dataset.reduce(function(n,r){return n+r},0),t=n.dataset.length||1,e=n.sampled===!0?1:0,u=r/(t-e);return Math.sqrt(n.dataset.reduce(function(n,r){return n+Math.pow(r-u,2)},0)/t)}var Z,nn={};nn.VERSION="0.9.0",null!==n&&(Z=n.Mingo),nn.noConflict=function(){return n.Mingo=Z,nn};var rn=r!==module&&"undefined"!=typeof require;rn?module!==r&&(module.exports=nn):n.Mingo=nn;var tn=Array.prototype.push,en=Array.prototype.slice;!function(){Function.prototype.bind||(Function.prototype.bind=function(n){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var r=en.call(arguments,1),t=this,e=function(){},u=function(){return t.apply(this instanceof e?this:n,r.concat(en.call(arguments)))};return this.prototype&&(e.prototype=this.prototype),u.prototype=new e,u}),Array.prototype.includes||(Array.prototype.includes=function(n){if(null===this)throw new TypeError("Array.prototype.includes called on null or undefined");var r=Object(this),t=parseInt(r.length,10)||0;if(0===t)return!1;var e,u=parseInt(arguments[1],10)||0;u>=0?e=u:(e=t+u,0>e&&(e=0));for(var i;t>e;){if(i=r[e],n===i||n!==n&&i!==i)return!0;e++}return!1}),Array.prototype.find||(Array.prototype.find=function(n){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if(!v(n))throw new TypeError("predicate must be a function");for(var t,e=Object(this),u=e.length>>>0,i=arguments[1],o=0;u>o;o++)if(t=e[o],n.call(i,t,o,e))return t;return r}),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(n){if(null==this)throw new TypeError("Array.prototype.findIndex called on null or undefined");if("function"!=typeof n)throw new TypeError("predicate must be a function");for(var r,t=Object(this),e=t.length>>>0,u=arguments[1],i=0;e>i;i++)if(r=t[i],n.call(u,r,i,t))return i;return-1},enumerable:!1,configurable:!1,writable:!1}),Object.keys||(Object.keys=function(n){i(n,"Object.keys called on a non-object");var r=[];for(var t in n)_(n,t)&&r.push(t);return r}),Object.values||(Object.values=function(n){i(n,"Object.values called on a non-object");var r=[];for(var t in n)_(n,t)&&r.push(n[t]);return r}),Object.assign||(Object.assign=function(n){if(g(n)||y(n))throw new TypeError("Cannot convert undefined or null to object");for(var r=Object(n),t=1;t<arguments.length;t++){var e=arguments[t];if(!y(e)&&!g(e))for(var u in e)_(e,u)&&(r[u]=e[u])}return r})}();var un={key:"_id"};if(nn._internal=function(){return{assert:t.bind(null),each:k.bind(null),falsey:w.bind(null),flatten:A.bind(null),groupBy:G.bind(null),has:_.bind(null),inArray:b.bind(null),intersection:I.bind(null),isArray:f.bind(null),isBoolean:a.bind(null),isDate:p.bind(null),isEmpty:O.bind(null),isEqual:M.bind(null),isFunction:v.bind(null),isNull:g.bind(null),isNumber:l.bind(null),isObject:s.bind(null),isObjectLike:h.bind(null),isRegExp:d.bind(null),isString:c.bind(null),isUndefined:y.bind(null),map:x.bind(null),notInArray:$.bind(null),sortBy:z.bind(null),truthy:m.bind(null),union:S.bind(null),unique:C.bind(null)}},nn.setup=function(n){Object.assign(un,n||{})},nn.Query=function(n,r){return this instanceof nn.Query?(this._criteria=n,this._projection=r,this._compiled=[],void this._compile()):new nn.Query(n,r)},nn.Query.prototype={_compile:function(){if(!O(this._criteria)){e(s(this._criteria),"Criteria must be of type Object");for(var n in this._criteria)if(_(this._criteria,n)){var r=this._criteria[n];if(["$and","$or","$nor","$where"].includes(n))this._processOperator(n,n,r);else{r=B(r);for(var t in r)_(r,t)&&this._processOperator(n,t,r[t])}}}},_processOperator:function(n,r,t){if(!L(Sn).includes(r))throw new Error("Invalid query operator '"+r+"' detected");this._compiled.push(ln[r](n,t))},test:function(n){for(var r=0;r<this._compiled.length;r++)if(!this._compiled[r].test(n))return!1;return!0},find:function(n,r){return new nn.Cursor(n,this,r)},remove:function(n){for(var r=[],t=0;t<n.length;t++)this.test(n[t])||r.push(n[t]);return r}},rn){var on=require("stream").Transform,an=require("util");nn.Query.prototype.stream=function(n){return new nn.Stream(this,n)},nn.Stream=function(n,r){return this instanceof nn.Stream?(r=r||{},Object.assign(r,{objectMode:!0}),on.call(this,r),void(this._query=n)):new nn.Stream(n,r)},an.inherits(nn.Stream,on),nn.Stream.prototype._transform=function(n,r,t){if(s(n)&&this._query.test(n))if(O(this._query._projection))this.push(n);else{var e=new nn.Cursor([n],this._query);e.hasNext()&&this.push(e.next())}t()}}nn.Cursor=function(n,r,t){return this instanceof nn.Cursor?(this._query=r,this._collection=n,this._projection=t||r._projection,this._operators={},this._result=!1,void(this._position=0)):new nn.Cursor(n,r,t)},nn.Cursor.prototype={_fetch:function(){var n=this;if(this._result!==!1)return this._result;if(s(this._projection)&&Object.assign(this._operators,{$project:this._projection}),!f(this._collection))throw new Error("Input collection is not of valid type. Must be an Array.");this._result=this._collection.filter(this._query.test,this._query);var r=[];if(["$sort","$skip","$limit","$project"].forEach(function(t){if(_(n._operators,t)){var e={};e[t]=n._operators[t],r.push(e)}}),r.length>0){var t=new nn.Aggregator(r);this._result=t.run(this._result,this._query)}return this._result},all:function(){return this._fetch()},first:function(){return this.count()>0?this._fetch()[0]:null},last:function(){return this.count()>0?this._fetch()[this.count()-1]:null},count:function(){return this._fetch().length},skip:function(n){return Object.assign(this._operators,{$skip:n}),this},limit:function(n){return Object.assign(this._operators,{$limit:n}),this},sort:function(n){return Object.assign(this._operators,{$sort:n}),this},next:function(){return this.hasNext()?this._fetch()[this._position++]:null},hasNext:function(){return this.count()>this._position},max:function(n){return pn.$max(this._fetch(),n)},min:function(n){return pn.$min(this._fetch(),n)},map:function(n){return this._fetch().map(n)},forEach:function(n){this._fetch().forEach(n)}},nn.Aggregator=function(n){return this instanceof nn.Aggregator?void(this._operators=n):new nn.Aggregator(n)},nn.Aggregator.prototype={run:function(n,r){if(!O(this._operators))for(var t=0;t<this._operators.length;t++){var e=this._operators[t],u=Object.keys(e);if(1!==u.length||!L(Cn).includes(u[0]))throw new Error("Invalid aggregation operator '"+u+"'");u=u[0];var i={pipelineOp:u};n=r instanceof nn.Query?cn[u].call(r,n,e[u],i):cn[u](n,e[u],i)}return n}},nn.find=function(n,r,t){return new nn.Query(r).find(n,t)},nn.remove=function(n,r){return new nn.Query(r).remove(n)},nn.aggregate=function(n,r){if(!f(r))throw new Error("Aggregation pipeline must be an array");return new nn.Aggregator(r).run(n)},nn.addOperators=function(n,r){var e=r({resolve:T,computeValue:K,ops:L,key:function(){return un.key}});t([Mn,An,Cn,qn,Sn].includes(n),"Could not identify type '"+n+"'");var u=L(n);Object.keys(e).forEach(function(r){t(/^\$\w+$/.test(r),"Invalid operator name '"+r+"'"),t(!u.includes(r),"Operator "+r+" is already defined for "+n+" operators")});var i={};switch(n){case Sn:Object.keys(e).forEach(function(n){i[n]=function(r,t){return function(e,u){return{test:function(i){var o=T(i,e),c=r.call(t,e,o,u);if(a(c))return c;if(c instanceof nn.Query)return c.test(i);throw new Error("Invalid return type for '"+n+"'. Must return a Boolean or Mingo.Query")}}}}(e[n],e)});break;case qn:Object.keys(e).forEach(function(n){i[n]=function(n,r){return function(t,e,u){var i=T(t,u);return n.call(r,u,i,e)}}(e[n],e)});break;default:Object.keys(e).forEach(function(n){i[n]=function(n,r){return function(){var t=en.call(arguments);return n.apply(r,t)}}(e[n],e)})}Object.assign(Nn[n],i)},nn.CollectionMixin={query:function(n,r){return nn.find(this.toJSON(),n,r)},aggregate:function(n){return nn.aggregate.call(null,this.toJSON(),n)}};var cn={$addFields:function(n,r){var e=Object.keys(r);return n.map(function(n){return n=U(n),e.forEach(function(e){var u,i=r[e];if(s(i)){var o=Object.keys(i),a=o.filter(function(n){return 0===n.indexOf("$")});O(a)||(t(1===o.length,"Can have only one root operator in $addFields"),a=a[0],i=i[a],u=K(n,i,a))}else u=K(n,i,null);D(n,e,function(n,r){n[r]=u},!0)}),n})},$group:function(n,r){var t=r[un.key],e=G(n,function(n){return K(n,t,t)}),u=[];return delete r[un.key],e.keys.forEach(function(n,t){var i={};y(n)||(i[un.key]=n);for(var o in r)_(r,o)&&(i[o]=W(e.groups[t],o,r[o]));u.push(i)}),u},$match:function(n,r){return new nn.Query(r).find(n).all()},$project:function(n,r){if(O(r))return n;for(var e=[],u=Object.keys(r),i=!1,o=[!1,!1],a=0;a<u.length;a++){var l=u[a],f=r[l];l!==un.key&&(0===f||f===!1?o[0]=!0:o[1]=!0,t(o[0]!==o[1],"Projection cannot have a mix of inclusion and exclusion."))}if(u.includes(un.key)){var h=r[un.key];0!==h&&h!==!1||(u=u.filter($.bind(null,[un.key])),t(!u.includes(un.key),"Must not contain collections _id"),i=O(u))}else u.push(un.key);for(var a=0;a<n.length;a++){var p=n[a],d={},v=!1,g=!1,b=[];i&&b.push(un.key),u.forEach(function(n){var t,e,u=r[n];if(n!==un.key&&0===u&&(g=!0),n===un.key&&O(u))t=p[n];else if(c(u))t=K(p,u,n);else if(1===u||u===!0);else{if(!s(u))return void b.push(n);var i=Object.keys(u);i=i.length>1?!1:i[0],i!==!1&&L(qn).includes(i)?(t=hn[i](p,u[i],n),"$slice"===i&&(v=!0)):t=K(p,u,n)}t=U(t),e=U(R(p,n)),y(e)?y(t)||(d[n]=t):(y(t)||Q(e,n,t),Object.assign(d,e))}),(v||g||i)&&(d=Object.assign(U(p),d),b.forEach(function(n){P(d,n)})),e.push(d)}return e},$limit:function(n,r){return n.slice(0,r)},$skip:function(n,r){return n.slice(r)},$unwind:function(n,r){for(var t=[],e=r.substr(1),u=0;u<n.length;u++){var i=n[u],o=N(i,e);if(!f(o))throw new Error("Target field '"+e+"' is not of type Array.");o.forEach(function(n){var r=U(i);r[e]=n,t.push(r)})}return t},$sort:function(n,r){if(!O(r)&&s(r)){var t=Object.keys(r);t.reverse().forEach(function(t){var e=G(n,function(n){return T(n,t)}),u={},i=function(n){return u[V(n)]},o=z(e.keys,function(n,r){return u[V(n)]=r,n});-1===r[t]&&o.reverse(),n=[],o.forEach(function(r){tn.apply(n,e.groups[i(r)])})})}return n},$sortByCount:function(n,r){var t={count:{$sum:1}};return t[un.key]=r,this.$sort(this.$group(n,t),{count:-1})},$sample:function(n,r){var t=r.size;e(l(t),"$sample size must be a positive integer. See https://docs.mongodb.com/manual/reference/operator/aggregation/sample/");for(var u=[],i=0;t>i;i++){var o=Math.floor(Math.random()*n.length);u.push(n[o])}return u},$count:function(n,r){t(c(r)&&""!==r.trim()&&-1===r.indexOf(".")&&"$"!==r.trim()[0],"Invalid expression value for $count. See https://docs.mongodb.com/manual/reference/operator/aggregation/count/");var e={};return e[r]=n.length,e},$replaceRoot:function(n,r){var t=r.newRoot,u=[];return n.forEach(function(n){n=K(n,t,null),e(s(n),"$replaceRoot expression must return a valid JS object. See https://docs.mongodb.com/manual/reference/operator/aggregation/replaceRoot/"),u.push(n)}),u},$redact:function(n,r){return n.map(function(n){return q(U(n),r)})}},ln={},fn={$and:function(n,r){e(f(r),"Invalid expression: $and expects value to be an Array");var t=[];return r.forEach(function(n){t.push(new nn.Query(n))}),{test:function(n){for(var r=0;r<t.length;r++)if(!t[r].test(n))return!1;return!0}}},$or:function(n,r){if(!f(r))throw new Error("Invalid expression for $or criteria");var t=[];return r.forEach(function(n){t.push(new nn.Query(n))}),{test:function(n){for(var r=0;r<t.length;r++)if(t[r].test(n))return!0;return!1}}},$nor:function(n,r){if(!f(r))throw new Error("Invalid expression for $nor criteria");var t=this.$or("$or",r);return{test:function(n){return!t.test(n)}}},$not:function(n,r){var t={};t[n]=B(r);var e=new nn.Query(t);return{test:function(n){return!e.test(n)}}},$where:function(n,r){return v(r)||(r=new Function("return "+r+";")),{test:function(n){return r.call(n)===!0}}}};Object.assign(ln,fn);var sn={$eq:function(n,r){return M(n,r)||f(n)&&-1!==n.findIndex(M.bind(null,r))},$ne:function(n,r){return!this.$eq(n,r)},$in:function(n,r){return n=j(n),I(n,r).length>0},$nin:function(n,r){return y(n)||!this.$in(n,r)},$lt:function(n,t){return n=j(n).find(function(n){return t>n}),n!==r},$lte:function(n,t){return n=j(n).find(function(n){return t>=n}),n!==r},$gt:function(n,t){return n=j(n).find(function(n){return n>t}),n!==r},$gte:function(n,t){return n=j(n).find(function(n){return n>=t}),n!==r},$mod:function(n,t){return n=j(n).find(function(n){return l(n)&&f(t)&&2===t.length&&n%t[0]===t[1]}),n!==r},$regex:function(n,t){return n=j(n).find(function(n){return c(n)&&d(t)&&!!n.match(t)}),n!==r},$exists:function(n,r){return r===!1&&y(n)||r===!0&&!y(n)},$all:function(n,r){var t=this,e=!1;if(f(n)&&f(r))for(var u=0;u<r.length;u++){if(!s(r[u])||!Object.keys(r[u]).includes("$elemMatch"))return I(r,n).length===r.length;e=e||t.$elemMatch(n,r[u].$elemMatch)}return e},$size:function(n,r){return f(n)&&l(r)&&n.length===r},$elemMatch:function(n,r){if(f(n)&&!O(n))for(var t=new nn.Query(r),e=0;e<n.length;e++)if(t.test(n[e]))return!0;return!1},$type:function(n,r){switch(r){case 1:return l(n)&&-1!==(n+"").indexOf(".");case 2:case 5:return c(n);case 3:return s(n);case 4:return f(n);case 8:return a(n);case 9:return p(n);case 10:return g(n);case 11:return d(n);case 16:return l(n)&&2147483647>=n&&-1===(n+"").indexOf(".");case 18:return l(n)&&n>2147483647&&0x8000000000000000>=n&&-1===(n+"").indexOf(".");default:return!1}}};Object.keys(sn).forEach(function(n){ln[n]=function(n,r){return function(t,e){return{test:function(u){var i=T(u,t);return n.call(r,i,e)}}}}(sn[n],sn)});var hn={$:function(n,r,t){throw new Error("$ not implemented")},$elemMatch:function(n,t,e){var u=T(n,e),i=new nn.Query(t);if(y(u)||!f(u))return r;for(var o=0;o<u.length;o++)if(i.test(u[o]))return[u[o]];return r},$slice:function(n,r,t){var e=T(n,t);if(!f(e))return e;if(f(r)){var u=r[0]<0?e.length+r[0]:r,i=u+r[1];r=[u,i]}else{if(!l(r))throw new Error("Invalid type for $slice operator");r=0>r?[r]:[0,r]}return en.apply(e,r)},$stdDevPop:function(n,r,t){var e=K(n,r,t);return X({dataset:e,sampled:!1})},$stdDevSamp:function(n,r,t){var e=K(n,r,t);return X({dataset:e,sampled:!0})}},pn={$addToSet:function(n,r){return C(this.$push(n,r))},$sum:function(n,r){return f(n)?l(r)?n.length*r:this.$push(n,r).filter(l).reduce(function(n,r){return n+r},0):0},$max:function(n,r){var t,e=this.$push(n,r);return e.length>0&&(t=e[0],e.forEach(function(n){n>t&&(t=n)})),t},$min:function(n,r){var t,e=this.$push(n,r);return e.length>0&&(t=e[0],e.forEach(function(n){t>n&&(t=n)})),t},$avg:function(n,r){var t=this.$push(n,r).filter(l),e=t.reduce(function(n,r){return n+r},0);return e/(t.length||1)},$push:function(n,r){return g(r)?U(n):n.map(function(n){return K(n,r,null)})},$first:function(n,t){return n.length>0?K(n[0],t):r},$last:function(n,t){return n.length>0?K(n[n.length-1],t):r},$stdDevPop:function(n,r){var t=this.$push(n,r).filter(l);return X({dataset:t,sampled:!1})},$stdDevSamp:function(n,r){var t=this.$push(n,r).filter(l);return X({dataset:t,sampled:!0})}},dn={$abs:function(n,t){var e=K(n,t,null);return null===e||e===r?null:Math.abs(e)},$add:function(n,r){var t=K(n,r,null);return t.reduce(function(n,r){return n+r},0)},$subtract:function(n,r){var t=K(n,r,null);return t[0]-t[1]},$divide:function(n,r){var t=K(n,r,null);return t[0]/t[1]},$multiply:function(n,r){var t=K(n,r,null);return t.reduce(function(n,r){return n*r},1)},$mod:function(n,r){var t=K(n,r,null);return t[0]%t[1]}},vn={$concat:function(n,t){var e=K(n,t,null);return[null,r].some(b.bind(null,e))?null:e.join("")},$strcasecmp:function(n,r){var t=K(n,r,null);return t[0]=O(t[0])?"":t[0].toUpperCase(),t[1]=O(t[1])?"":t[1].toUpperCase(),t[0]>t[1]?1:t[0]<t[1]?-1:0},$substr:function(n,r){var t=K(n,r,null);return c(t[0])?t[1]<0?"":t[2]<0?t[0].substr(t[1]):t[0].substr(t[1],t[2]):""},$toLower:function(n,r){var t=K(n,r,null);return O(t)?"":t.toLowerCase()},$toUpper:function(n,r){var t=K(n,r,null);return O(t)?"":t.toUpperCase()}},gn={$dayOfYear:function(n,t){var e=K(n,t,null);if(p(e)){var u=new Date(e.getFullYear(),0,0),i=e-u,o=864e5;return Math.round(i/o)}return r},$dayOfMonth:function(n,t){var e=K(n,t,null);return p(e)?e.getDate():r},$dayOfWeek:function(n,t){var e=K(n,t,null);return p(e)?e.getDay()+1:r},$year:function(n,t){var e=K(n,t,null);return p(e)?e.getFullYear():r},$month:function(n,t){var e=K(n,t,null);return p(e)?e.getMonth()+1:r},$week:function(n,r){var t=K(n,r,null);t=new Date(+t),t.setHours(0,0,0),t.setDate(t.getDate()+4-(t.getDay()||7));var e=new Date(t.getFullYear(),0,1);return Math.floor(((t-e)/864e5+1)/7)},$hour:function(n,t){var e=K(n,t,null);return p(e)?e.getHours():r},$minute:function(n,t){var e=K(n,t,null);return p(e)?e.getMinutes():r},$second:function(n,t){var e=K(n,t,null);return p(e)?e.getSeconds():r},$millisecond:function(n,t){var e=K(n,t,null);return p(e)?e.getMilliseconds():r},$dateToString:function(n,r){for(var t=r.format,e=K(n,r.date,null),u=t.match(/(%%|%Y|%m|%d|%H|%M|%S|%L|%j|%w|%U)/g),i=0,o=u.length;o>i;i++){var a=Tn[u[i]],c=a;if(f(a)){var l=this[a[0]],s=a[1];c=J(l.call(this,n,e),s)}t=t.replace(u[i],c)}return t}},yn={$setEquals:function(n,r){var t=K(n,r,null),e=C(t[0]),u=C(t[1]);return e.length===u.length&&e.length===I(e,u).length},$setIntersection:function(n,r){var t=K(n,r,null);return I(t[0],t[1])},$setDifference:function(n,r){var t=K(n,r,null);return t[0].filter($.bind(null,t[1]))},$setUnion:function(n,r){var t=K(n,r,null);return S(t[0],t[1])},$setIsSubset:function(n,r){var t=K(n,r,null);return I(t[0],t[1]).length===t[0].length},$anyElementTrue:function(n,r){var t=K(n,r,null)[0];return t.some(m)},$allElementsTrue:function(n,r){var t=K(n,r,null)[0];return t.every(m)}},$n={$cond:function(n,r){var t,e,u;if(f(r)){if(3!=r.length)throw new Error("Invalid arguments for $cond operator");t=r[0],e=r[1],u=r[2]}else s(r)&&(t=r["if"],e=r.then,u=r["else"]);var i=K(n,t,null);return i?K(n,e,null):K(n,u,null)},$switch:function(n,r){if(!r.branches)throw new Error("Invalid arguments for $switch operator");var t=r.branches.find(function(r){if(!r["case"]||!r.then)throw new Error("Invalid arguments for $switch operator");return K(n,r["case"],null)});if(t)return K(n,t.then,null);if(r["default"])return K(n,r["default"],null);throw new Error("Invalid arguments for $switch operator")},$ifNull:function(n,e){t(f(e)&&2===e.length,"Invalid arguments for $ifNull operator");var u=K(n,e,null);return null===u[0]||u[0]===r?u[1]:u[0]}},bn={$cmp:function(n,r){var t=K(n,r,null);return t[0]>t[1]?1:t[0]<t[1]?-1:0}};["$eq","$ne","$gt","$gte","$lt","$lte","$in","$nin"].forEach(function(n){bn[n]=function(r,t){var e=K(r,t,null);return sn[n](e[0],e[1])}});var mn={$size:function(n,t){var e=K(n,t,null);return f(e)?e.length:r}},wn={$literal:function(n,r){return r}},On={$map:function(n,r){var t=K(n,r.input,null);if(!f(t))throw new Error("Input expression for $map must resolve to an array");var e=r.as,u=r["in"],i="$"+e,o=n[i];return t.map(function(r){n[i]=r;var t=K(n,u,null);return y(o)?delete n[i]:n[i]=o,t})},$let:function(n,r){var t=r.vars,e=r["in"],u={},i=Object.keys(t);i.forEach(function(r){var e=K(n,t[r],null),i="$"+r;u[i]=n[i],n[i]=e});var o=K(n,e,null);return i.forEach(function(r){var t="$"+r;y(u[t])?delete n[t]:n[t]=u[t]}),o}},jn={$and:function(n,r){var t=K(n,r,null);return m(t)&&t.every(m)},$or:function(n,r){var t=K(n,r,null);return m(t)&&t.some(m)},$not:function(n,r){return!K(n,r[0],null)}},En=Object.assign({},mn,dn,jn,bn,$n,gn,wn,yn,vn,On),_n={$$ROOT:function(n,r,t){return t.root},$$CURRENT:function(n,r,t){return n}},kn={$$KEEP:function(n,r,t){return n},$$PRUNE:function(n,t,e){return r},$$DESCEND:function(n,r,t){if(!_(r,"$cond"))return n;var e;return k(n,function(u,i){h(u)&&(f(u)?(e=[],u.forEach(function(n,u){s(n)&&(n=q(n,r,t)),y(n)||e.push(n)})):e=q(u,r,t),y(e)?delete n[i]:n[i]=e)}),n}},xn=Object.keys(_n),In=Object.keys(kn),Sn=nn.OP_QUERY="query",An=nn.OP_GROUP="group",Mn=nn.OP_AGGREGATE="aggregate",Cn=nn.OP_PIPELINE="pipeline",qn=nn.OP_PROJECTION="projection",Nn={aggregate:En,group:pn,pipeline:cn,projection:hn,query:ln},Tn={"%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],"%%":"%"},Rn=[c,a,l,p,g,d,y]}(this);
//# sourceMappingURL=dist/mingo.min.map
{
"name": "mingo",
"version": "0.8.1",
"version": "0.9.0",
"description": "JavaScript implementation of MongoDB query language",

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

@@ -27,3 +27,3 @@ # Mingo

- Aggregation Framework Operators
- Pipeline Operators (`$group`, `$match`, `$project`, `$sort`, `$limit`, `$unwind`, `$skip`)
- Pipeline Operators (`$group`,`$match`,`$project`,`$sort`,`$limit`,`$unwind`,`$skip`,`$count`,`$replaceRoot`,`$redact`,`$sample`,`$sortByCount`,`$addFields`)
- Group Operators (`$addToSet`, `$sum`, `$max`, `$min`, `$avg`, `$push`, `$first`, `$last`)

@@ -35,6 +35,8 @@ - Projection Operators (`$elemMatch`, `$slice`)

- Comparisons Operators (`$cmp`, `$gt`, `$gte`, `$lt`, `$lte`, `$ne`, `$nin`, `$in`)
- Conditional Operators (`$cond`, `$ifNull`)
- Date Operators (`$dayOfYear`, `$dayOfMonth`, `$dayOfWeek`, `$year`, `$month`, `$week`, `$hour`, `$minute`, `$second`, `$millisecond`, `$dateToString`)
- Conditional Operators (`$cond`, `$switch`, `$ifNull`)
- Date Operators
(`$dayOfYear`, `$dayOfMonth`, `$dayOfWeek`, `$year`, `$month`, `$week`, `$hour`, `$minute`, `$second`, `$millisecond`, `$dateToString`)
- Literal Operators (`$literal`)
- Set Operators (`$setEquals`, `$setIntersection`, `$setDifference`, `$setUnion`, `$setIsSubset`, `$anyElementTrue`, `$allElementsTrue`)
- Set Operators
(`$setEquals`, `$setIntersection`, `$setDifference`, `$setUnion`, `$setIsSubset`, `$anyElementTrue`, `$allElementsTrue`)
- String Operators (`$strcasecmp`, `$concat`, `$substr`, `$toLower`, `$toUpper`)

@@ -45,2 +47,3 @@ - Variable Operators (`$map`, `$let`)

- Match against user-defined types
- Support for system variables (`$$ROOT`,`$$CURRENT`,`$$DESCEND`,`$$PRUNE`,`$$KEEP`)
- JSON stream filtering and projection. *NodeJS only*

@@ -47,0 +50,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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

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