Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

sift

Package Overview
Dependencies
Maintainers
2
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 5.1.0 to 6.0.0

test.js

2

package.json
{
"name": "sift",
"description": "mongodb query style array filtering",
"version": "5.1.0",
"version": "6.0.0",
"repository": "crcn/sift.js",

@@ -6,0 +6,0 @@ "author": {

@@ -414,10 +414,15 @@ /*

// If the query contains $ne, need to test all elements ANDed together
var inclusive = a && a.q && typeof a.q.$ne !== 'undefined';
var allValid = inclusive;
for (var i = 0; i < values.length; i++) {
var result = values[i];
if (validate(a.nv, result[0], result[1], result[2])) {
return true;
var isValid = validate(a.nv, result[0], result[1], result[2]);
if (inclusive) {
allValid &= isValid;
} else {
allValid |= isValid;
}
}
return false;
return allValid;
}

@@ -431,2 +436,3 @@

if (index === keypath.length || current == void 0) {
values.push([current, keypath[index - 1], object]);

@@ -453,4 +459,4 @@ return;

function createNestedValidator(keypath, a) {
return { a: { k: keypath, nv: a }, v: nestedValidator };
function createNestedValidator(keypath, a, q) {
return { a: { k: keypath, nv: a, q: q }, v: nestedValidator };
}

@@ -490,4 +496,3 @@

}
validators.push(createNestedValidator(key.split('.'), parse(a)));
validators.push(createNestedValidator(key.split('.'), parse(a), a));
}

@@ -494,0 +499,0 @@ }

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

!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.get?n.get(t):n[t]}function u(n){return function(r,u){if(!t(u)||!u.length)return n(r,u);for(var o=0,i=u.length;o<i;o++)if(n(r,e(u,o)))return!0;return!1}}function o(n){return function(r,u){if(!t(u)||!u.length)return n(r,u);for(var o=0,i=u.length;o<i;o++)if(!n(r,e(u,o)))return!1;return!0}}function i(n,t){return n.v(n.a,t)}function f(n,t){for(var r=0;r<n.length;r++)if(i(t,e(n,r)))return r;return-1}function c(n,t){return{a:n,v:t}}function a(n,t){var r=[];return l(t,n.k,0,r),1===r.length?i(n.nv,r[0]):!!~f(r,n.nv)}function l(n,r,u,o){if(u===r.length||void 0==n)return void o.push(n);var i=e(r,u);if(t(n)&&isNaN(Number(i)))for(var f=0,c=n.length;f<c;f++)l(e(n,f),r,u,o);else l(e(n,i),r,u+1,o)}function p(n,t){return{a:{k:n,nv:t},v:a}}function s(n){return"Object"===String(n.constructor)||"functionObject(){[nativecode]}"===String(n.constructor).replace(/[\r\n\s\t]/g,"")}function $(n){n=r(n),n&&s(n)||(n={$eq:n});var t=[];for(var e in n){var u=n[e];if("$options"!==e)if(v[e])h[e]&&(u=h[e](u,n)),t.push(c(r(u),v[e]));else{if(36===e.charCodeAt(0))throw new Error("Unknown operation "+e);t.push(p(e.split("."),$(u)))}}return 1===t.length?t[0]:c(t,v.$and)}function g(n,t){var r=$(n);return t&&(r={a:r,v:function(n,r){return i(n,t(r))}}),r}function d(t,r,e){function u(n){return i(o,n)}n(r)&&(e=r,r=void 0);var o=g(t,e);return r?r.filter(u):u}var v={$eq:u(function(n,t){return n(t)}),$ne:o(function(n,t){return!n(t)}),$or:function(n,t){for(var r=0,u=n.length;r<u;r++)if(i(e(n,r),t))return!0;return!1},$gt:u(function(n,t){return d.compare(r(t),n)>0}),$gte:u(function(n,t){return d.compare(r(t),n)>=0}),$lt:u(function(n,t){return d.compare(r(t),n)<0}),$lte:u(function(n,t){return d.compare(r(t),n)<=0}),$mod:u(function(n,t){return t%n[0]==n[1]}),$in:function(n,t){if(!(t instanceof Array)){var u=r(t);if(u===t&&"object"==typeof t)for(var o=n.length;o--;)if(String(n[o])===String(t)&&"[object Object]"!==String(t))return!0;if("undefined"==typeof u)for(var o=n.length;o--;)if(null==n[o])return!0;return Boolean(!!~n.indexOf(r(t)))}for(var o=t.length;o--;)if(~n.indexOf(r(e(t,o))))return!0;return!1},$nin:function(n,t){return!v.$in(n,t)},$not:function(n,t){return!i(n,t)},$type:function(n,t){return void 0!=t&&(t instanceof n||t.constructor==n)},$all:function(n,t){return v.$and(n,t)},$size:function(n,t){return!!t&&n===t.length},$nor:function(n,t){for(var r=0,u=n.length;r<u;r++)if(i(e(n,r),t))return!1;return!0},$and:function(n,t){t||(t=[]);for(var r=0,u=n.length;r<u;r++)if(!i(e(n,r),t))return!1;return!0},$regex:u(function(n,t){return"string"==typeof t&&n.test(t)}),$where:function(n,t){return n.call(t,t)},$elemMatch:function(n,r){return t(r)?!!~f(r,n):i(n,r)},$exists:function(n,t){return void 0!=t===n}},h={$eq:function(n){return n instanceof RegExp?function(t){return"string"==typeof t&&n.test(t)}:n instanceof Function?n:t(n)&&!n.length?function(n){return t(n)&&!n.length}:null===n?function(n){return null==n}:function(t){return 0===d.compare(r(t),n)}},$ne:function(n){return h.$eq(n)},$and:function(n){return n.map($)},$all:function(n){return h.$and(n)},$or:function(n){return n.map($)},$nor:function(n){return n.map($)},$not:function(n){return $(n)},$regex:function(n,t){return new RegExp(n,t.$options)},$where:function(n){return"string"==typeof n?new Function("obj","return "+n):n},$elemMatch:function(n){return $(n)},$exists:function(n){return!!n}};d.use=function(t){if(n(t))return t(d);for(var r in t)36===r.charCodeAt(0)&&(v[r]=t[r])},d.indexOf=function(n,t,r){return f(t,g(n,r))},d.compare=function(n,t){if(n===t)return 0;if(typeof n==typeof t){if(n>t)return 1;if(n<t)return-1}},"undefined"!=typeof module&&"undefined"!=typeof module.exports&&(Object.defineProperty(exports,"__esModule",{value:!0}),exports["default"]=d,module.exports=exports["default"]),"undefined"!=typeof window&&(window.sift=d)}();
(function(){"use strict";function isFunction(value){return typeof value==="function"}function isArray(value){return Object.prototype.toString.call(value)==="[object Array]"}function comparable(value){if(value instanceof Date){return value.getTime()}else if(isArray(value)){return value.map(comparable)}else if(value&&typeof value.toJSON==="function"){return value.toJSON()}else{return value}}function get(obj,key){return isFunction(obj.get)?obj.get(key):obj[key]}function or(validator){return function(a,b){if(!isArray(b)||!b.length){return validator(a,b)}for(var i=0,n=b.length;i<n;i++){if(validator(a,get(b,i)))return true}return false}}function and(validator){return function(a,b){if(!isArray(b)||!b.length){return validator(a,b)}for(var i=0,n=b.length;i<n;i++){if(!validator(a,get(b,i)))return false}return true}}function validate(validator,b,k,o){return validator.v(validator.a,b,k,o)}var OPERATORS={$eq:or(function(a,b){return a(b)}),$ne:and(function(a,b){return!a(b)}),$gt:or(function(a,b){return sift.compare(comparable(b),a)>0}),$gte:or(function(a,b){return sift.compare(comparable(b),a)>=0}),$lt:or(function(a,b){return sift.compare(comparable(b),a)<0}),$lte:or(function(a,b){return sift.compare(comparable(b),a)<=0}),$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(get(b,i)))){return true}}}else{var comparableB=comparable(b);if(comparableB===b&&typeof b==="object"){for(var i=a.length;i--;){if(String(a[i])===String(b)&&String(b)!=="[object Object]"){return true}}}if(typeof comparableB=="undefined"){for(var i=a.length;i--;){if(a[i]==null){return true}}}for(var i=a.length;i--;){var validator=createRootValidator(get(a,i),undefined);var result=validate(validator,b,i,a);if(result&&String(result)!=="[object Object]"&&String(b)!=="[object Object]"){return true}}return!!~a.indexOf(comparableB)}return false},$nin:function(a,b,k,o){return!OPERATORS.$in(a,b,k,o)},$not:function(a,b,k,o){return!validate(a,b,k,o)},$type:function(a,b){return b!=void 0?b instanceof a||b.constructor==a:false},$all:function(a,b,k,o){return OPERATORS.$and(a,b,k,o)},$size:function(a,b){return b?a===b.length:false},$or:function(a,b,k,o){for(var i=0,n=a.length;i<n;i++)if(validate(get(a,i),b,k,o))return true;return false},$nor:function(a,b,k,o){return!OPERATORS.$or(a,b,k,o)},$and:function(a,b,k,o){for(var i=0,n=a.length;i<n;i++){if(!validate(get(a,i),b,k,o)){return false}}return true},$regex:or(function(a,b){return typeof b==="string"&&a.test(b)}),$where:function(a,b,k,o){return a.call(b,b,k,o)},$elemMatch:function(a,b,k,o){if(isArray(b)){return!!~search(b,a)}return validate(a,b,k,o)},$exists:function(a,b,k,o){return o.hasOwnProperty(k)===a}};var prepare={$eq:function(a){if(a instanceof RegExp){return function(b){return typeof b==="string"&&a.test(b)}}else if(a instanceof Function){return a}else if(isArray(a)&&!a.length){return function(b){return isArray(b)&&!b.length}}else if(a===null){return function(b){return b==null}}return function(b){return sift.compare(comparable(b),a)===0}},$ne:function(a){return prepare.$eq(a)},$and:function(a){return a.map(parse)},$all:function(a){return prepare.$and(a)},$or:function(a){return a.map(parse)},$nor:function(a){return a.map(parse)},$not:function(a){return parse(a)},$regex:function(a,query){return new RegExp(a,query.$options)},$where:function(a){return typeof a==="string"?new Function("obj","return "+a):a},$elemMatch:function(a){return parse(a)},$exists:function(a){return!!a}};function search(array,validator){for(var i=0;i<array.length;i++){var result=get(array,i);if(validate(validator,get(array,i))){return i}}return-1}function createValidator(a,validate){return{a:a,v:validate}}function nestedValidator(a,b){var values=[];findValues(b,a.k,0,b,values);if(values.length===1){var first=values[0];return validate(a.nv,first[0],first[1],first[2])}var inclusive=a&&a.q&&typeof a.q.$ne!=="undefined";var allValid=inclusive;for(var i=0;i<values.length;i++){var result=values[i];var isValid=validate(a.nv,result[0],result[1],result[2]);if(inclusive){allValid&=isValid}else{allValid|=isValid}}return allValid}function findValues(current,keypath,index,object,values){if(index===keypath.length||current==void 0){values.push([current,keypath[index-1],object]);return}var k=get(keypath,index);if(isArray(current)&&isNaN(Number(k))){for(var i=0,n=current.length;i<n;i++){findValues(get(current,i),keypath,index,current,values)}}else{findValues(get(current,k),keypath,index+1,current,values)}}function createNestedValidator(keypath,a,q){return{a:{k:keypath,nv:a,q:q},v:nestedValidator}}function isVanillaObject(value){return value&&value.constructor===Object}function parse(query){query=comparable(query);if(!query||!isVanillaObject(query)){query={$eq:query}}var validators=[];for(var key in query){var a=query[key];if(key==="$options"){continue}if(OPERATORS[key]){if(prepare[key])a=prepare[key](a,query);validators.push(createValidator(comparable(a),OPERATORS[key]))}else{if(key.charCodeAt(0)===36){throw new Error("Unknown operation "+key)}validators.push(createNestedValidator(key.split("."),parse(a),a))}}return validators.length===1?validators[0]:createValidator(validators,OPERATORS.$and)}function createRootValidator(query,getter){var validator=parse(query);if(getter){validator={a:validator,v:function(a,b,k,o){return validate(a,getter(b),k,o)}}}return validator}function sift(query,array,getter){if(isFunction(array)){getter=array;array=void 0}var validator=createRootValidator(query,getter);function filter(b,k,o){return validate(validator,b,k,o)}if(array){return array.filter(filter)}return filter}sift.use=function(plugin){if(isFunction(plugin))return plugin(sift);for(var key in plugin){if(key.charCodeAt(0)===36){OPERATORS[key]=plugin[key]}}};sift.indexOf=function(query,array,getter){return search(array,createRootValidator(query,getter))};sift.compare=function(a,b){if(a===b)return 0;if(typeof a===typeof b){if(a>b){return 1}if(a<b){return-1}}};if(typeof module!=="undefined"&&typeof module.exports!=="undefined"){Object.defineProperty(exports,"__esModule",{value:true});module.exports=sift;exports["default"]=module.exports.default=sift}if(typeof window!=="undefined"){window.sift=sift}})();

@@ -212,2 +212,53 @@ var sift = require(".."),

describe("arrays of objects", function () {
var objects = [
{
things: [
{
id: 123
}, {
id: 456
}
]
}, {
things: [
{
id: 123
},
{
id: 789
}
]
}
];
it("$eq for array of objects, matches if at least one exists", function () {
let q = {
'things.id': 123
}
var sifted = sift(q, objects)
assert.deepEqual(sifted, objects)
let q2 = {
'things.id': 789
}
var sifted2 = sift(q2, objects)
assert.deepEqual(sifted2, [objects[1]])
})
it("$ne for array of objects, returns if none of the array elements match the query", function () {
let q = {
'things.id': {
$ne: 123
}
}
var sifted = sift(q, objects)
assert.deepEqual(sifted, [])
let q2 = {
'things.id': {
$ne: 789
}
}
var sifted2 = sift(q2, objects)
assert.deepEqual(sifted2, [objects[0]])
})
})
describe("$where", function() {

@@ -214,0 +265,0 @@

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