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 8.4.0 to 8.5.0

4

changelog.md

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

## 8.5.0
- Added `comparable` option (fix https://github.com/crcn/sift.js/issues/156)
## 8.4.0

@@ -2,0 +6,0 @@

87

lib/index.js

@@ -23,2 +23,3 @@ "use strict";

exports.compare = compare;
exports.comparable = comparable;
/*

@@ -46,17 +47,2 @@ *

/**
*/
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) {

@@ -100,3 +86,3 @@ return isFunction(obj.get) ? obj.get(key) : obj[key];

var expressions = {
var defaultExpressions = {
/**

@@ -183,3 +169,3 @@ */

$all: function $all(a, b, k, o) {
return expressions.$and(a, b, k, o);
return defaultExpressions.$and(a, b, k, o);
},

@@ -210,3 +196,3 @@

$nor: function $nor(a, b, k, o) {
return !expressions.$or(a, b, k, o);
return !defaultExpressions.$or(a, b, k, o);
},

@@ -265,3 +251,6 @@

$eq: function $eq(a, query, options) {
$eq: function $eq(a, query, _ref) {
var comparable = _ref.comparable,
compare = _ref.compare;
if (a instanceof RegExp) {

@@ -285,26 +274,38 @@ return or(function(b) {

return or(function(b) {
return options.compare(comparable(b), comparable(a)) === 0;
return compare(comparable(b), comparable(a)) === 0;
});
},
$gt: function $gt(a, query, options) {
$gt: function $gt(a, query, _ref2) {
var comparable = _ref2.comparable,
compare = _ref2.compare;
return function(b) {
return options.compare(comparable(b), comparable(a)) > 0;
return compare(comparable(b), comparable(a)) > 0;
};
},
$gte: function $gte(a, query, options) {
$gte: function $gte(a, query, _ref3) {
var comparable = _ref3.comparable,
compare = _ref3.compare;
return function(b) {
return options.compare(comparable(b), comparable(a)) >= 0;
return compare(comparable(b), comparable(a)) >= 0;
};
},
$lt: function $lt(a, query, options) {
$lt: function $lt(a, query, _ref4) {
var comparable = _ref4.comparable,
compare = _ref4.compare;
return function(b) {
return options.compare(comparable(b), comparable(a)) < 0;
return compare(comparable(b), comparable(a)) < 0;
};
},
$lte: function $lte(a, query, options) {
$lte: function $lte(a, query, _ref5) {
var comparable = _ref5.comparable,
compare = _ref5.compare;
return function(b) {
return options.compare(comparable(b), comparable(a)) <= 0;
return compare(comparable(b), comparable(a)) <= 0;
};

@@ -314,2 +315,4 @@ },

$in: function $in(a, query, options) {
var comparable = options.comparable;
return function(b) {

@@ -558,2 +561,5 @@ if (b instanceof Array) {

function parse(options) {
var comparable = options.comparable,
expressions = options.expressions;
var wrapQuery = function wrapQuery(query) {

@@ -579,4 +585,3 @@ if (!query || !isVanillaObject(query)) {

var expression =
expressions[key] ||
(options && options.expressions && options.expressions[key]);
defaultExpressions[key] || (options && expressions && expressions[key]);

@@ -601,3 +606,3 @@ if (expression) {

? validators[0]
: createValidator(validators, expressions.$and);
: createValidator(validators, defaultExpressions.$and);
};

@@ -689,3 +694,6 @@

function sift(query, options) {
options = Object.assign({ compare: compare }, options);
options = Object.assign(
{ compare: compare, comparable: comparable },
options
);
var validator = createRootValidator(query, options);

@@ -714,1 +722,16 @@ return function(b, k, o) {

}
/**
*/
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;
}
}
{
"name": "sift",
"description": "mongodb query style array filtering",
"version": "8.4.0",
"version": "8.5.0",
"repository": "crcn/sift.js",

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

@@ -86,3 +86,4 @@ ## validate objects & filter arrays with mongodb queries

- `expressions` - custom expressions
- `compare` - custom compare function
- `compare` - compares difference between two values
- `comparable`

@@ -415,4 +416,14 @@ With an array:

## Custom expressions
## MongoDB behavior differences
There are some cases where Sift behaves a bit differently than Mongodb.
## Adding custom behavior
Sift works like MongoDB out of the box, but you're also able to modify the behavior to suite your needs.
#### Expressions
Sift comes with expressions like `$not`, `$eq`, and others, but you can also add your own.
```javascript

@@ -435,6 +446,11 @@ var filter = sift(

## MongoDB behavior differences
<!--#### Custom compare
There are some cases where Sift behaves a bit differently than Mongodb.
```javascript
const filter = sift()
```
#### Custom comparable-->
#### Date comparison

@@ -441,0 +457,0 @@

@@ -79,6 +79,9 @@ !(function(n, t) {

r.d(t, "default", function() {
return j;
return m;
}),
r.d(t, "compare", function() {
return m;
return y;
}),
r.d(t, "comparable", function() {
return j;
});

@@ -88,53 +91,44 @@ var u = e("Array"),

i = e("Function");
function f(n) {
return n instanceof Date
? n.getTime()
: u(n)
? n.map(f)
: n && "function" == typeof n.toJSON
? n.toJSON()
: n;
}
function c(n, t) {
function f(n, t) {
return i(n.get) ? n.get(t) : n[t];
}
function a(n) {
function c(n) {
return function(t, r) {
if (!u(r) || !r.length) return n(t, r);
for (var e = 0, o = r.length; e < o; e++)
if (n(t, c(r, e))) return !0;
if (n(t, f(r, e))) return !0;
return !1;
};
}
function l(n) {
function a(n) {
return function(t, r) {
if (!u(r) || !r.length) return n(t, r);
for (var e = 0, o = r.length; e < o; e++)
if (!n(t, c(r, e))) return !1;
if (!n(t, f(r, e))) return !1;
return !0;
};
}
function s(n, t, r, e) {
function l(n, t, r, e) {
return n.v(n.a, t, r, e);
}
var p = {
$eq: a(function(n, t) {
$eq: c(function(n, t) {
return n(t);
}),
$ne: l(function(n, t) {
$ne: a(function(n, t) {
return n(t);
}),
$gt: a(function(n, t) {
$gt: c(function(n, t) {
return n(t);
}),
$gte: a(function(n, t) {
$gte: c(function(n, t) {
return n(t);
}),
$lt: a(function(n, t) {
$lt: c(function(n, t) {
return n(t);
}),
$lte: a(function(n, t) {
$lte: c(function(n, t) {
return n(t);
}),
$mod: a(function(n, t) {
$mod: c(function(n, t) {
return n(t);

@@ -162,3 +156,3 @@ }),

for (var u = 0, o = n.length; u < o; u++)
if (s(c(n, u), t, r, e)) return !0;
if (l(f(n, u), t, r, e)) return !0;
return !1;

@@ -171,6 +165,6 @@ },

for (var u = 0, o = n.length; u < o; u++)
if (!s(c(n, u), t, r, e)) return !1;
if (!l(f(n, u), t, r, e)) return !1;
return !0;
},
$regex: a(function(n, t) {
$regex: c(function(n, t) {
return "string" == typeof t && n.test(t);

@@ -185,8 +179,8 @@ }),

for (var r = 0; r < n.length; r++) {
c(n, r);
if (s(t, c(n, r))) return r;
f(n, r);
if (l(t, f(n, r))) return r;
}
return -1;
})(t, n)
: s(n, t, r, e);
: l(n, t, r, e);
},

@@ -197,15 +191,15 @@ $exists: function(n, t, r, e) {

},
g = {
$eq: function(n, t, r) {
s = {
$eq: function(n, t, { comparable: r, compare: e }) {
return n instanceof RegExp
? a(function(t) {
? c(function(t) {
return "string" == typeof t && n.test(t);
})
: n instanceof Function
? a(n)
? c(n)
: u(n) && !n.length
? a(function(n) {
? c(function(n) {
return u(n) && !n.length;
})
: a(
: c(
null === n

@@ -216,44 +210,45 @@ ? function(n) {

: function(t) {
return 0 === r.compare(f(t), f(n));
return 0 === e(r(t), r(n));
}
);
},
$gt: function(n, t, r) {
$gt: function(n, t, { comparable: r, compare: e }) {
return function(t) {
return r.compare(f(t), f(n)) > 0;
return e(r(t), r(n)) > 0;
};
},
$gte: function(n, t, r) {
$gte: function(n, t, { comparable: r, compare: e }) {
return function(t) {
return r.compare(f(t), f(n)) >= 0;
return e(r(t), r(n)) >= 0;
};
},
$lt: function(n, t, r) {
$lt: function(n, t, { comparable: r, compare: e }) {
return function(t) {
return r.compare(f(t), f(n)) < 0;
return e(r(t), r(n)) < 0;
};
},
$lte: function(n, t, r) {
$lte: function(n, t, { comparable: r, compare: e }) {
return function(t) {
return r.compare(f(t), f(n)) <= 0;
return e(r(t), r(n)) <= 0;
};
},
$in: function(n, t, r) {
const { comparable: e } = r;
return function(t) {
if (!(t instanceof Array)) {
var e = f(t);
if (e === t && "object" == typeof t)
for (o = n.length; o--; )
var u = e(t);
if (u === t && "object" == typeof t)
for (i = n.length; i--; )
if (
String(n[o]) === String(t) &&
String(n[i]) === String(t) &&
"[object Object]" !== String(t)
)
return !0;
if (void 0 === e)
for (o = n.length; o--; ) if (null == n[o]) return !0;
for (o = n.length; o--; ) {
var u = s(y(c(n, o), r), t, o, n);
if (void 0 === u)
for (i = n.length; i--; ) if (null == n[i]) return !0;
for (i = n.length; i--; ) {
var o = l(h(f(n, i), r), t, i, n);
if (
u &&
"[object Object]" !== String(u) &&
o &&
"[object Object]" !== String(o) &&
"[object Object]" !== String(t)

@@ -263,6 +258,6 @@ )

}
return !!~n.indexOf(e);
return !!~n.indexOf(u);
}
for (var o = t.length; o--; )
if (~n.indexOf(f(c(t, o)))) return !0;
for (var i = t.length; i--; )
if (~n.indexOf(e(f(t, i)))) return !0;
return !1;

@@ -272,3 +267,3 @@ };

$nin: function(n, t, r) {
const e = g.$in(n, t, r);
const e = s.$in(n, t, r);
return function(n, t, r, u) {

@@ -284,4 +279,4 @@ return !e(n, t, r, u);

$ne: function(n, t, r) {
const e = g.$eq(n, t, r);
return l(function(n, t, r, u) {
const e = s.$eq(n, t, r);
return a(function(n, t, r, u) {
return !e(n, t, r, u);

@@ -291,17 +286,17 @@ });

$and: function(n, t, r) {
return n.map(h(r));
return n.map(b(r));
},
$all: function(n, t, r) {
return g.$and(n, t, r);
return s.$and(n, t, r);
},
$or: function(n, t, r) {
return n.map(h(r));
return n.map(b(r));
},
$nor: function(n, t, r) {
return n.map(h(r));
return n.map(b(r));
},
$not: function(n, t, r) {
const e = h(r)(n);
const e = b(r)(n);
return function(n, t, r) {
return !s(e, n, t, r);
return !l(e, n, t, r);
};

@@ -323,3 +318,3 @@ },

$elemMatch: function(n, t, r) {
return h(r)(n);
return b(r)(n);
},

@@ -330,6 +325,6 @@ $exists: function(n) {

};
function $(n, t) {
function g(n, t) {
return { a: n, v: t };
}
function v(n, t) {
function $(n, t) {
var r = [];

@@ -340,6 +335,6 @@ if (

return void i.push([t, r[e - 1], o]);
var f = c(r, e);
if (u(t) && isNaN(Number(f)))
for (var a = 0, l = t.length; a < l; a++) n(c(t, a), r, e, t, i);
else n(c(t, f), r, e + 1, t, i);
var c = f(r, e);
if (u(t) && isNaN(Number(c)))
for (var a = 0, l = t.length; a < l; a++) n(f(t, a), r, e, t, i);
else n(f(t, c), r, e + 1, t, i);
})(t, n.k, 0, t, r),

@@ -349,20 +344,21 @@ 1 === r.length)

var e = r[0];
return s(n.nv, e[0], e[1], e[2]);
return l(n.nv, e[0], e[1], e[2]);
}
for (
var o = n && n.q && void 0 !== n.q.$ne, i = o, f = 0;
f < r.length;
f++
var o = n && n.q && void 0 !== n.q.$ne, i = o, c = 0;
c < r.length;
c++
) {
var a = r[f],
l = s(n.nv, a[0], a[1], a[2]);
o ? (i &= l) : (i |= l);
var a = r[c],
p = l(n.nv, a[0], a[1], a[2]);
o ? (i &= p) : (i |= p);
}
return i;
}
function d(n, t, r) {
return { a: { k: n, nv: t, q: r }, v: v };
function v(n, t, r) {
return { a: { k: n, nv: t, q: r }, v: $ };
}
function h(n) {
var t = function(n) {
function b(n) {
const { comparable: t, expressions: r } = n;
var e = function(n) {
var t;

@@ -382,23 +378,23 @@ return (

},
r = function(t) {
t = f(t);
var r = [];
for (var u in t) {
var o = t[u];
if ("$options" !== u) {
var i = p[u] || (n && n.expressions && n.expressions[u]);
if (i) g[u] && (o = g[u](o, t, n)), r.push($(f(o), i));
u = function(e) {
e = t(e);
var u = [];
for (var o in e) {
var f = e[o];
if ("$options" !== o) {
var c = p[o] || (n && r && r[o]);
if (c) s[o] && (f = s[o](f, e, n)), u.push(g(t(f), c));
else {
if (36 === u.charCodeAt(0))
throw new Error("Unknown operation " + u);
var c = u.split(".");
r.push(d(c, e(o), o));
if (36 === o.charCodeAt(0))
throw new Error("Unknown operation " + o);
var a = o.split(".");
u.push(v(a, i(f), f));
}
}
}
return 1 === r.length ? r[0] : $(r, p.$and);
return 1 === u.length ? u[0] : g(u, p.$and);
},
e = function(n) {
i = function(n) {
return (
(n = t(n)),
(n = e(n)),
-1 ===

@@ -412,11 +408,11 @@ (function n(t, r) {

.search(/[$.]/)
? $(n, b)
: r(n)
? g(n, d)
: u(n)
);
};
return function(n) {
return r(t(n));
return u(e(n));
};
}
function b(n, t) {
function d(n, t) {
if (

@@ -429,3 +425,3 @@ Object.prototype.toString.call(n) !==

if (Object.keys(n).length !== Object.keys(t).length) return !1;
for (var r in n) if (!b(n[r], t[r])) return !1;
for (var r in n) if (!d(n[r], t[r])) return !1;
return !0;

@@ -436,3 +432,3 @@ }

for (var e = 0, i = n.length; e < i; e++)
if (!b(n[e], t[e])) return !1;
if (!d(n[e], t[e])) return !1;
return !0;

@@ -442,4 +438,4 @@ }

}
function y(n, t) {
var r = h(t)(n);
function h(n, t) {
var r = b(t)(n);
return (

@@ -451,3 +447,3 @@ t &&

v: function(n, r, e, u) {
return s(n, r && t.select(r), e, u);
return l(n, r && t.select(r), e, u);
}

@@ -458,10 +454,10 @@ }),

}
function j(n, t) {
var r = y(n, (t = Object.assign({ compare: m }, t)));
function m(n, t) {
var r = h(n, (t = Object.assign({ compare: y, comparable: j }, t)));
return function(n, t, e) {
return s(r, n, t, e);
return l(r, n, t, e);
};
}
function m(n, t) {
if (b(n, t)) return 0;
function y(n, t) {
if (d(n, t)) return 0;
if (typeof n == typeof t) {

@@ -472,4 +468,13 @@ if (n > t) return 1;

}
function j(n) {
return n instanceof Date
? n.getTime()
: u(n)
? n.map(j)
: n && "function" == typeof n.toJSON
? n.toJSON()
: n;
}
}
]);
});

@@ -23,17 +23,2 @@ /*

/**
*/
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) {

@@ -77,3 +62,3 @@ return isFunction(obj.get) ? obj.get(key) : obj[key];

var expressions = {
var defaultExpressions = {
/**

@@ -160,3 +145,3 @@ */

$all: function(a, b, k, o) {
return expressions.$and(a, b, k, o);
return defaultExpressions.$and(a, b, k, o);
},

@@ -187,3 +172,3 @@

$nor: function(a, b, k, o) {
return !expressions.$or(a, b, k, o);
return !defaultExpressions.$or(a, b, k, o);
},

@@ -242,3 +227,3 @@

$eq: function(a, query, options) {
$eq: function(a, query, { comparable, compare }) {
if (a instanceof RegExp) {

@@ -262,26 +247,26 @@ return or(function(b) {

return or(function(b) {
return options.compare(comparable(b), comparable(a)) === 0;
return compare(comparable(b), comparable(a)) === 0;
});
},
$gt: function(a, query, options) {
$gt: function(a, query, { comparable, compare }) {
return function(b) {
return options.compare(comparable(b), comparable(a)) > 0;
return compare(comparable(b), comparable(a)) > 0;
};
},
$gte: function(a, query, options) {
$gte: function(a, query, { comparable, compare }) {
return function(b) {
return options.compare(comparable(b), comparable(a)) >= 0;
return compare(comparable(b), comparable(a)) >= 0;
};
},
$lt: function(a, query, options) {
$lt: function(a, query, { comparable, compare }) {
return function(b) {
return options.compare(comparable(b), comparable(a)) < 0;
return compare(comparable(b), comparable(a)) < 0;
};
},
$lte: function(a, query, options) {
$lte: function(a, query, { comparable, compare }) {
return function(b) {
return options.compare(comparable(b), comparable(a)) <= 0;
return compare(comparable(b), comparable(a)) <= 0;
};

@@ -291,2 +276,3 @@ },

$in: function(a, query, options) {
const { comparable } = options;
return function(b) {

@@ -532,2 +518,3 @@ if (b instanceof Array) {

function parse(options) {
const { comparable, expressions } = options;
var wrapQuery = function(query) {

@@ -553,4 +540,3 @@ if (!query || !isVanillaObject(query)) {

var expression =
expressions[key] ||
(options && options.expressions && options.expressions[key]);
defaultExpressions[key] || (options && expressions && expressions[key]);

@@ -575,3 +561,3 @@ if (expression) {

? validators[0]
: createValidator(validators, expressions.$and);
: createValidator(validators, defaultExpressions.$and);
};

@@ -663,3 +649,3 @@

export default function sift(query, options) {
options = Object.assign({ compare: compare }, options);
options = Object.assign({ compare, comparable }, options);
var validator = createRootValidator(query, options);

@@ -685,1 +671,16 @@ return function(b, k, o) {

}
/**
*/
export 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;
}
}
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