underscore-query
Advanced tools
Comparing version
@@ -12,3 +12,3 @@ // AMD Wrapper | ||
*/ | ||
var QueryBuilder, addToQuery, buildQuery, createUtils, expose, findOne, i, key, len, lookup, makeTest, multipleConditions, parseGetter, parseParamType, parseQuery, parseSubQuery, performQuery, performQuerySingle, ref, root, runQuery, score, single, testModelAttribute, testQueryValue, utils, | ||
var QueryBuilder, addToQuery, buildQuery, createUtils, expose, findOne, i, key, len, lookup, makeTest, multipleConditions, parseGetter, parseParamType, parseQuery, parseSubQuery, performQuery, performQuerySingle, ref, root, runQuery, score, single, tag_sort_order, testModelAttribute, testQueryValue, utils, | ||
hasProp = {}.hasOwnProperty; | ||
@@ -25,3 +25,3 @@ | ||
var i, key, len, ref; | ||
ref = ["every", "some", "filter", "first", "find", "reject", "reduce", "property", "intersection", "isEqual", "keys", "isArray", "result", "map", "includes", "isNaN"]; | ||
ref = ["every", "some", "filter", "first", "find", "reject", "reduce", "property", "sortBy", "indexOf", "intersection", "isEqual", "keys", "isArray", "result", "map", "includes", "isNaN"]; | ||
for (i = 0, len = ref.length; i < len; i++) { | ||
@@ -93,3 +93,3 @@ key = ref[i]; | ||
parseParamType = function(query) { | ||
var key, o, paramType, queryParam, result, type, value; | ||
var key, o, paramType, queryParam, result, size, type, value; | ||
result = []; | ||
@@ -117,2 +117,3 @@ for (key in query) { | ||
case "Object": | ||
size = utils.keys(queryParam).length; | ||
if (utils.includes(utils.compoundKeys, key)) { | ||
@@ -122,3 +123,3 @@ o.type = key; | ||
o.key = null; | ||
} else if (utils.keys(queryParam).length > 1) { | ||
} else if (!(size === 1 || (size === 2 && '$options' in queryParam))) { | ||
o.type = "$and"; | ||
@@ -131,2 +132,8 @@ o.value = parseSubQuery(multipleConditions(key, queryParam)); | ||
value = queryParam[type]; | ||
if (type === "$options") { | ||
if ("$regex" in queryParam || "regexp" in queryParam) { | ||
continue; | ||
} | ||
throw new Error("$options needs a $regex"); | ||
} | ||
if (testQueryValue(type, value)) { | ||
@@ -145,2 +152,10 @@ o.type = type; | ||
break; | ||
case "$regex": | ||
case "$regexp": | ||
if (typeof value === "string") { | ||
o.value = new RegExp(value, queryParam.$options || ""); | ||
} else { | ||
o.value = value; | ||
} | ||
break; | ||
case "$not": | ||
@@ -180,4 +195,6 @@ case "$nor": | ||
tag_sort_order = ["$lt", "$lte", "$gt", "$gte", "$exists", "$has", "$type", "$ne", "$equal", "$mod", "$size", "$between", "$betweene", "$startsWith", "$endsWith", "$like", "$likeI", "$cb", "$regex", "$regexp", "$contains", "$in", "$nin", "$all", "$any", "$deepEqual", "$elemMatch", "$not", "$and", "$or", "$nor"]; | ||
parseSubQuery = function(rawQuery, type) { | ||
var iteratee, key, queryArray, val; | ||
var iteratee, key, queryArray, result, val; | ||
if (utils.isArray(rawQuery)) { | ||
@@ -210,3 +227,12 @@ queryArray = rawQuery; | ||
}; | ||
return utils.reduce(queryArray, iteratee, []); | ||
result = utils.reduce(queryArray, iteratee, []); | ||
return utils.sortBy(result, function(x) { | ||
var index; | ||
index = utils.indexOf(tag_sort_order, x.type); | ||
if (index >= 0) { | ||
return index; | ||
} else { | ||
return Infinity; | ||
} | ||
}); | ||
}; | ||
@@ -227,3 +253,3 @@ | ||
case "$regexp": | ||
return valueType === "RegExp"; | ||
return utils.includes(["RegExp", "String"], valueType); | ||
case "$like": | ||
@@ -292,6 +318,6 @@ case "$likeI": | ||
return utils.isEqual(attr, value); | ||
case "$contains": | ||
return utils.includes(attr, value); | ||
case "$ne": | ||
return attr !== value; | ||
case "$type": | ||
return typeof attr === value; | ||
case "$lt": | ||
@@ -309,2 +335,9 @@ return (value != null) && attr < value; | ||
return (value[0] != null) && (value[1] != null) && (value[0] <= attr && attr <= value[1]); | ||
case "$size": | ||
return attr.length === value; | ||
case "$exists": | ||
case "$has": | ||
return (attr != null) === value; | ||
case "$contains": | ||
return utils.includes(attr, value); | ||
case "$in": | ||
@@ -322,7 +355,2 @@ return utils.includes(value, attr); | ||
}); | ||
case "$size": | ||
return attr.length === value; | ||
case "$exists": | ||
case "$has": | ||
return (attr != null) === value; | ||
case "$like": | ||
@@ -336,4 +364,2 @@ return attr.indexOf(value) !== -1; | ||
return utils.reverseString(attr).indexOf(value) === 0; | ||
case "$type": | ||
return typeof attr === value; | ||
case "$regex": | ||
@@ -340,0 +366,0 @@ case "$regexp": |
@@ -1,1 +0,1 @@ | ||
define(function(){var e,r,t,n,u,s,a,i,o,c,l,f,p,y,$,d,h,g,k,m,v,b,w,x,O,q,Q={}.hasOwnProperty;for(m=this,q={},n=function(e){var r,t,n,u;for(u=["every","some","filter","first","find","reject","reduce","property","intersection","isEqual","keys","isArray","result","map","includes","isNaN"],r=0,n=u.length;n>r;r++)if(t=u[r],q[t]=e[t],!q[t])throw new Error(t+" missing. Please ensure that you first initialize underscore-query with either lodash or underscore")},q.getType=function(e){var r;return r=Object.prototype.toString.call(e).substr(8),r.substr(0,r.length-1)},q.makeObj=function(e,r){var t;return(t={})[e]=r,t},q.reverseString=function(e){return e.toLowerCase().split("").reverse().join("")},q.compoundKeys=["$and","$not","$or","$nor"],q.expectedArrayQueries=["$and","$or","$nor"],c=function(e,r){var t,n,u,s,a,i;for(a=r,n=t=0,s=e.length;s>t;n=++t)if(u=e[n],q.isArray(a))i=e.slice(n),a=q.map(a,function(e){return c(i,e)});else{if(!a)break;a=q.result(a,u)}return a},q.makeGetter=function(e){return e=e.split("."),function(r){return c(e,r)}},f=function(e,r){var t,n,u;t=[];for(n in r)u=r[n],t.push(q.makeObj(e,q.makeObj(n,u)));return t},y=function(e){var r,t,n,u,s,a,i;s=[];for(r in e)if(Q.call(e,r)){switch(u=e[r],t={key:r},(null!=u?u.$boost:void 0)&&(t.boost=u.$boost,delete u.$boost),-1!==r.indexOf(".")&&(t.getter=q.makeGetter(r)),n=q.getType(u)){case"RegExp":case"Date":t.type="$"+n.toLowerCase(),t.value=u;break;case"Object":if(q.includes(q.compoundKeys,r))t.type=r,t.value=d(u,r),t.key=null;else if(q.keys(u).length>1)t.type="$and",t.value=d(f(r,u)),t.key=null;else for(a in u)if(Q.call(u,a)){if(i=u[a],!O(a,i))throw new Error("Query value ("+i+") doesn't match query type: ("+a+")");switch(t.type=a,a){case"$elemMatch":t.value=w($(i));break;case"$endsWith":t.value=q.reverseString(i);break;case"$likeI":case"$startsWith":t.value=i.toLowerCase();break;case"$not":case"$nor":case"$or":case"$and":t.value=d(q.makeObj(t.key,i)),t.key=null;break;case"$computed":t=q.first(y(q.makeObj(r,i))),t.getter=q.makeGetter(r);break;default:t.value=i}}break;default:t.type="$equal",t.value=u}"$equal"===t.type&&q.includes(["Object","Array"],n)?t.type="$deepEqual":q.isNaN(t.value)&&(t.type="$deepEqual"),s.push(t)}return s},d=function(e,r){var t,n,u,s;return u=q.isArray(e)?e:function(){var r;r=[];for(n in e)Q.call(e,n)&&(s=e[n],r.push(q.makeObj(n,s)));return r}(),t=function(e,t){var n;return n=y(t),"$or"===r&&n.length>=2?(e.push({type:"$and",parsedQuery:n}),e):e.concat(n)},q.reduce(u,t,[])},O=function(e,r){var t;switch(t=q.getType(r),e){case"$in":case"$nin":case"$all":case"$any":return"Array"===t;case"$size":return"Number"===t;case"$regex":case"$regexp":return"RegExp"===t;case"$like":case"$likeI":return"String"===t;case"$between":case"$mod":return"Array"===t&&2===r.length;case"$cb":return"Function"===t;default:return!0}},x=function(e,r){var t;switch(t=q.getType(r),e){case"$like":case"$likeI":case"$regex":case"$startsWith":case"$endsWith":return"String"===t;case"$contains":case"$all":case"$any":case"$elemMatch":return"Array"===t;case"$size":return q.includes(["String","Array"],t);case"$in":case"$nin":return null!=r;default:return!0}},h=function(e,r,t,n,u){switch(e){case"$and":case"$or":case"$nor":case"$not":return g(e,r,u,n);case"$cb":return r.call(n,t);case"$elemMatch":return v(t,r,null,!0)}switch("function"==typeof r&&(r=r()),e){case"$equal":return q.isArray(t)?q.includes(t,r):t===r;case"$deepEqual":return q.isEqual(t,r);case"$contains":return q.includes(t,r);case"$ne":return t!==r;case"$lt":return null!=r&&r>t;case"$gt":return null!=r&&t>r;case"$lte":return null!=r&&r>=t;case"$gte":return null!=r&&t>=r;case"$between":return null!=r[0]&&null!=r[1]&&r[0]<t&&t<r[1];case"$betweene":return null!=r[0]&&null!=r[1]&&r[0]<=t&&t<=r[1];case"$in":return q.includes(r,t);case"$nin":return!q.includes(r,t);case"$all":return q.every(r,function(e){return q.includes(t,e)});case"$any":return q.some(t,function(e){return q.includes(r,e)});case"$size":return t.length===r;case"$exists":case"$has":return null!=t===r;case"$like":return-1!==t.indexOf(r);case"$likeI":return-1!==t.toLowerCase().indexOf(r);case"$startsWith":return 0===t.toLowerCase().indexOf(r);case"$endsWith":return 0===q.reverseString(t).indexOf(r);case"$type":return typeof t===r;case"$regex":case"$regexp":return r.test(t);case"$mod":return t%r[0]===r[1];default:return!1}},w=function(e,r,t){var n;if(r&&(r=p(r)),t){if(1!==e.length)throw new Error("score operations currently don't work on compound queries");if(n=e[0],"$and"!==n.type)throw new Error("score operations only work on $and queries (not "+n.type);return function(e){return e._score=g(n.type,n.parsedQuery,r,e,!0),e}}return function(u){var s,a;for(s=0,a=e.length;a>s;s++)if(n=e[s],!g(n.type,n.parsedQuery,r,u,t))return!1;return!0}},g=function(e,r,t,n,u){var s,a,i,o,c,l,f,p,y,$;for(c=0,p=0,y=1/r.length,i=0,o=r.length;o>i;i++)switch(l=r[i],s=t?t(n,l.key):l.getter?l.getter(n,l.key):n[l.key],$=x(l.type,s),$&&($=l.parsedQuery?w([l],t,u)(n):h(l.type,l.value,s,n,t)),$&&(c++,u&&(a=null!=(f=l.boost)?f:1,p+=y*a)),e){case"$and":if(!u&&!$)return!1;break;case"$not":if($)return!1;break;case"$or":if($)return!0;break;case"$nor":if($)return!1;break;default:throw new Error("Invalid compound method")}return u?p:"$not"===e?0===c:"$or"!==e},$=function(e){var r,t,n,u,s,a,i,o,c,l;if(i=q.keys(e),!i.length)return[];for(r=q.intersection(q.compoundKeys,i),t=0,s=r.length;s>t;t++)if(c=r[t],!q.isArray(e[c])&&q.includes(q.expectedArrayQueries,c))throw new Error(c+" query must be an array");if(0===r.length)return[{type:"$and",parsedQuery:d(e)}];if(r.length!==i.length){q.includes(r,"$and")||(e.$and={},r.unshift("$and"));for(u in e)Q.call(e,u)&&(l=e[u],q.includes(q.compundKeys,u)||(e.$and[u]=l,delete e[u]))}for(o=[],n=0,a=r.length;a>n;n++)c=r[n],o.push({type:c,parsedQuery:d(e[c],c)});return o},p=function(e){return"string"==typeof e?function(r,t){return r[e](t)}:e},e=function(){function e(e,r){this.items=e,this._getter=r,this.theQuery={}}return e.prototype.all=function(e,r){return e&&(this.items=e),e=this.indexes?this.getIndexedItems(this.items):this.items,v(e,this.theQuery,this._getter,r)},e.prototype.chain=function(){return _.chain(this.all.apply(this,arguments))},e.prototype.tester=function(){return l(this.theQuery,this._getter)},e.prototype.first=function(e){return this.all(e,!0)},e.prototype.getter=function(e){return this._getter=e,this},e}(),r=function(e){return function(r,t){var n;return t&&(r=q.makeObj(r,t)),null==(n=this.theQuery)[e]&&(n[e]=[]),this.theQuery[e].push(r),this}},k=q.compoundKeys,a=0,o=k.length;o>a;a++)i=k[a],e.prototype[i.substr(1)]=r(i);return e.prototype.find=e.prototype.query=e.prototype.run=e.prototype.all,t=function(r,t){return new e(r,t)},l=function(e,r){return w($(e),p(r))},s=function(e,r,t){return v(e,r,t,!0)},v=function(e,r,n,u,s){var a;return arguments.length<2?t.apply(this,arguments):(n&&(n=p(n)),"Function"!==q.getType(r)&&(r=w($(r),n,s)),(a=s?q.map:u?q.find:q.filter)(e,r))},b=function(e,r,t){return v(e,r,t,!1,!0)},v.build=t,v.parse=$,v.findOne=v.first=s,v.score=b,v.tester=v.testWith=l,v.getter=v.pluckWith=q.makeGetter,u=function(e,r){return null==r&&(r=!0),n(e),r&&e.mixin({query:v,q:v}),v},exports&&("undefined"!=typeof module&&null!==module?module.exports:void 0)?module.exports=u:m._?u(m._):u}); | ||
define(function(){var e,r,t,n,s,u,a,i,o,c,l,$,p,f,y,d,h,g,m,k,b,v,w,x,O,q,E,Q={}.hasOwnProperty;k=this,E={},n=function(e){var r,t,n,s;for(s=["every","some","filter","first","find","reject","reduce","property","sortBy","indexOf","intersection","isEqual","keys","isArray","result","map","includes","isNaN"],r=0,n=s.length;n>r;r++)if(t=s[r],E[t]=e[t],!E[t])throw new Error(t+" missing. Please ensure that you first initialize underscore-query with either lodash or underscore")},E.getType=function(e){var r;return r=Object.prototype.toString.call(e).substr(8),r.substr(0,r.length-1)},E.makeObj=function(e,r){var t;return(t={})[e]=r,t},E.reverseString=function(e){return e.toLowerCase().split("").reverse().join("")},E.compoundKeys=["$and","$not","$or","$nor"],E.expectedArrayQueries=["$and","$or","$nor"],c=function(e,r){var t,n,s,u,a,i;for(a=r,n=t=0,u=e.length;u>t;n=++t)if(s=e[n],E.isArray(a))i=e.slice(n),a=E.map(a,function(e){return c(i,e)});else{if(!a)break;a=E.result(a,s)}return a},E.makeGetter=function(e){return e=e.split("."),function(r){return c(e,r)}},$=function(e,r){var t,n,s;t=[];for(n in r)s=r[n],t.push(E.makeObj(e,E.makeObj(n,s)));return t},f=function(e){var r,t,n,s,u,a,i,o;u=[];for(r in e)if(Q.call(e,r)){switch(s=e[r],t={key:r},(null!=s?s.$boost:void 0)&&(t.boost=s.$boost,delete s.$boost),-1!==r.indexOf(".")&&(t.getter=E.makeGetter(r)),n=E.getType(s)){case"RegExp":case"Date":t.type="$"+n.toLowerCase(),t.value=s;break;case"Object":if(a=E.keys(s).length,E.includes(E.compoundKeys,r))t.type=r,t.value=d(s,r),t.key=null;else if(1===a||2===a&&"$options"in s){for(i in s)if(Q.call(s,i)){if(o=s[i],"$options"===i){if("$regex"in s||"regexp"in s)continue;throw new Error("$options needs a $regex")}if(!q(i,o))throw new Error("Query value ("+o+") doesn't match query type: ("+i+")");switch(t.type=i,i){case"$elemMatch":t.value=w(y(o));break;case"$endsWith":t.value=E.reverseString(o);break;case"$likeI":case"$startsWith":t.value=o.toLowerCase();break;case"$regex":case"$regexp":"string"==typeof o?t.value=new RegExp(o,s.$options||""):t.value=o;break;case"$not":case"$nor":case"$or":case"$and":t.value=d(E.makeObj(t.key,o)),t.key=null;break;case"$computed":t=E.first(f(E.makeObj(r,o))),t.getter=E.makeGetter(r);break;default:t.value=o}}}else t.type="$and",t.value=d($(r,s)),t.key=null;break;default:t.type="$equal",t.value=s}"$equal"===t.type&&E.includes(["Object","Array"],n)?t.type="$deepEqual":E.isNaN(t.value)&&(t.type="$deepEqual"),u.push(t)}return u},x=["$lt","$lte","$gt","$gte","$exists","$has","$type","$ne","$equal","$mod","$size","$between","$betweene","$startsWith","$endsWith","$like","$likeI","$cb","$regex","$regexp","$contains","$in","$nin","$all","$any","$deepEqual","$elemMatch","$not","$and","$or","$nor"],d=function(e,r){var t,n,s,u,a;return s=E.isArray(e)?e:function(){var r;r=[];for(n in e)Q.call(e,n)&&(a=e[n],r.push(E.makeObj(n,a)));return r}(),t=function(e,t){var n;return n=f(t),"$or"===r&&n.length>=2?(e.push({type:"$and",parsedQuery:n}),e):e.concat(n)},u=E.reduce(s,t,[]),E.sortBy(u,function(e){var r;return r=E.indexOf(x,e.type),r>=0?r:1/0})},q=function(e,r){var t;switch(t=E.getType(r),e){case"$in":case"$nin":case"$all":case"$any":return"Array"===t;case"$size":return"Number"===t;case"$regex":case"$regexp":return E.includes(["RegExp","String"],t);case"$like":case"$likeI":return"String"===t;case"$between":case"$mod":return"Array"===t&&2===r.length;case"$cb":return"Function"===t;default:return!0}},O=function(e,r){var t;switch(t=E.getType(r),e){case"$like":case"$likeI":case"$regex":case"$startsWith":case"$endsWith":return"String"===t;case"$contains":case"$all":case"$any":case"$elemMatch":return"Array"===t;case"$size":return E.includes(["String","Array"],t);case"$in":case"$nin":return null!=r;default:return!0}},h=function(e,r,t,n,s){switch(e){case"$and":case"$or":case"$nor":case"$not":return g(e,r,s,n);case"$cb":return r.call(n,t);case"$elemMatch":return b(t,r,null,!0)}switch("function"==typeof r&&(r=r()),e){case"$equal":return E.isArray(t)?E.includes(t,r):t===r;case"$deepEqual":return E.isEqual(t,r);case"$ne":return t!==r;case"$type":return typeof t===r;case"$lt":return null!=r&&r>t;case"$gt":return null!=r&&t>r;case"$lte":return null!=r&&r>=t;case"$gte":return null!=r&&t>=r;case"$between":return null!=r[0]&&null!=r[1]&&r[0]<t&&t<r[1];case"$betweene":return null!=r[0]&&null!=r[1]&&r[0]<=t&&t<=r[1];case"$size":return t.length===r;case"$exists":case"$has":return null!=t===r;case"$contains":return E.includes(t,r);case"$in":return E.includes(r,t);case"$nin":return!E.includes(r,t);case"$all":return E.every(r,function(e){return E.includes(t,e)});case"$any":return E.some(t,function(e){return E.includes(r,e)});case"$like":return-1!==t.indexOf(r);case"$likeI":return-1!==t.toLowerCase().indexOf(r);case"$startsWith":return 0===t.toLowerCase().indexOf(r);case"$endsWith":return 0===E.reverseString(t).indexOf(r);case"$regex":case"$regexp":return r.test(t);case"$mod":return t%r[0]===r[1];default:return!1}},w=function(e,r,t){var n;if(r&&(r=p(r)),t){if(1!==e.length)throw new Error("score operations currently don't work on compound queries");if(n=e[0],"$and"!==n.type)throw new Error("score operations only work on $and queries (not "+n.type);return function(e){return e._score=g(n.type,n.parsedQuery,r,e,!0),e}}return function(s){var u,a;for(u=0,a=e.length;a>u;u++)if(n=e[u],!g(n.type,n.parsedQuery,r,s,t))return!1;return!0}},g=function(e,r,t,n,s){var u,a,i,o,c,l,$,p,f,y;for(c=0,p=0,f=1/r.length,i=0,o=r.length;o>i;i++)switch(l=r[i],u=t?t(n,l.key):l.getter?l.getter(n,l.key):n[l.key],y=O(l.type,u),y&&(y=l.parsedQuery?w([l],t,s)(n):h(l.type,l.value,u,n,t)),y&&(c++,s&&(a=null!=($=l.boost)?$:1,p+=f*a)),e){case"$and":if(!s&&!y)return!1;break;case"$not":if(y)return!1;break;case"$or":if(y)return!0;break;case"$nor":if(y)return!1;break;default:throw new Error("Invalid compound method")}return s?p:"$not"===e?0===c:"$or"!==e},y=function(e){var r,t,n,s,u,a,i,o,c,l;if(i=E.keys(e),!i.length)return[];for(r=E.intersection(E.compoundKeys,i),t=0,u=r.length;u>t;t++)if(c=r[t],!E.isArray(e[c])&&E.includes(E.expectedArrayQueries,c))throw new Error(c+" query must be an array");if(0===r.length)return[{type:"$and",parsedQuery:d(e)}];if(r.length!==i.length){E.includes(r,"$and")||(e.$and={},r.unshift("$and"));for(s in e)Q.call(e,s)&&(l=e[s],E.includes(E.compundKeys,s)||(e.$and[s]=l,delete e[s]))}for(o=[],n=0,a=r.length;a>n;n++)c=r[n],o.push({type:c,parsedQuery:d(e[c],c)});return o},p=function(e){return"string"==typeof e?function(r,t){return r[e](t)}:e},e=function(){function e(e,r){this.items=e,this._getter=r,this.theQuery={}}return e.prototype.all=function(e,r){return e&&(this.items=e),e=this.indexes?this.getIndexedItems(this.items):this.items,b(e,this.theQuery,this._getter,r)},e.prototype.chain=function(){return _.chain(this.all.apply(this,arguments))},e.prototype.tester=function(){return l(this.theQuery,this._getter)},e.prototype.first=function(e){return this.all(e,!0)},e.prototype.getter=function(e){return this._getter=e,this},e}(),r=function(e){return function(r,t){var n;return t&&(r=E.makeObj(r,t)),null==(n=this.theQuery)[e]&&(n[e]=[]),this.theQuery[e].push(r),this}},m=E.compoundKeys;for(a=0,o=m.length;o>a;a++)i=m[a],e.prototype[i.substr(1)]=r(i);return e.prototype.find=e.prototype.query=e.prototype.run=e.prototype.all,t=function(r,t){return new e(r,t)},l=function(e,r){return w(y(e),p(r))},u=function(e,r,t){return b(e,r,t,!0)},b=function(e,r,n,s,u){var a;return arguments.length<2?t.apply(this,arguments):(n&&(n=p(n)),"Function"!==E.getType(r)&&(r=w(y(r),n,u)),(a=u?E.map:s?E.find:E.filter)(e,r))},v=function(e,r,t){return b(e,r,t,!1,!0)},b.build=t,b.parse=y,b.findOne=b.first=u,b.score=v,b.tester=b.testWith=l,b.getter=b.pluckWith=E.makeGetter,s=function(e,r){return null==r&&(r=!0),n(e),r&&e.mixin({query:b,q:b}),b},exports&&("undefined"!=typeof module&&null!==module?module.exports:void 0)?module.exports=s:k._?s(k._):s}); |
@@ -12,3 +12,3 @@ | ||
(function() { | ||
var QueryBuilder, addToQuery, buildQuery, createUtils, expose, findOne, i, key, len, lookup, makeTest, multipleConditions, parseGetter, parseParamType, parseQuery, parseSubQuery, performQuery, performQuerySingle, ref, root, runQuery, score, single, testModelAttribute, testQueryValue, utils, | ||
var QueryBuilder, addToQuery, buildQuery, createUtils, expose, findOne, i, key, len, lookup, makeTest, multipleConditions, parseGetter, parseParamType, parseQuery, parseSubQuery, performQuery, performQuerySingle, ref, root, runQuery, score, single, tag_sort_order, testModelAttribute, testQueryValue, utils, | ||
hasProp = {}.hasOwnProperty; | ||
@@ -25,3 +25,3 @@ | ||
var i, key, len, ref; | ||
ref = ["every", "some", "filter", "first", "find", "reject", "reduce", "property", "intersection", "isEqual", "keys", "isArray", "result", "map", "includes", "isNaN"]; | ||
ref = ["every", "some", "filter", "first", "find", "reject", "reduce", "property", "sortBy", "indexOf", "intersection", "isEqual", "keys", "isArray", "result", "map", "includes", "isNaN"]; | ||
for (i = 0, len = ref.length; i < len; i++) { | ||
@@ -93,3 +93,3 @@ key = ref[i]; | ||
parseParamType = function(query) { | ||
var key, o, paramType, queryParam, result, type, value; | ||
var key, o, paramType, queryParam, result, size, type, value; | ||
result = []; | ||
@@ -117,2 +117,3 @@ for (key in query) { | ||
case "Object": | ||
size = utils.keys(queryParam).length; | ||
if (utils.includes(utils.compoundKeys, key)) { | ||
@@ -122,3 +123,3 @@ o.type = key; | ||
o.key = null; | ||
} else if (utils.keys(queryParam).length > 1) { | ||
} else if (!(size === 1 || (size === 2 && '$options' in queryParam))) { | ||
o.type = "$and"; | ||
@@ -131,2 +132,8 @@ o.value = parseSubQuery(multipleConditions(key, queryParam)); | ||
value = queryParam[type]; | ||
if (type === "$options") { | ||
if ("$regex" in queryParam || "regexp" in queryParam) { | ||
continue; | ||
} | ||
throw new Error("$options needs a $regex"); | ||
} | ||
if (testQueryValue(type, value)) { | ||
@@ -145,2 +152,10 @@ o.type = type; | ||
break; | ||
case "$regex": | ||
case "$regexp": | ||
if (typeof value === "string") { | ||
o.value = new RegExp(value, queryParam.$options || ""); | ||
} else { | ||
o.value = value; | ||
} | ||
break; | ||
case "$not": | ||
@@ -180,4 +195,6 @@ case "$nor": | ||
tag_sort_order = ["$lt", "$lte", "$gt", "$gte", "$exists", "$has", "$type", "$ne", "$equal", "$mod", "$size", "$between", "$betweene", "$startsWith", "$endsWith", "$like", "$likeI", "$cb", "$regex", "$regexp", "$contains", "$in", "$nin", "$all", "$any", "$deepEqual", "$elemMatch", "$not", "$and", "$or", "$nor"]; | ||
parseSubQuery = function(rawQuery, type) { | ||
var iteratee, key, queryArray, val; | ||
var iteratee, key, queryArray, result, val; | ||
if (utils.isArray(rawQuery)) { | ||
@@ -210,3 +227,12 @@ queryArray = rawQuery; | ||
}; | ||
return utils.reduce(queryArray, iteratee, []); | ||
result = utils.reduce(queryArray, iteratee, []); | ||
return utils.sortBy(result, function(x) { | ||
var index; | ||
index = utils.indexOf(tag_sort_order, x.type); | ||
if (index >= 0) { | ||
return index; | ||
} else { | ||
return Infinity; | ||
} | ||
}); | ||
}; | ||
@@ -227,3 +253,3 @@ | ||
case "$regexp": | ||
return valueType === "RegExp"; | ||
return utils.includes(["RegExp", "String"], valueType); | ||
case "$like": | ||
@@ -292,6 +318,6 @@ case "$likeI": | ||
return utils.isEqual(attr, value); | ||
case "$contains": | ||
return utils.includes(attr, value); | ||
case "$ne": | ||
return attr !== value; | ||
case "$type": | ||
return typeof attr === value; | ||
case "$lt": | ||
@@ -309,2 +335,9 @@ return (value != null) && attr < value; | ||
return (value[0] != null) && (value[1] != null) && (value[0] <= attr && attr <= value[1]); | ||
case "$size": | ||
return attr.length === value; | ||
case "$exists": | ||
case "$has": | ||
return (attr != null) === value; | ||
case "$contains": | ||
return utils.includes(attr, value); | ||
case "$in": | ||
@@ -322,7 +355,2 @@ return utils.includes(value, attr); | ||
}); | ||
case "$size": | ||
return attr.length === value; | ||
case "$exists": | ||
case "$has": | ||
return (attr != null) === value; | ||
case "$like": | ||
@@ -336,4 +364,2 @@ return attr.indexOf(value) !== -1; | ||
return utils.reverseString(attr).indexOf(value) === 0; | ||
case "$type": | ||
return typeof attr === value; | ||
case "$regex": | ||
@@ -340,0 +366,0 @@ case "$regexp": |
@@ -1,1 +0,1 @@ | ||
(function(){var e,r,t,n,u,s,a,i,o,c,l,f,p,y,$,d,h,g,k,m,v,b,w,x,O,q,Q={}.hasOwnProperty;for(m=this,q={},n=function(e){var r,t,n,u;for(u=["every","some","filter","first","find","reject","reduce","property","intersection","isEqual","keys","isArray","result","map","includes","isNaN"],r=0,n=u.length;n>r;r++)if(t=u[r],q[t]=e[t],!q[t])throw new Error(t+" missing. Please ensure that you first initialize underscore-query with either lodash or underscore")},q.getType=function(e){var r;return r=Object.prototype.toString.call(e).substr(8),r.substr(0,r.length-1)},q.makeObj=function(e,r){var t;return(t={})[e]=r,t},q.reverseString=function(e){return e.toLowerCase().split("").reverse().join("")},q.compoundKeys=["$and","$not","$or","$nor"],q.expectedArrayQueries=["$and","$or","$nor"],c=function(e,r){var t,n,u,s,a,i;for(a=r,n=t=0,s=e.length;s>t;n=++t)if(u=e[n],q.isArray(a))i=e.slice(n),a=q.map(a,function(e){return c(i,e)});else{if(!a)break;a=q.result(a,u)}return a},q.makeGetter=function(e){return e=e.split("."),function(r){return c(e,r)}},f=function(e,r){var t,n,u;t=[];for(n in r)u=r[n],t.push(q.makeObj(e,q.makeObj(n,u)));return t},y=function(e){var r,t,n,u,s,a,i;s=[];for(r in e)if(Q.call(e,r)){switch(u=e[r],t={key:r},(null!=u?u.$boost:void 0)&&(t.boost=u.$boost,delete u.$boost),-1!==r.indexOf(".")&&(t.getter=q.makeGetter(r)),n=q.getType(u)){case"RegExp":case"Date":t.type="$"+n.toLowerCase(),t.value=u;break;case"Object":if(q.includes(q.compoundKeys,r))t.type=r,t.value=d(u,r),t.key=null;else if(q.keys(u).length>1)t.type="$and",t.value=d(f(r,u)),t.key=null;else for(a in u)if(Q.call(u,a)){if(i=u[a],!O(a,i))throw new Error("Query value ("+i+") doesn't match query type: ("+a+")");switch(t.type=a,a){case"$elemMatch":t.value=w($(i));break;case"$endsWith":t.value=q.reverseString(i);break;case"$likeI":case"$startsWith":t.value=i.toLowerCase();break;case"$not":case"$nor":case"$or":case"$and":t.value=d(q.makeObj(t.key,i)),t.key=null;break;case"$computed":t=q.first(y(q.makeObj(r,i))),t.getter=q.makeGetter(r);break;default:t.value=i}}break;default:t.type="$equal",t.value=u}"$equal"===t.type&&q.includes(["Object","Array"],n)?t.type="$deepEqual":q.isNaN(t.value)&&(t.type="$deepEqual"),s.push(t)}return s},d=function(e,r){var t,n,u,s;return u=q.isArray(e)?e:function(){var r;r=[];for(n in e)Q.call(e,n)&&(s=e[n],r.push(q.makeObj(n,s)));return r}(),t=function(e,t){var n;return n=y(t),"$or"===r&&n.length>=2?(e.push({type:"$and",parsedQuery:n}),e):e.concat(n)},q.reduce(u,t,[])},O=function(e,r){var t;switch(t=q.getType(r),e){case"$in":case"$nin":case"$all":case"$any":return"Array"===t;case"$size":return"Number"===t;case"$regex":case"$regexp":return"RegExp"===t;case"$like":case"$likeI":return"String"===t;case"$between":case"$mod":return"Array"===t&&2===r.length;case"$cb":return"Function"===t;default:return!0}},x=function(e,r){var t;switch(t=q.getType(r),e){case"$like":case"$likeI":case"$regex":case"$startsWith":case"$endsWith":return"String"===t;case"$contains":case"$all":case"$any":case"$elemMatch":return"Array"===t;case"$size":return q.includes(["String","Array"],t);case"$in":case"$nin":return null!=r;default:return!0}},h=function(e,r,t,n,u){switch(e){case"$and":case"$or":case"$nor":case"$not":return g(e,r,u,n);case"$cb":return r.call(n,t);case"$elemMatch":return v(t,r,null,!0)}switch("function"==typeof r&&(r=r()),e){case"$equal":return q.isArray(t)?q.includes(t,r):t===r;case"$deepEqual":return q.isEqual(t,r);case"$contains":return q.includes(t,r);case"$ne":return t!==r;case"$lt":return null!=r&&r>t;case"$gt":return null!=r&&t>r;case"$lte":return null!=r&&r>=t;case"$gte":return null!=r&&t>=r;case"$between":return null!=r[0]&&null!=r[1]&&r[0]<t&&t<r[1];case"$betweene":return null!=r[0]&&null!=r[1]&&r[0]<=t&&t<=r[1];case"$in":return q.includes(r,t);case"$nin":return!q.includes(r,t);case"$all":return q.every(r,function(e){return q.includes(t,e)});case"$any":return q.some(t,function(e){return q.includes(r,e)});case"$size":return t.length===r;case"$exists":case"$has":return null!=t===r;case"$like":return-1!==t.indexOf(r);case"$likeI":return-1!==t.toLowerCase().indexOf(r);case"$startsWith":return 0===t.toLowerCase().indexOf(r);case"$endsWith":return 0===q.reverseString(t).indexOf(r);case"$type":return typeof t===r;case"$regex":case"$regexp":return r.test(t);case"$mod":return t%r[0]===r[1];default:return!1}},w=function(e,r,t){var n;if(r&&(r=p(r)),t){if(1!==e.length)throw new Error("score operations currently don't work on compound queries");if(n=e[0],"$and"!==n.type)throw new Error("score operations only work on $and queries (not "+n.type);return function(e){return e._score=g(n.type,n.parsedQuery,r,e,!0),e}}return function(u){var s,a;for(s=0,a=e.length;a>s;s++)if(n=e[s],!g(n.type,n.parsedQuery,r,u,t))return!1;return!0}},g=function(e,r,t,n,u){var s,a,i,o,c,l,f,p,y,$;for(c=0,p=0,y=1/r.length,i=0,o=r.length;o>i;i++)switch(l=r[i],s=t?t(n,l.key):l.getter?l.getter(n,l.key):n[l.key],$=x(l.type,s),$&&($=l.parsedQuery?w([l],t,u)(n):h(l.type,l.value,s,n,t)),$&&(c++,u&&(a=null!=(f=l.boost)?f:1,p+=y*a)),e){case"$and":if(!u&&!$)return!1;break;case"$not":if($)return!1;break;case"$or":if($)return!0;break;case"$nor":if($)return!1;break;default:throw new Error("Invalid compound method")}return u?p:"$not"===e?0===c:"$or"!==e},$=function(e){var r,t,n,u,s,a,i,o,c,l;if(i=q.keys(e),!i.length)return[];for(r=q.intersection(q.compoundKeys,i),t=0,s=r.length;s>t;t++)if(c=r[t],!q.isArray(e[c])&&q.includes(q.expectedArrayQueries,c))throw new Error(c+" query must be an array");if(0===r.length)return[{type:"$and",parsedQuery:d(e)}];if(r.length!==i.length){q.includes(r,"$and")||(e.$and={},r.unshift("$and"));for(u in e)Q.call(e,u)&&(l=e[u],q.includes(q.compundKeys,u)||(e.$and[u]=l,delete e[u]))}for(o=[],n=0,a=r.length;a>n;n++)c=r[n],o.push({type:c,parsedQuery:d(e[c],c)});return o},p=function(e){return"string"==typeof e?function(r,t){return r[e](t)}:e},e=function(){function e(e,r){this.items=e,this._getter=r,this.theQuery={}}return e.prototype.all=function(e,r){return e&&(this.items=e),e=this.indexes?this.getIndexedItems(this.items):this.items,v(e,this.theQuery,this._getter,r)},e.prototype.chain=function(){return _.chain(this.all.apply(this,arguments))},e.prototype.tester=function(){return l(this.theQuery,this._getter)},e.prototype.first=function(e){return this.all(e,!0)},e.prototype.getter=function(e){return this._getter=e,this},e}(),r=function(e){return function(r,t){var n;return t&&(r=q.makeObj(r,t)),null==(n=this.theQuery)[e]&&(n[e]=[]),this.theQuery[e].push(r),this}},k=q.compoundKeys,a=0,o=k.length;o>a;a++)i=k[a],e.prototype[i.substr(1)]=r(i);return e.prototype.find=e.prototype.query=e.prototype.run=e.prototype.all,t=function(r,t){return new e(r,t)},l=function(e,r){return w($(e),p(r))},s=function(e,r,t){return v(e,r,t,!0)},v=function(e,r,n,u,s){var a;return arguments.length<2?t.apply(this,arguments):(n&&(n=p(n)),"Function"!==q.getType(r)&&(r=w($(r),n,s)),(a=s?q.map:u?q.find:q.filter)(e,r))},b=function(e,r,t){return v(e,r,t,!1,!0)},v.build=t,v.parse=$,v.findOne=v.first=s,v.score=b,v.tester=v.testWith=l,v.getter=v.pluckWith=q.makeGetter,u=function(e,r){return null==r&&(r=!0),n(e),r&&e.mixin({query:v,q:v}),v},exports&&("undefined"!=typeof module&&null!==module?module.exports:void 0)?module.exports=u:m._?u(m._):u}).call(this); | ||
(function(){var e,r,t,n,s,u,a,i,o,c,l,$,p,f,y,d,h,g,m,k,b,v,w,x,O,q,E,Q={}.hasOwnProperty;k=this,E={},n=function(e){var r,t,n,s;for(s=["every","some","filter","first","find","reject","reduce","property","sortBy","indexOf","intersection","isEqual","keys","isArray","result","map","includes","isNaN"],r=0,n=s.length;n>r;r++)if(t=s[r],E[t]=e[t],!E[t])throw new Error(t+" missing. Please ensure that you first initialize underscore-query with either lodash or underscore")},E.getType=function(e){var r;return r=Object.prototype.toString.call(e).substr(8),r.substr(0,r.length-1)},E.makeObj=function(e,r){var t;return(t={})[e]=r,t},E.reverseString=function(e){return e.toLowerCase().split("").reverse().join("")},E.compoundKeys=["$and","$not","$or","$nor"],E.expectedArrayQueries=["$and","$or","$nor"],c=function(e,r){var t,n,s,u,a,i;for(a=r,n=t=0,u=e.length;u>t;n=++t)if(s=e[n],E.isArray(a))i=e.slice(n),a=E.map(a,function(e){return c(i,e)});else{if(!a)break;a=E.result(a,s)}return a},E.makeGetter=function(e){return e=e.split("."),function(r){return c(e,r)}},$=function(e,r){var t,n,s;t=[];for(n in r)s=r[n],t.push(E.makeObj(e,E.makeObj(n,s)));return t},f=function(e){var r,t,n,s,u,a,i,o;u=[];for(r in e)if(Q.call(e,r)){switch(s=e[r],t={key:r},(null!=s?s.$boost:void 0)&&(t.boost=s.$boost,delete s.$boost),-1!==r.indexOf(".")&&(t.getter=E.makeGetter(r)),n=E.getType(s)){case"RegExp":case"Date":t.type="$"+n.toLowerCase(),t.value=s;break;case"Object":if(a=E.keys(s).length,E.includes(E.compoundKeys,r))t.type=r,t.value=d(s,r),t.key=null;else if(1===a||2===a&&"$options"in s){for(i in s)if(Q.call(s,i)){if(o=s[i],"$options"===i){if("$regex"in s||"regexp"in s)continue;throw new Error("$options needs a $regex")}if(!q(i,o))throw new Error("Query value ("+o+") doesn't match query type: ("+i+")");switch(t.type=i,i){case"$elemMatch":t.value=w(y(o));break;case"$endsWith":t.value=E.reverseString(o);break;case"$likeI":case"$startsWith":t.value=o.toLowerCase();break;case"$regex":case"$regexp":"string"==typeof o?t.value=new RegExp(o,s.$options||""):t.value=o;break;case"$not":case"$nor":case"$or":case"$and":t.value=d(E.makeObj(t.key,o)),t.key=null;break;case"$computed":t=E.first(f(E.makeObj(r,o))),t.getter=E.makeGetter(r);break;default:t.value=o}}}else t.type="$and",t.value=d($(r,s)),t.key=null;break;default:t.type="$equal",t.value=s}"$equal"===t.type&&E.includes(["Object","Array"],n)?t.type="$deepEqual":E.isNaN(t.value)&&(t.type="$deepEqual"),u.push(t)}return u},x=["$lt","$lte","$gt","$gte","$exists","$has","$type","$ne","$equal","$mod","$size","$between","$betweene","$startsWith","$endsWith","$like","$likeI","$cb","$regex","$regexp","$contains","$in","$nin","$all","$any","$deepEqual","$elemMatch","$not","$and","$or","$nor"],d=function(e,r){var t,n,s,u,a;return s=E.isArray(e)?e:function(){var r;r=[];for(n in e)Q.call(e,n)&&(a=e[n],r.push(E.makeObj(n,a)));return r}(),t=function(e,t){var n;return n=f(t),"$or"===r&&n.length>=2?(e.push({type:"$and",parsedQuery:n}),e):e.concat(n)},u=E.reduce(s,t,[]),E.sortBy(u,function(e){var r;return r=E.indexOf(x,e.type),r>=0?r:1/0})},q=function(e,r){var t;switch(t=E.getType(r),e){case"$in":case"$nin":case"$all":case"$any":return"Array"===t;case"$size":return"Number"===t;case"$regex":case"$regexp":return E.includes(["RegExp","String"],t);case"$like":case"$likeI":return"String"===t;case"$between":case"$mod":return"Array"===t&&2===r.length;case"$cb":return"Function"===t;default:return!0}},O=function(e,r){var t;switch(t=E.getType(r),e){case"$like":case"$likeI":case"$regex":case"$startsWith":case"$endsWith":return"String"===t;case"$contains":case"$all":case"$any":case"$elemMatch":return"Array"===t;case"$size":return E.includes(["String","Array"],t);case"$in":case"$nin":return null!=r;default:return!0}},h=function(e,r,t,n,s){switch(e){case"$and":case"$or":case"$nor":case"$not":return g(e,r,s,n);case"$cb":return r.call(n,t);case"$elemMatch":return b(t,r,null,!0)}switch("function"==typeof r&&(r=r()),e){case"$equal":return E.isArray(t)?E.includes(t,r):t===r;case"$deepEqual":return E.isEqual(t,r);case"$ne":return t!==r;case"$type":return typeof t===r;case"$lt":return null!=r&&r>t;case"$gt":return null!=r&&t>r;case"$lte":return null!=r&&r>=t;case"$gte":return null!=r&&t>=r;case"$between":return null!=r[0]&&null!=r[1]&&r[0]<t&&t<r[1];case"$betweene":return null!=r[0]&&null!=r[1]&&r[0]<=t&&t<=r[1];case"$size":return t.length===r;case"$exists":case"$has":return null!=t===r;case"$contains":return E.includes(t,r);case"$in":return E.includes(r,t);case"$nin":return!E.includes(r,t);case"$all":return E.every(r,function(e){return E.includes(t,e)});case"$any":return E.some(t,function(e){return E.includes(r,e)});case"$like":return-1!==t.indexOf(r);case"$likeI":return-1!==t.toLowerCase().indexOf(r);case"$startsWith":return 0===t.toLowerCase().indexOf(r);case"$endsWith":return 0===E.reverseString(t).indexOf(r);case"$regex":case"$regexp":return r.test(t);case"$mod":return t%r[0]===r[1];default:return!1}},w=function(e,r,t){var n;if(r&&(r=p(r)),t){if(1!==e.length)throw new Error("score operations currently don't work on compound queries");if(n=e[0],"$and"!==n.type)throw new Error("score operations only work on $and queries (not "+n.type);return function(e){return e._score=g(n.type,n.parsedQuery,r,e,!0),e}}return function(s){var u,a;for(u=0,a=e.length;a>u;u++)if(n=e[u],!g(n.type,n.parsedQuery,r,s,t))return!1;return!0}},g=function(e,r,t,n,s){var u,a,i,o,c,l,$,p,f,y;for(c=0,p=0,f=1/r.length,i=0,o=r.length;o>i;i++)switch(l=r[i],u=t?t(n,l.key):l.getter?l.getter(n,l.key):n[l.key],y=O(l.type,u),y&&(y=l.parsedQuery?w([l],t,s)(n):h(l.type,l.value,u,n,t)),y&&(c++,s&&(a=null!=($=l.boost)?$:1,p+=f*a)),e){case"$and":if(!s&&!y)return!1;break;case"$not":if(y)return!1;break;case"$or":if(y)return!0;break;case"$nor":if(y)return!1;break;default:throw new Error("Invalid compound method")}return s?p:"$not"===e?0===c:"$or"!==e},y=function(e){var r,t,n,s,u,a,i,o,c,l;if(i=E.keys(e),!i.length)return[];for(r=E.intersection(E.compoundKeys,i),t=0,u=r.length;u>t;t++)if(c=r[t],!E.isArray(e[c])&&E.includes(E.expectedArrayQueries,c))throw new Error(c+" query must be an array");if(0===r.length)return[{type:"$and",parsedQuery:d(e)}];if(r.length!==i.length){E.includes(r,"$and")||(e.$and={},r.unshift("$and"));for(s in e)Q.call(e,s)&&(l=e[s],E.includes(E.compundKeys,s)||(e.$and[s]=l,delete e[s]))}for(o=[],n=0,a=r.length;a>n;n++)c=r[n],o.push({type:c,parsedQuery:d(e[c],c)});return o},p=function(e){return"string"==typeof e?function(r,t){return r[e](t)}:e},e=function(){function e(e,r){this.items=e,this._getter=r,this.theQuery={}}return e.prototype.all=function(e,r){return e&&(this.items=e),e=this.indexes?this.getIndexedItems(this.items):this.items,b(e,this.theQuery,this._getter,r)},e.prototype.chain=function(){return _.chain(this.all.apply(this,arguments))},e.prototype.tester=function(){return l(this.theQuery,this._getter)},e.prototype.first=function(e){return this.all(e,!0)},e.prototype.getter=function(e){return this._getter=e,this},e}(),r=function(e){return function(r,t){var n;return t&&(r=E.makeObj(r,t)),null==(n=this.theQuery)[e]&&(n[e]=[]),this.theQuery[e].push(r),this}},m=E.compoundKeys;for(a=0,o=m.length;o>a;a++)i=m[a],e.prototype[i.substr(1)]=r(i);return e.prototype.find=e.prototype.query=e.prototype.run=e.prototype.all,t=function(r,t){return new e(r,t)},l=function(e,r){return w(y(e),p(r))},u=function(e,r,t){return b(e,r,t,!0)},b=function(e,r,n,s,u){var a;return arguments.length<2?t.apply(this,arguments):(n&&(n=p(n)),"Function"!==E.getType(r)&&(r=w(y(r),n,u)),(a=u?E.map:s?E.find:E.filter)(e,r))},v=function(e,r,t){return b(e,r,t,!1,!0)},b.build=t,b.parse=y,b.findOne=b.first=u,b.score=v,b.tester=b.testWith=l,b.getter=b.pluckWith=E.makeGetter,s=function(e,r){return null==r&&(r=!0),n(e),r&&e.mixin({query:b,q:b}),b},exports&&("undefined"!=typeof module&&null!==module?module.exports:void 0)?module.exports=s:k._?s(k._):s}).call(this); |
{ | ||
"name": "underscore-query", | ||
"description": "Lightweight Query API library for Underscore and Lodash", | ||
"version": "3.1.0", | ||
"version": "3.2.1", | ||
"author": "Dave Tonge <dave.tonge@momentumft.co.uk> (https://github.com/davidgtonge)", | ||
@@ -33,4 +33,5 @@ "tags": [ | ||
"test": "mocha", | ||
"build": "cake build" | ||
"build": "cake build", | ||
"prepublish": "npm run build" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
118509
3.85%1212
4.48%