Socket
Socket
Sign inDemoInstall

sift

Package Overview
Dependencies
Maintainers
1
Versions
155
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sift - npm Package Compare versions

Comparing version 2.0.0 to 2.0.2

benchmark/index.js

3

gulpfile.js

@@ -19,3 +19,4 @@ var gulp = require("gulp");

testFiles : ["test/**/*-test.js"],
allFiles : ["sift.js"]
appFiles : ["sift.js"],
allFiles : ["test/**/*-test.js", "sift.js"]
};

@@ -22,0 +23,0 @@

{
"name": "sift",
"description": "mongodb query style array filtering",
"version": "2.0.0",
"version": "2.0.2",
"repository": {},

@@ -9,2 +9,3 @@ "engines": {},

"devDependencies": {
"benchmark": "^1.0.0",
"bson": "^0.2.18",

@@ -24,4 +25,4 @@ "gulp": "^3.9.0",

"scripts": {
"test": "make lint test-coveralls"
"test": "gulp test-coveralls"
}
}

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

## MongoDB inspired array filtering
## validate objects & filter arrays with mongodb queries
[![Build Status](https://secure.travis-ci.org/crcn/sift.js.png)](https://secure.travis-ci.org/crcn/sift.js) [![Coverage Status](https://coveralls.io/repos/crcn/sift.js/badge.svg)](https://coveralls.io/r/crcn/sift.js) [![Join the chat at https://gitter.im/crcn/sift.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/crcn/sift.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

@@ -365,8 +365,6 @@

sift.use({
operators: {
band: function(a, b) {
return (a & b) ? 0 : -1; // 0 = exists, -1 = doesn't exist
}
$band: function(a, b) {
return (a & b) ? 0 : -1; // 0 = exists, -1 = doesn't exist
}
})
});

@@ -373,0 +371,0 @@ // ops

@@ -31,9 +31,2 @@ /*

function isPrimitive(value) {
return typeof value !== "object" || value == void 0;
}
/**
*/
function comparable(value) {

@@ -52,33 +45,88 @@ if (value instanceof Date) {

function and(a, b) {
for (var i = 0, n = a.length; i < n; i++) if (!a[i](b)) return false;
return true;
function or(validator) {
return function(a, b) {
if (!isArray(b)) return validator(a, b);
for (var i = 0, n = b.length; i < n; i++) if (validator(a, b[i])) return true;
return false;
}
}
var validator = {
function validate(validator, b) {
return validator.v(validator.a, b);
}
var operator = {
/**
*/
$eq: function(a) {
$eq: or(function(a, b) {
return a(b);
}),
var fn;
/**
*/
if (a instanceof RegExp) {
fn = function(b) {
return a.test(comparable(b));
};
} else if (a instanceof Function) {
fn = a;
$ne: or(function(a, b) {
return !a(b);
}),
/**
*/
$or: function(a, b) {
for (var i = 0, n = a.length; i < n; i++) if (validate(a[i], b)) return true;
return false;
},
/**
*/
$gt: or(function(a, b) {
return comparable(b) > a;
}),
/**
*/
$gte: or(function(a, b) {
return comparable(b) >= a;
}),
/**
*/
$lt: or(function(a, b) {
return comparable(b) < a;
}),
/**
*/
$lte: or(function(a, b) {
return comparable(b) <= a;
}),
/**
*/
$mod: or(function(a, b) {
return b % a[0] == a[1];
}),
/**
*/
$in: function(a, b) {
if (b instanceof Array) {
for (var i = b.length; i--;) {
if (~a.indexOf(comparable(b[i]))) return true;
}
} else {
fn = function(b) {
if (b instanceof Array) {
return ~comparable(b).indexOf(a);
} else {
return a === comparable(b);
}
};
return !!~a.indexOf(comparable(b));
}
return fn;
return false;
},

@@ -89,7 +137,4 @@

$ne: function(a) {
var $eq = validator.$eq(a);
return function(b) {
return !$eq(b);
};
$nin: function(a, b) {
return !operator.$in(a, b);
},

@@ -100,9 +145,4 @@

$or: function(a) {
var validators = a.map(parse);
var n = validators.length;
return function(b) {
for (var i = 0; i < n; i++) if (validators[i](comparable(b))) return true;
return false;
};
$not: function(a, b) {
return !validate(a, b);
},

@@ -113,7 +153,5 @@

$gt: function(a) {
return function(b) {
return comparable(b) > a;
};
},
$type: function(a, b) {
return b != void 0 ? b instanceof a || b.constructor == a : false;
},

@@ -123,6 +161,8 @@ /**

$gte: function(a) {
return function(b) {
return comparable(b) >= a;
};
$all: function(a, b) {
if (!b) b = [];
for (var i = a.length; i--;) {
if (!~comparable(b).indexOf(a[i])) return false;
}
return true;
},

@@ -133,6 +173,4 @@

$lt: function(a) {
return function(b) {
return comparable(b) < a;
};
$size: function(a, b) {
return b ? a === b.length : false;
},

@@ -143,6 +181,6 @@

$lte: function(a) {
return function(b) {
return comparable(b) <= a;
};
$nor: function(a, b) {
// todo - this suffice? return !operator.$in(a)
for (var i = 0, n = a.length; i < n; i++) if (validate(a[i], b)) return false;
return true;
},

@@ -153,6 +191,5 @@

$mod: function(a) {
return function(b) {
return comparable(b) % a[0] == a[1];
};
$and: function(a, b) {
for (var i = 0, n = a.length; i < n; i++) if (!validate(a[i], b)) return false;
return true;
},

@@ -163,15 +200,11 @@

$in: function(a) {
return function(b) {
$regex: function(a, b) {
return a.test(b);
},
if (b instanceof Array) {
for (var i = b.length; i--;) {
if (~a.indexOf(comparable(b[i]))) return true;
}
} else {
return !!~a.indexOf(comparable(b));
}
/**
*/
return false;
};
$where: function(a, b) {
return a.call(b, b);
},

@@ -182,7 +215,5 @@

$nin: function(a) {
var $in = validator.$in(a);
return function(b) {
return !$in(comparable(b));
};
$elemMatch: function(a, b) {
if (isArray(b)) return !!~search(b, a);
return validate(a, b);
},

@@ -193,6 +224,27 @@

$not: function(a) {
var validate = parse(a);
$exists: function(a, b) {
return (b != void 0) === a;
}
};
/**
*/
var prepare = {
/**
*/
$eq: function(a) {
if (a instanceof RegExp) {
return function(b) {
return a.test(comparable(b));
};
} else if (a instanceof Function) {
return a;
}
return function(b) {
return !validate(comparable(b));
return a === comparable(b);
};

@@ -204,7 +256,5 @@ },

$type: function(a) {
return function(b) {
return b != void 0 ? b instanceof a || b.constructor == a : false;
};
},
$ne: function(a) {
return prepare.$eq(a);
},

@@ -214,12 +264,4 @@ /**

$all: function(a) {
return function(b) {
if (!b) b = [];
for (var i = a.length; i--;) {
if (!~comparable(b).indexOf(a[i])) return false;
}
return true;
};
$and: function(a) {
return a.map(parse);
},

@@ -230,6 +272,4 @@

$size: function(a) {
return function(b) {
return b ? a === b.length : false;
};
$or: function(a) {
return a.map(parse);
},

@@ -241,8 +281,3 @@

$nor: function(a) {
var validators = a.map(parse);
var n = validators.length;
return function(b) {
for (var i = 0; i < n; i++) if (validators[i](comparable(b))) return false;
return true;
};
return a.map(parse);
},

@@ -253,7 +288,4 @@

$and: function(a) {
var validators = a.map(parse);
return function(b) {
return and(validators, b);
};
$not: function(a) {
return parse(a);
},

@@ -265,6 +297,3 @@

$regex: function(a) {
var aRE = new RegExp(a);
return function(b) {
return aRE.test(b);
};
return new RegExp(a);
},

@@ -276,6 +305,3 @@

$where: function(a) {
var caller = typeof a === "string" ? new Function("obj", "return " + a) : a;
return function(b) {
return caller.call(b, b);
};
return typeof a === "string" ? new Function("obj", "return " + a) : a;
},

@@ -287,7 +313,3 @@

$elemMatch: function(a) {
var validator = parse(a);
return function(b) {
if (isArray(b)) return !!~search(b, validator);
return validator(b);
};
return parse(a);
},

@@ -299,6 +321,3 @@

$exists: function(a) {
a = !!a;
return function(b) {
return (b != void 0) === a;
};
return !!a;
}

@@ -310,6 +329,6 @@ };

function search(array, validate) {
function search(array, validator) {
for (var i = 0; i < array.length; i++) {
if (validate(array[i])) {
if (validate(validator, array[i])) {
return i;

@@ -325,14 +344,18 @@ }

function createNestedValidator(keypath, validate) {
function createValidator(a, validate) {
return { a: a, v: validate };
}
var keyPathParts = keypath.split(".");
/**
*/
return function(b) {
function nestedValidator(a, b) {
var values = [];
findValues(b, a.k, 0, values);
var values = [];
findValues(b, keyPathParts, 0, values);
if (values.length === 1) {
return validate(a.nv, values[0]);
}
if (values.length === 1) return validate(values[0]);
return !!~search(values, validate);
};
return !!~search(values, a.nv);
}

@@ -360,2 +383,9 @@

/**
*/
function createNestedValidator(keypath, a) {
return { a: { k: keypath, nv: a }, v: nestedValidator };
}
/**
* flatten the query

@@ -378,4 +408,6 @@ */

if (validator[key]) {
validators.push(validator[key](comparable(a)));
if (operator[key]) {
if (prepare[key]) a = prepare[key](a);
validators.push(createValidator(comparable(a), operator[key]));
} else {

@@ -385,12 +417,23 @@ if (key.charCodeAt(0) === 36) {

}
validators.push(createNestedValidator(key, parse(a)));
validators.push(createNestedValidator(key.split("."), parse(a)));
}
}
var n = validators.length;
if (n === 1) return validators[0];
return validators.length === 1 ? validators[0] : createValidator(validators, operator.$and);
}
return function(b) {
return and(validators, b);
};
/**
*/
function createRootValidator(query, getter) {
var validator = parse(query);
if (getter) {
validator = {
a: validator,
v: function(a, b) {
return validate(a, getter(b));
}
};
}
return validator;
}

@@ -403,4 +446,2 @@

var validate = parse(query);
if (isFunction(array)) {

@@ -411,13 +452,13 @@ getter = array;

if (getter) {
validate = function(b) {
return getter(b);
};
var validator = createRootValidator(query, getter);
function filter(b) {
return validate(validator, b);
}
if (array) {
return array.filter(validate);
return array.filter(filter);
}
return validate;
return filter;
}

@@ -431,3 +472,3 @@

for (var key in plugin) {
if (key.charCodeAt(0) === 36) validator[key] = plugin[key];
if (key.charCodeAt(0) === 36) operator[key] = plugin[key];
}

@@ -440,11 +481,11 @@ };

sift.indexOf = function(query, array, getter) {
return search(array, sift(query, getter));
return search(array, createRootValidator(query, getter));
};
/* istanbul ignore next */
if (typeof module !== "undefined" && typeof module.exports != "undefined") {
if (typeof module !== "undefined" && typeof module.exports !== "undefined") {
module.exports = sift;
} else if (typeof window != "undefined") {
} else if (typeof window !== "undefined") {
window.sift = sift;
}
})();

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

!function(){function n(n){return"function"==typeof n}function r(n){return"[object Array]"===Object.prototype.toString.call(n)}function t(n){return n instanceof Date?n.getTime():n instanceof Array?n.map(t):n}function e(n,r){for(var t=0,e=n.length;e>t;t++)if(!n[t](r))return!1;return!0}function u(n,r){for(var t=0;t<n.length;t++)if(r(n[t]))return t;return-1}function o(n,r){var t=n.split(".");return function(n){var e=[];return i(n,t,0,e),1===e.length?r(e[0]):!!~u(e,r)}}function i(n,t,e,u){if(e===t.length||void 0==n)return void u.push(n);if(r(n))for(var o=0,f=n.length;f>o;o++)i(n[o],t,e,u);else i(n[t[e]],t,e+1,u)}function f(n){n=t(n),n&&n.constructor===Object||(n={$eq:n});var r=[];for(var u in n){var i=n[u];if(a[u])r.push(a[u](t(i)));else{if(36===u.charCodeAt(0))throw new Error("Unknown operation "+u);r.push(o(u,f(i)))}}var c=r.length;return 1===c?r[0]:function(n){return e(r,n)}}function c(r,t,e){var u=f(r);return n(t)&&(e=t,t=void 0),e&&(u=function(n){return e(n)}),t?t.filter(u):u}var a={$eq:function(n){var r;return r=n instanceof RegExp?function(r){return n.test(t(r))}:n instanceof Function?n:function(r){return r instanceof Array?~t(r).indexOf(n):n===t(r)}},$ne:function(n){var r=a.$eq(n);return function(n){return!r(n)}},$or:function(n){var r=n.map(f),e=r.length;return function(n){for(var u=0;e>u;u++)if(r[u](t(n)))return!0;return!1}},$gt:function(n){return function(r){return t(r)>n}},$gte:function(n){return function(r){return t(r)>=n}},$lt:function(n){return function(r){return t(r)<n}},$lte:function(n){return function(r){return t(r)<=n}},$mod:function(n){return function(r){return t(r)%n[0]==n[1]}},$in:function(n){return function(r){if(!(r instanceof Array))return!!~n.indexOf(t(r));for(var e=r.length;e--;)if(~n.indexOf(t(r[e])))return!0;return!1}},$nin:function(n){var r=a.$in(n);return function(n){return!r(t(n))}},$not:function(n){var r=f(n);return function(n){return!r(t(n))}},$type:function(n){return function(r){return null!=r?r instanceof n||r.constructor==n:!1}},$all:function(n){return function(r){r||(r=[]);for(var e=n.length;e--;)if(!~t(r).indexOf(n[e]))return!1;return!0}},$size:function(n){return function(r){return r?n===r.length:!1}},$nor:function(n){var r=n.map(f),e=r.length;return function(n){for(var u=0;e>u;u++)if(r[u](t(n)))return!1;return!0}},$and:function(n){var r=n.map(f);return function(n){return e(r,n)}},$regex:function(n){var r=new RegExp(n);return function(n){return r.test(n)}},$where:function(n){var r="string"==typeof n?new Function("obj","return "+n):n;return function(n){return r.call(n,n)}},$elemMatch:function(n){return f(n)},$exists:function(n){return n=!!n,function(r){return void 0!=r===n}}};c.use=function(r){if(n(r))return r(c);for(var t in r)36===t.charCodeAt(0)&&(a[t]=r[t])},c.indexOf=function(n,r,t){return u(r,c(n,t))},"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=c:"undefined"!=typeof window&&(window.sift=c)}();
!function(){"use strict";function n(n){return"function"==typeof n}function t(n){return"[object Array]"===Object.prototype.toString.call(n)}function r(n){return n instanceof Date?n.getTime():n instanceof Array?n.map(r):n}function e(n,t){return n.v(n.a,t)}function u(n,t){for(var r=0;r<n.length;r++)if(e(t,n[r]))return r;return-1}function o(n,t){return{a:n,v:t}}function i(n,t){var r=[];return f(t,n.k,0,r),1===r.length?e(n.nv,r[0]):!!~u(r,n.nv)}function f(n,r,e,u){if(e===r.length||void 0==n)return void u.push(n);if(t(n))for(var o=0,i=n.length;i>o;o++)f(n[o],r,e,u);else f(n[r[e]],r,e+1,u)}function c(n,t){return{a:{k:n,nv:t},v:i}}function a(n){n=r(n),(!n||"Object"!==n.constructor.toString()&&"function Object() { [native code] }"!==n.constructor.toString())&&(n={$eq:n});var t=[];for(var e in n){var u=n[e];if(d[e])l[e]&&(u=l[e](u)),t.push(o(r(u),d[e]));else{if(36===e.charCodeAt(0))throw new Error("Unknown operation "+e);t.push(c(e.split("."),a(u)))}}return 1===t.length?t[0]:o(t,d.$and)}function $(n,t){var r=a(n);return t&&(r={a:r,v:function(n,r){return e(n,t(r))}}),r}function s(t,r,u){function o(n){return e(i,n)}n(r)&&(u=r,r=void 0);var i=$(t,u);return r?r.filter(o):o}var d={$eq:function(n,t){return n(t)},$ne:function(n,t){return!n(t)},$or:function(n,t){for(var r=0,u=n.length;u>r;r++)if(e(n[r],t))return!0;return!1},$gt:function(n,t){return r(t)>n},$gte:function(n,t){return r(t)>=n},$lt:function(n,t){return r(t)<n},$lte:function(n,t){return r(t)<=n},$mod:function(n,t){return t%n[0]==n[1]},$in:function(n,t){if(!(t instanceof Array))return!!~n.indexOf(r(t));for(var e=t.length;e--;)if(~n.indexOf(r(t[e])))return!0;return!1},$nin:function(n,t){return!d.$in(n,t)},$not:function(n,t){return!e(n,t)},$type:function(n,t){return void 0!=t?t instanceof n||t.constructor==n:!1},$all:function(n,t){t||(t=[]);for(var e=n.length;e--;)if(!~r(t).indexOf(n[e]))return!1;return!0},$size:function(n,t){return t?n===t.length:!1},$nor:function(n,t){for(var r=0,u=n.length;u>r;r++)if(e(n[r],t))return!1;return!0},$and:function(n,t){for(var r=0,u=n.length;u>r;r++)if(!e(n[r],t))return!1;return!0},$regex:function(n,t){return n.test(t)},$where:function(n,t){return n.call(t,t)},$elemMatch:function(n,r){return t(r)?!!~u(r,n):e(n,r)},$exists:function(n,t){return void 0!=t===n}},l={$eq:function(n){return n instanceof RegExp?function(t){return n.test(r(t))}:n instanceof Function?n:function(t){return t instanceof Array?~r(t).indexOf(n):n===r(t)}},$ne:function(n){return l.$eq(n)},$and:function(n){return n.map(a)},$or:function(n){return n.map(a)},$nor:function(n){return n.map(a)},$not:function(n){return a(n)},$regex:function(n){return new RegExp(n)},$where:function(n){return"string"==typeof n?new Function("obj","return "+n):n},$elemMatch:function(n){return a(n)},$exists:function(n){return!!n}};s.use=function(t){if(n(t))return t(s);for(var r in t)36===r.charCodeAt(0)&&(d[r]=t[r])},s.indexOf=function(n,t,r){return u(t,$(n,r))},"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=s:"undefined"!=typeof window&&(window.sift=s)}();

@@ -7,2 +7,3 @@ var sift = require(".."),

var topic = [

@@ -9,0 +10,0 @@ {

@@ -23,2 +23,3 @@ var assert = require("assert");

[/^a/, ["a","ab","abc","b","bc"], ["a","ab","abc"]],
[function(b) { return b === 1; }, [1,2,3],[1]],

@@ -35,2 +36,3 @@

[{$ne:/^a/}, ["a","ab","abc","b","bc"], ["b","bc"]],
[{$ne:1}, [[2],[1]], [[2]]],

@@ -44,11 +46,15 @@ // $lt

[{$lte:5}, [3,4,5,6],[3,4,5]],
[{groups:{$lt:5}}, [{groups:[1,2,3,4]}, {groups:[7,8]}], [{groups:[1,2,3,4]}]],
// $gt
[{$gt:5}, [3,4,5,6],[6]],
[{groups:{$gt:5}}, [{groups:[1,2,3,4]}, {groups:[7,8]}], [{groups:[7,8]}]],
// $gte
[{$gte:5}, [3,4,5,6],[5, 6]],
[{groups:{$gte:5}}, [{groups:[1,2,3,4]}, {groups:[7,8]}], [{groups:[7,8]}]],
// $mod
[{$mod:[2,1]}, [1,2,3,4,5,6],[1,3,5]],
[{groups:{$mod:[2,0]}}, [{groups:[1,2,3,4]}, {groups:[7,9]}], [{groups:[1,2,3,4]}]],

@@ -64,2 +70,4 @@ // $exists

[{$in:[new Date(1)]},[new Date(1), new Date(2)],[new Date(1)]],
[{"a.b.status":{"$in": [0]}}, [{"a":{"b":[{"status":0}]}},{"a":{"b":[{"status":2}]}}],[{"a":{"b":[{"status":0}]}}]],
[{"a.b.status":{"$in": [0, 2]}}, [{"a":{"b":[{"status":0}]}},{"a":{"b":[{"status":2}]}}], [{"a":{"b":[{"status":0}]}},{"a":{"b":[{"status":2}]}}]],

@@ -66,0 +74,0 @@ // $nin

@@ -11,6 +11,4 @@ var assert = require("assert"),

sift.use({
$abba: function(a) {
return function(b) {
i++;
};
$abba: function(a, b) {
i++;
}

@@ -33,6 +31,4 @@ });

sift.use({
$notb: function(a) {
return function(b) {
return a != b ? true : false;
};
$notb: function(a, b) {
return a != b ? true : false;
}

@@ -39,0 +35,0 @@ });

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc