Comparing version 0.8.0 to 0.8.1
@@ -6,2 +6,8 @@ Changelog | ||
## v0.8.1 / 2016-12-08 | ||
- Fix querying deeply nested nested arrays and object equality matching. See [issue#36](https://github.com/kofrasa/mingo/issues/36) | ||
## v0.8.0 / 2016-09-26 | ||
- Make this library zero-dependent | ||
## v0.7.0 / 2016-09-10 | ||
@@ -8,0 +14,0 @@ - Fix nested projections for objects and arrays. See [issue#25](https://github.com/kofrasa/mingo/issues/25) |
@@ -1,2 +0,2 @@ | ||
!function(n,r){"use strict";function t(n,r){if(O(n))throw new Error(r)}function e(n,r){if(O(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 g(n,r){return o(n,"RegExp")}function d(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 O(n){return!n}function w(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){for(var r=0;r<tn.length;r++){var t="[object "+tn[r]+"]",e=Object.prototype.toString.call(n);if(t===e)return tn[r].toLowerCase()}return typeof n}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 S(n,r){var t=[];return nn.apply(t,n),nn.apply(t,r.filter($.bind(null,n))),t}function I(n){e(f(n),"Input must be an Array");var r=[],t=function(n){for(var e=0,u=n.length;u>e;e++)f(n[e])?t(n[e]):nn.call(r,n[e])};return t(n),r}function q(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(!q(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(),!q(i,o))return!1;for(var e=0,c=i.length;c>e;e++){var l=i[e];if(!q(n[l],r[l]))return!1}}return!0}function M(n){var r={},t=[];return n.forEach(function(n){var e=z(n);E(r,e)||(t.push(n),r[e]=0)}),t}function N(n,r){return n[r]}function C(n,t){for(var e=t.split("."),u=n,i=0;i<e.length;i++){var o=null===e[i].match(/^\d+$/);if(o&&f(u)){var c=[];u.forEach(function(n){c.push(C(n,e[i]))}),u=c}else u=N(u,e[i]);if(u===r)break}return u}function Q(n,e){if(y(n))return 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=N(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=N(n,c);u(s),i={},i[c]=s}else if(f(n))a?(i=N(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=N(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?f(n)&&!o?n.forEach(function(n){T(n,u,t)}):t(n,u):f(n)&&!o?n.forEach(function(n){T(n,r,t)}):T(n[u],i,t)}function D(n,r,t){T(n,r,function(n,r){n[r]=t})}function U(n,r){T(n,r,function(n,r){f(n)&&/^\d+$/.test(r)?n.splice(parseInt(r),1):s(n)&&delete n[r]})}function P(n){switch(_(n)){case"array":return n.map(function(n){return P(n)});case"object":return x(n,function(n,r){return P(n)});default:return n}}function F(n){for(var r=0;r<qn.length;r++)if(qn[r](n))return!0;return!1}function R(n){return F(n)||!s(n)&&!f(n)}function Y(n){if(R(n))return g(n)?{$regex:n}:{$eq:n};if(s(n)){var r=Object.keys(n),t=0===A(L(_n),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 B(n,r){return new Array(Math.max(r-String(n).length+1,0)).join("0")+n}function L(n){return Object.keys(Sn[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(P(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(L(En).includes(t))return hn[t](n,e);if(s(e)){var u={};for(var i in e)if(E(e,i)&&(u[i]=V(n,i,e[i]),L(En).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(L(kn).includes(e))return jn[e](n,r);if(l(r)&&r.length>0&&"$"===r[0])return C(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),L(kn).includes(i))){t(1===Object.keys(r).length,"Invalid aggregation expression '"+JSON.stringify(r)+"'"),u=u[i];break}return u;default:return P(r)}}var K,X={};X.VERSION="0.7.0",null!=n&&(K=n.Mingo),X.noConflict=function(){return n.Mingo=K,X};var Z="undefined"!=typeof module&&"undefined"!=typeof require;Z?"undefined"!=typeof module&&(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(!d(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}),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=["Boolean","String","Number","Null","Undefined","Array","Object","Date","Function","RegExp"],en={key:"_id"};if(X._internal=function(){return{assert:t.bind(null),each:k.bind(null),falsey:O.bind(null),flatten:I.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:w.bind(null),isEqual:q.bind(null),isFunction:d.bind(null),isNull:v.bind(null),isNumber:a.bind(null),isObject:s.bind(null),isObjectLike:h.bind(null),isRegExp:g.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:S.bind(null),unique:M.bind(null)}},X.setup=function(n){Object.assign(en,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(!w(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(!L(_n).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 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 un=require("stream").Transform,on=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}),un.call(this,r),void(this._query=n)):new X.Stream(n,r)},on.inherits(X.Stream,un),X.Stream.prototype._transform=function(n,r,t){if(s(n)&&this._query.test(n))if(w(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 hn.$max(this._fetch(),n)},min:function(n){return hn.$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(!w(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(xn).includes(u[0]))throw new Error("Invalid aggregation operator '"+u+"'");u=u[0],n=r instanceof X.Query?cn[u].call(r,n,e[u]):cn[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:C,computeValue:W,ops:L,key:function(){return en.key}});t([kn,En,xn,An,_n].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 _n:Object.keys(e).forEach(function(n){i[n]=function(r,t){return function(e,u){return{test:function(i){var o=C(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 An:Object.keys(e).forEach(function(n){i[n]=function(n,r){return function(t,e,u){var i=C(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(Sn[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 cn={$group:function(n,r){var t=r[en.key],e=G(n,function(n){return W(n,t,t)}),u=[];return delete r[en.key],e.keys.forEach(function(n,t){var i={};y(n)||(i[en.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(w(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!==en.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(en.key)){var h=r[en.key];0!==h&&h!==!1||(u=u.filter($.bind(null,[en.key])),t(!u.includes(en.key),"Must not contain collections _id"),i=w(u))}else u.push(en.key);for(var c=0;c<n.length;c++){var p=n[c],g={},d=!1,v=!1,b=[];i&&b.push(en.key),u.forEach(function(n){var t,e,u=r[n];if(n!==en.key&&0===u&&(v=!0),n===en.key&&w(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&&L(An).includes(i)?(t=sn[i](p,u[i],n),"$slice"===i&&(d=!0)):t=W(p,u,n)}t=P(t),e=P(Q(p,n)),y(e)?y(t)||(g[n]=t):(y(t)||D(e,n,t),Object.assign(g,e))}),(d||v||i)&&(g=Object.assign(P(p),g),b.forEach(function(n){U(g,n)})),e.push(g)}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=P(i);r[e]=n,t.push(r)})}return t},$sort:function(n,r){if(!w(r)&&s(r)){var t=Object.keys(r);t.reverse().forEach(function(t){var e=G(n,function(n){return C(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}},ln={},an={$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 d(r)||(r=new Function("return "+r+";")),{test:function(n){return r.call(n)===!0}}}};Object.assign(ln,an);var fn={$eq:function(n,t){return n=I(j(n)),n=n.find(q.bind(null,t)),n!==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)&&g(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)&&!w(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 g(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(fn).forEach(function(n){ln[n]=function(n,r){return function(t,e){return{test:function(u){var i=C(u,t);return n.call(r,i,e)}}}}(fn[n],fn)});var sn={$:function(n,r,t){throw new Error("$ not implemented")},$elemMatch:function(n,t,e){var u=C(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=C(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)}},hn={$addToSet:function(n,r){var t=n.map(function(n){return W(n,r,null)});return M(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}},pn={$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]}},gn={$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]=w(t[0])?"":t[0].toUpperCase(),t[1]=w(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 w(t)?"":t.toLowerCase()},$toUpper:function(n,r){var t=W(n,r,null);return w(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=B(a.call(this,n,e),s)}t=t.replace(u[i],l)}return t}},vn={$setEquals:function(n,r){var t=W(n,r,null),e=M(t[0]),u=M(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 S(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)}},yn={$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]}},$n={$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){$n[n]=function(r,t){var e=W(r,t,null);return fn[n](e[0],e[1])}});var bn={$size:function(n,t){var e=W(n,t,null);return f(e)?e.length:r}},mn={$literal:function(n,r){return r}},On={$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)}},jn=Object.assign({},bn,pn,wn,$n,yn,dn,mn,vn,gn,On),_n=X.OP_QUERY="query",En=X.OP_GROUP="group",kn=X.OP_AGGREGATE="aggregate",xn=X.OP_PIPELINE="pipeline",An=X.OP_PROJECTION="projection",Sn={aggregate:jn,group:hn,pipeline:cn,projection:sn,query:ln},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],"%%":"%"},qn=[l,c,a,p,v,g,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 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); | ||
//# sourceMappingURL=dist/mingo.min.map |
{ | ||
"name": "mingo", | ||
"version": "0.8.0", | ||
"version": "0.8.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
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
155219
2638
2