Comparing version 0.9.0 to 0.9.1
@@ -6,2 +6,5 @@ Changelog | ||
## v0.9.1 / 2017-02-08 | ||
- Fix resolving system variables with subpaths. See [issue#41](https://github.com/kofrasa/mingo/issues/41) | ||
## v0.9.0 / 2017-02-06 | ||
@@ -8,0 +11,0 @@ - Added support for system variables (`$$ROOT`,`$$CURRENT`) |
@@ -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 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); | ||
!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 q(n){var r={},t=[];return n.forEach(function(n){var e=V(n);_(r,e)||(t.push(n),r[e]=0)}),t}function C(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 D(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=D(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=D(i,c),u(i),i=[i]):(i=[],n.forEach(function(n){var r=D(n,e);y(r)||i.push(r)}),t(i.length>0));else{var s=N(n,a);s=D(s,c),u(s),i={},i[a]=s}}catch(h){i=r}return i}}function Q(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){Q(n,r,t,e)});else{if(e===!0){var c=_(n,i);(!c||y(n[i])||g(n[i]))&&(n[i]={})}Q(n[i],o,t,e)}}function R(n,r,t){Q(n,r,function(n,r){n[r]=t})}function P(n,r){Q(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<Dn.length;r++)if(Dn[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 r;var o=xn.filter(function(n){return 0===r.indexOf(n+".")});return 1===o.length&&(o=o[0],"$$ROOT"===o&&(n=i.root),r=r.substr(o.length)),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.1",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:q.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(qn).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,qn,Cn,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 Cn: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);Q(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(Cn).includes(i)?(t=hn[i](p,u[i],n),"$slice"===i&&(v=!0)):t=K(p,u,n)}t=U(t),e=U(D(p,n)),y(e)?y(t)||(d[n]=t):(y(t)||R(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 C(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 q(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=q(t[0]),u=q(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=C(n,r,t)),y(n)||e.push(n)})):e=C(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",qn=nn.OP_PIPELINE="pipeline",Cn=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],"%%":"%"},Dn=[c,a,l,p,g,d,y]}(this); | ||
//# sourceMappingURL=dist/mingo.min.map |
{ | ||
"name": "mingo", | ||
"version": "0.9.0", | ||
"version": "0.9.1", | ||
"description": "JavaScript implementation of MongoDB query language", | ||
@@ -5,0 +5,0 @@ "main": "mingo.js", |
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
175373
2948