Comparing version 8.4.0 to 8.5.0
@@ -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 @@ |
@@ -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 @@ |
233
sift.min.js
@@ -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; | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
261192
3038
468