Comparing version 9.0.7 to 10.0.0
@@ -0,1 +1,9 @@ | ||
## 10.0.0 | ||
- new custom operations syntax (see API readme) | ||
- null & undefined are not treated equally (change has been added to keep spec as functionality as possible to MongoDB) | ||
- `select` option is not supported anymore | ||
- `compare` option now expects `boolean` return value | ||
- nested queries are no-longer supported | ||
## 9.0.0 | ||
@@ -2,0 +10,0 @@ |
741
lib/index.js
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports["default"] = sift; | ||
exports.compare = compare; | ||
exports.comparable = comparable; | ||
function _typeof(obj) { | ||
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { | ||
_typeof = function _typeof(obj) { | ||
return typeof obj; | ||
}; | ||
} else { | ||
_typeof = function _typeof(obj) { | ||
return obj && | ||
typeof Symbol === "function" && | ||
obj.constructor === Symbol && | ||
obj !== Symbol.prototype | ||
? "symbol" | ||
: typeof obj; | ||
}; | ||
} | ||
return _typeof(obj); | ||
} | ||
/* | ||
* | ||
* Copryright 2018, Craig Condon | ||
* Licensed under MIT | ||
* | ||
* Filter JavaScript objects with mongodb queries | ||
*/ | ||
function typeChecker(type) { | ||
var typeString = "[object " + type + "]"; | ||
return function(value) { | ||
return Object.prototype.toString.call(value) === typeString; | ||
}; | ||
} | ||
/** | ||
*/ | ||
var isArray = typeChecker("Array"); | ||
var isObject = typeChecker("Object"); | ||
var isFunction = typeChecker("Function"); | ||
function get(obj, key) { | ||
return isFunction(obj.get) ? obj.get(key) : obj[key]; | ||
} | ||
/** | ||
*/ | ||
function or(validator) { | ||
return function(validateOptions, value) { | ||
if (!isArray(value) || !value.length) { | ||
return validator(validateOptions, value); | ||
} | ||
for (var i = 0, n = value.length; i < n; i++) { | ||
if (validator(validateOptions, get(value, i))) return true; | ||
} | ||
return false; | ||
}; | ||
} | ||
/** | ||
*/ | ||
function and(validator) { | ||
return function(validateOptions, value) { | ||
if (!isArray(value) || !value.length) { | ||
return validator(validateOptions, value); | ||
} | ||
for (var i = 0, n = value.length; i < n; i++) { | ||
if (!validator(validateOptions, get(value, i))) return false; | ||
} | ||
return true; | ||
}; | ||
} | ||
function _validate(validator, value, key, valueOwner) { | ||
return validator.validate(validator.options, value, key, valueOwner); | ||
} | ||
var defaultExpressions = { | ||
/** | ||
*/ | ||
$eq: or(function(test, value) { | ||
return test(value); | ||
}), | ||
/** | ||
*/ | ||
$ne: and(function(test, value) { | ||
return test(value); | ||
}), | ||
/** | ||
*/ | ||
$gt: or(function(test, value) { | ||
return test(value); | ||
}), | ||
/** | ||
*/ | ||
$gte: or(function(test, value) { | ||
return test(value); | ||
}), | ||
/** | ||
*/ | ||
$lt: or(function(test, value) { | ||
return test(value); | ||
}), | ||
/** | ||
*/ | ||
$lte: or(function(test, value) { | ||
return test(value); | ||
}), | ||
/** | ||
*/ | ||
$mod: or(function(test, value) { | ||
return test(value); | ||
}), | ||
/** | ||
*/ | ||
$in: function $in(test, value) { | ||
return test(value); | ||
}, | ||
/** | ||
*/ | ||
$nin: function $nin(test, value) { | ||
return test(value); | ||
}, | ||
/** | ||
*/ | ||
$not: function $not(test, value, key, valueOwner) { | ||
return test(value, key, valueOwner); | ||
}, | ||
/** | ||
*/ | ||
$type: function $type(testType, value) { | ||
return testType(value); | ||
}, | ||
/** | ||
*/ | ||
$all: function $all(allOptions, value, key, valueOwner) { | ||
return defaultExpressions.$and(allOptions, value, key, valueOwner); | ||
}, | ||
/** | ||
*/ | ||
$size: function $size(sizeMatch, value) { | ||
return value ? sizeMatch === value.length : false; | ||
}, | ||
/** | ||
*/ | ||
$or: function $or(orOptions, value, key, valueOwner) { | ||
for (var i = 0, n = orOptions.length; i < n; i++) { | ||
if (_validate(get(orOptions, i), value, key, valueOwner)) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
}, | ||
/** | ||
*/ | ||
$nor: function $nor(validateOptions, value, key, valueOwner) { | ||
return !defaultExpressions.$or(validateOptions, value, key, valueOwner); | ||
}, | ||
/** | ||
*/ | ||
$and: function $and(validateOptions, value, key, valueOwner) { | ||
for (var i = 0, n = validateOptions.length; i < n; i++) { | ||
if (!_validate(get(validateOptions, i), value, key, valueOwner)) { | ||
return false; | ||
} | ||
} | ||
return true; | ||
}, | ||
/** | ||
*/ | ||
$regex: or(function(validateOptions, value) { | ||
return typeof value === "string" && validateOptions.test(value); | ||
}), | ||
/** | ||
*/ | ||
$where: function $where(validateOptions, value, key, valueOwner) { | ||
return validateOptions.call(value, value, key, valueOwner); | ||
}, | ||
/** | ||
*/ | ||
$elemMatch: function $elemMatch(validateOptions, value, key, valueOwner) { | ||
if (isArray(value)) { | ||
return !!~search(value, validateOptions); | ||
} | ||
return _validate(validateOptions, value, key, valueOwner); | ||
}, | ||
/** | ||
*/ | ||
$exists: function $exists(validateOptions, value, key, valueOwner) { | ||
return valueOwner.hasOwnProperty(key) === validateOptions; | ||
} | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var utils_1 = require("./utils"); | ||
var defaultOperations = require("./operations"); | ||
var core_1 = require("./core"); | ||
var createFilter = function(query, _a) { | ||
var _b = _a === void 0 ? {} : _a, | ||
compare = _b.compare, | ||
expressions = _b.expressions; | ||
return core_1.createAndFilter( | ||
core_1.createQueryFilters(query, { | ||
compare: compare || utils_1.equals, | ||
expressions: Object.assign({}, defaultOperations, expressions) | ||
}) | ||
); | ||
}; | ||
/** | ||
*/ | ||
var prepare = { | ||
/** | ||
*/ | ||
$eq: function $eq(query, queryOwner, _ref) { | ||
var comparable = _ref.comparable, | ||
compare = _ref.compare; | ||
if (query instanceof RegExp) { | ||
return or(function(value) { | ||
return typeof value === "string" && query.test(value); | ||
}); | ||
} else if (query instanceof Function) { | ||
return or(query); | ||
} else if (isArray(query) && !query.length) { | ||
// Special case of a == [] | ||
return or(function(value) { | ||
return isArray(value) && !value.length; | ||
}); | ||
} else if (query === null) { | ||
return or(function(value) { | ||
//will match both null and undefined | ||
return value == null; | ||
}); | ||
} | ||
return or(function(value) { | ||
return compare(comparable(value), comparable(query)) === 0; | ||
}); | ||
}, | ||
$gt: function $gt(query, queryOwner, _ref2) { | ||
var comparable = _ref2.comparable, | ||
compare = _ref2.compare; | ||
return function(value) { | ||
return compare(comparable(value), comparable(query)) > 0; | ||
}; | ||
}, | ||
$gte: function $gte(query, queryOwner, _ref3) { | ||
var comparable = _ref3.comparable, | ||
compare = _ref3.compare; | ||
return function(value) { | ||
return compare(comparable(value), comparable(query)) >= 0; | ||
}; | ||
}, | ||
$lt: function $lt(query, queryOwner, _ref4) { | ||
var comparable = _ref4.comparable, | ||
compare = _ref4.compare; | ||
return function(value) { | ||
return compare(comparable(value), comparable(query)) < 0; | ||
}; | ||
}, | ||
$lte: function $lte(query, queryOwner, _ref5) { | ||
var comparable = _ref5.comparable, | ||
compare = _ref5.compare; | ||
return function(value) { | ||
return compare(comparable(value), comparable(query)) <= 0; | ||
}; | ||
}, | ||
$in: function $in(query, queryOwner, options) { | ||
var comparable = options.comparable; | ||
return function(value) { | ||
if (value instanceof Array) { | ||
for (var i = value.length; i--; ) { | ||
if (~query.indexOf(comparable(get(value, i)))) { | ||
return true; | ||
} | ||
} | ||
} else { | ||
var comparableValue = comparable(value); | ||
if (comparableValue === value && _typeof(value) === "object") { | ||
for (var i = query.length; i--; ) { | ||
if ( | ||
String(query[i]) === String(value) && | ||
String(value) !== "[object Object]" | ||
) { | ||
return true; | ||
} | ||
} | ||
} | ||
/* | ||
Handles documents that are undefined, whilst also | ||
having a 'null' element in the parameters to $in. | ||
*/ | ||
if (typeof comparableValue == "undefined") { | ||
for (var i = query.length; i--; ) { | ||
if (query[i] == null) { | ||
return true; | ||
} | ||
} | ||
} | ||
/* | ||
Handles the case of {'field': {$in: [/regexp1/, /regexp2/, ...]}} | ||
*/ | ||
for (var i = query.length; i--; ) { | ||
var validator = createRootValidator(get(query, i), options); | ||
var result = _validate(validator, comparableValue, i, query); | ||
if ( | ||
result && | ||
String(result) !== "[object Object]" && | ||
String(comparableValue) !== "[object Object]" | ||
) { | ||
return true; | ||
} | ||
} | ||
return !!~query.indexOf(comparableValue); | ||
} | ||
return false; | ||
}; | ||
}, | ||
$nin: function $nin(query, queryOwner, options) { | ||
var eq = prepare.$in(query, queryOwner, options); | ||
return function(validateOptions, value, key, valueOwner) { | ||
return !eq(validateOptions, value, key, valueOwner); | ||
}; | ||
}, | ||
$mod: function $mod(query) { | ||
return function(value) { | ||
return value % query[0] == query[1]; | ||
}; | ||
}, | ||
/** | ||
*/ | ||
$ne: function $ne(query, queryOwner, options) { | ||
var eq = prepare.$eq(query, queryOwner, options); | ||
return and(function(validateOptions, value, key, valueOwner) { | ||
return !eq(validateOptions, value, key, valueOwner); | ||
}); | ||
}, | ||
/** | ||
*/ | ||
$and: function $and(query, queryOwner, options) { | ||
return query.map(parse(options)); | ||
}, | ||
/** | ||
*/ | ||
$all: function $all(query, queryOwner, options) { | ||
return prepare.$and(query, queryOwner, options); | ||
}, | ||
/** | ||
*/ | ||
$or: function $or(query, queryOwner, options) { | ||
return query.map(parse(options)); | ||
}, | ||
/** | ||
*/ | ||
$nor: function $nor(query, queryOwner, options) { | ||
return query.map(parse(options)); | ||
}, | ||
/** | ||
*/ | ||
$not: function $not(query, queryOwner, options) { | ||
var validateOptions = parse(options)(query); | ||
return function(value, key, valueOwner) { | ||
return !_validate(validateOptions, value, key, valueOwner); | ||
}; | ||
}, | ||
$type: function $type(query) { | ||
return function(value, key, valueOwner) { | ||
return value != void 0 | ||
? value instanceof query || value.constructor == query | ||
: false; | ||
}; | ||
}, | ||
/** | ||
*/ | ||
$regex: function $regex(query, queryOwner) { | ||
return new RegExp(query, queryOwner.$options); | ||
}, | ||
/** | ||
*/ | ||
$where: function $where(query) { | ||
if (typeof query === "function") { | ||
return query; | ||
} | ||
if (!process.env.CSP_ENABLED) { | ||
return new Function("obj", "return " + query); | ||
} | ||
throw new Error( | ||
'In CSP mode, sift does not support strings in "$where" condition' | ||
); | ||
}, | ||
/** | ||
*/ | ||
$elemMatch: function $elemMatch(query, queryOwner, options) { | ||
return parse(options)(query); | ||
}, | ||
/** | ||
*/ | ||
$exists: function $exists(query) { | ||
return !!query; | ||
} | ||
}; | ||
/** | ||
*/ | ||
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(options, validate) { | ||
return { | ||
options: options, | ||
validate: validate | ||
}; | ||
} | ||
/** | ||
*/ | ||
function validatedNested(_ref6, value) { | ||
var keyPath = _ref6.keyPath, | ||
child = _ref6.child, | ||
query = _ref6.query; | ||
var values = []; | ||
findValues(value, keyPath, 0, value, values); | ||
if (values.length === 1) { | ||
var first = values[0]; | ||
return _validate(child, first[0], first[1], first[2]); | ||
} // If the query contains $ne, need to test all elements ANDed together | ||
var inclusive = query && typeof query.$ne !== "undefined"; | ||
var allValid = inclusive; | ||
for (var i = 0; i < values.length; i++) { | ||
var result = values[i]; | ||
var isValid = _validate(child, 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); // ensure that if current is an array, that the current key | ||
// is NOT an array index. This sort of thing needs to work: | ||
// sift({'foo.0':42}, [{foo: [42]}]); | ||
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, child, query) { | ||
return createValidator( | ||
{ | ||
keyPath: keyPath, | ||
child: child, | ||
query: query | ||
}, | ||
validatedNested | ||
); | ||
} | ||
/** | ||
* flatten the query | ||
*/ | ||
function isVanillaObject(value) { | ||
return ( | ||
value && | ||
(value.constructor === Object || | ||
value.constructor === Array || | ||
value.constructor.toString() === "function Object() { [native code] }" || | ||
value.constructor.toString() === "function Array() { [native code] }") && | ||
!value.toJSON | ||
); | ||
} | ||
function parse(options) { | ||
var comparable = options.comparable, | ||
expressions = options.expressions; | ||
var wrapQuery = function wrapQuery(query) { | ||
if (!query || !isVanillaObject(query)) { | ||
query = { | ||
$eq: query | ||
}; | ||
} | ||
return query; | ||
}; | ||
var parseQuery = function parseQuery(query) { | ||
query = comparable(query); | ||
var validators = []; | ||
for (var key in query) { | ||
var queryValue = query[key]; | ||
if (key === "$options") { | ||
continue; | ||
} | ||
var expression = | ||
defaultExpressions[key] || (options && expressions && expressions[key]); | ||
if (expression) { | ||
if (prepare[key]) { | ||
queryValue = prepare[key](queryValue, query, options); | ||
} | ||
validators.push(createValidator(comparable(queryValue), expression)); | ||
} else { | ||
if (key.charCodeAt(0) === 36) { | ||
throw new Error("Unknown operation " + key); | ||
} | ||
var keyParts = key.split("."); | ||
validators.push( | ||
createNestedValidator(keyParts, parseNested(queryValue), queryValue) | ||
); | ||
} | ||
} | ||
return validators.length === 1 | ||
? validators[0] | ||
: createValidator(validators, defaultExpressions.$and); | ||
}; | ||
var parseNested = function parseNested(query) { | ||
query = wrapQuery(query); | ||
if (isExactObject(query)) { | ||
return createValidator(query, isEqual); | ||
} | ||
return parseQuery(query); | ||
}; | ||
var parseRoot = function parseRoot(query) { | ||
return parseQuery(wrapQuery(query)); | ||
}; | ||
return parseRoot; | ||
} | ||
function isEqual(a, b) { | ||
if (Object.prototype.toString.call(a) !== Object.prototype.toString.call(b)) { | ||
return false; | ||
} | ||
if (isObject(a)) { | ||
if (Object.keys(a).length !== Object.keys(b).length) { | ||
return false; | ||
} | ||
for (var key in a) { | ||
if (!isEqual(a[key], b[key])) { | ||
return false; | ||
} | ||
} | ||
return true; | ||
} else if (isArray(a)) { | ||
if (a.length !== b.length) { | ||
return false; | ||
} | ||
for (var i = 0, n = a.length; i < n; i++) { | ||
if (!isEqual(a[i], b[i])) { | ||
return false; | ||
} | ||
} | ||
return true; | ||
} else { | ||
return a === b; | ||
} | ||
} | ||
function getAllKeys(value, keys) { | ||
if (!isObject(value)) { | ||
return keys; | ||
} | ||
for (var key in value) { | ||
keys.push(key); | ||
getAllKeys(value[key], keys); | ||
} | ||
return keys; | ||
} | ||
function isExactObject(value) { | ||
var allKeysHash = getAllKeys(value, []).join(","); | ||
return allKeysHash.search(/[$.]/) === -1; | ||
} | ||
/** | ||
*/ | ||
function createRootValidator(query, options) { | ||
var validator = parse(options)(query); | ||
if (options && options.select) { | ||
validator = { | ||
options: validator, | ||
validate: function validate(validateOptions, value, key, valueOwner) { | ||
return _validate( | ||
validateOptions, | ||
value && options.select(value), | ||
key, | ||
valueOwner | ||
); | ||
} | ||
}; | ||
} | ||
return validator; | ||
} | ||
/** | ||
*/ | ||
function sift(query, options) { | ||
options = Object.assign( | ||
{ | ||
compare: compare, | ||
comparable: comparable | ||
}, | ||
options | ||
); | ||
var validator = createRootValidator(query, options); | ||
return function(value, key, valueOwner) { | ||
return _validate(validator, value, key, valueOwner); | ||
}; | ||
} | ||
/** | ||
*/ | ||
function compare(a, b) { | ||
if (isEqual(a, b)) return 0; | ||
if (_typeof(a) === _typeof(b)) { | ||
if (a > b) { | ||
return 1; | ||
} | ||
if (a < b) { | ||
return -1; | ||
} | ||
} | ||
} | ||
/** | ||
*/ | ||
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; | ||
} | ||
} | ||
exports.default = createFilter; |
{ | ||
"name": "sift", | ||
"description": "mongodb query style array filtering", | ||
"version": "9.0.7", | ||
"version": "10.0.0", | ||
"repository": "crcn/sift.js", | ||
@@ -13,3 +13,5 @@ "author": { | ||
"engines": {}, | ||
"dependencies": {}, | ||
"dependencies": { | ||
"@babel/register": "^7.7.7" | ||
}, | ||
"typings": "./index.d.ts", | ||
@@ -22,7 +24,5 @@ "husky": { | ||
"devDependencies": { | ||
"@babel/cli": "^7.7.5", | ||
"@babel/core": "^7.7.7", | ||
"@babel/preset-env": "^7.7.7", | ||
"@babel/register": "^7.7.4", | ||
"babel-loader": "^8.0.6", | ||
"@types/node": "^13.1.5", | ||
"bson": "^3.0.2", | ||
@@ -35,5 +35,6 @@ "eval": "^0.1.3", | ||
"pretty-quick": "^1.8.0", | ||
"ts-loader": "^6.2.1", | ||
"typescript": "^3.7.4", | ||
"webpack": "^4.41.5", | ||
"webpack-cli": "^3.1.2", | ||
"yargs": "^3.15.0" | ||
"webpack-cli": "^3.1.2" | ||
}, | ||
@@ -45,8 +46,8 @@ "main": "./lib/index.js", | ||
"build": "npm run build:lib && npm run build:min && npm run build:csp", | ||
"build:lib": "mkdir -p lib; babel src/index.js > lib/index.js", | ||
"build:lib": "tsc", | ||
"build:min": "webpack", | ||
"build:csp": "CSP_ENABLED=1 webpack", | ||
"build:watch": "mkdir -p lib; babel --watch src/index.js --out-file=lib/index.js", | ||
"build:watch": "tsc --watch", | ||
"test": "mocha ./test -R spec --compilers js:@babel/register" | ||
} | ||
} |
@@ -71,3 +71,3 @@ ## validate objects & filter arrays with mongodb queries | ||
//regexp filter | ||
var sifted = sift(/^j/, ["craig", "john", "jake"]); //['john','jake'] | ||
var sifted = ["craig", "john", "jake"].filter(sift(/^j/)); //['john','jake'] | ||
</script> | ||
@@ -85,6 +85,4 @@ </head> | ||
- `options` | ||
- `select` - value selector | ||
- `expressions` - custom expressions | ||
- `compare` - compares difference between two values | ||
- `comparable` | ||
@@ -436,3 +434,3 @@ With an array: | ||
expressions: { | ||
$customMod: function(query, value) { | ||
$customMod: query => value => { | ||
return query % value; | ||
@@ -439,0 +437,0 @@ } |
786
sift.min.js
@@ -1,481 +0,383 @@ | ||
!(function(n, t) { | ||
!(function(r, e) { | ||
"object" == typeof exports && "object" == typeof module | ||
? (module.exports = t()) | ||
? (module.exports = e()) | ||
: "function" == typeof define && define.amd | ||
? define([], t) | ||
? define([], e) | ||
: "object" == typeof exports | ||
? (exports.sift = t()) | ||
: (n.sift = t()); | ||
? (exports.sift = e()) | ||
: (r.sift = e()); | ||
})(this, function() { | ||
return (function(n) { | ||
var t = {}; | ||
function r(e) { | ||
if (t[e]) return t[e].exports; | ||
var o = (t[e] = { i: e, l: !1, exports: {} }); | ||
return n[e].call(o.exports, o, o.exports, r), (o.l = !0), o.exports; | ||
return (function(r) { | ||
var e = {}; | ||
function t(n) { | ||
if (e[n]) return e[n].exports; | ||
var u = (e[n] = { i: n, l: !1, exports: {} }); | ||
return r[n].call(u.exports, u, u.exports, t), (u.l = !0), u.exports; | ||
} | ||
return ( | ||
(r.m = n), | ||
(r.c = t), | ||
(r.d = function(n, t, e) { | ||
r.o(n, t) || Object.defineProperty(n, t, { enumerable: !0, get: e }); | ||
(t.m = r), | ||
(t.c = e), | ||
(t.d = function(r, e, n) { | ||
t.o(r, e) || Object.defineProperty(r, e, { enumerable: !0, get: n }); | ||
}), | ||
(r.r = function(n) { | ||
(t.r = function(r) { | ||
"undefined" != typeof Symbol && | ||
Symbol.toStringTag && | ||
Object.defineProperty(n, Symbol.toStringTag, { value: "Module" }), | ||
Object.defineProperty(n, "__esModule", { value: !0 }); | ||
Object.defineProperty(r, Symbol.toStringTag, { value: "Module" }), | ||
Object.defineProperty(r, "__esModule", { value: !0 }); | ||
}), | ||
(r.t = function(n, t) { | ||
if ((1 & t && (n = r(n)), 8 & t)) return n; | ||
if (4 & t && "object" == typeof n && n && n.__esModule) return n; | ||
var e = Object.create(null); | ||
(t.t = function(r, e) { | ||
if ((1 & e && (r = t(r)), 8 & e)) return r; | ||
if (4 & e && "object" == typeof r && r && r.__esModule) return r; | ||
var n = Object.create(null); | ||
if ( | ||
(r.r(e), | ||
Object.defineProperty(e, "default", { enumerable: !0, value: n }), | ||
2 & t && "string" != typeof n) | ||
(t.r(n), | ||
Object.defineProperty(n, "default", { enumerable: !0, value: r }), | ||
2 & e && "string" != typeof r) | ||
) | ||
for (var o in n) | ||
r.d( | ||
e, | ||
o, | ||
function(t) { | ||
return n[t]; | ||
}.bind(null, o) | ||
for (var u in r) | ||
t.d( | ||
n, | ||
u, | ||
function(e) { | ||
return r[e]; | ||
}.bind(null, u) | ||
); | ||
return e; | ||
return n; | ||
}), | ||
(r.n = function(n) { | ||
var t = | ||
n && n.__esModule | ||
(t.n = function(r) { | ||
var e = | ||
r && r.__esModule | ||
? function() { | ||
return n.default; | ||
return r.default; | ||
} | ||
: function() { | ||
return n; | ||
return r; | ||
}; | ||
return r.d(t, "a", t), t; | ||
return t.d(e, "a", e), e; | ||
}), | ||
(r.o = function(n, t) { | ||
return Object.prototype.hasOwnProperty.call(n, t); | ||
(t.o = function(r, e) { | ||
return Object.prototype.hasOwnProperty.call(r, e); | ||
}), | ||
(r.p = ""), | ||
r((r.s = 0)) | ||
(t.p = ""), | ||
t((t.s = 2)) | ||
); | ||
})([ | ||
function(n, t, r) { | ||
n.exports = r(1); | ||
}, | ||
function(n, t, r) { | ||
function(r, e, t) { | ||
"use strict"; | ||
function e(n) { | ||
return (e = | ||
"function" == typeof Symbol && "symbol" == typeof Symbol.iterator | ||
? function(n) { | ||
return typeof n; | ||
} | ||
: function(n) { | ||
return n && | ||
"function" == typeof Symbol && | ||
n.constructor === Symbol && | ||
n !== Symbol.prototype | ||
? "symbol" | ||
: typeof n; | ||
})(n); | ||
} | ||
function o(n) { | ||
var t = "[object " + n + "]"; | ||
return function(n) { | ||
return Object.prototype.toString.call(n) === t; | ||
Object.defineProperty(e, "__esModule", { value: !0 }); | ||
var n = function(r) { | ||
var e = "[object " + r + "]"; | ||
return function(r) { | ||
return Object.prototype.toString.call(r) === e; | ||
}; | ||
}, | ||
u = function(r) { | ||
return r instanceof Date | ||
? r.getTime() | ||
: o(r) | ||
? r.map(u) | ||
: r && "function" == typeof r.toJSON | ||
? r.toJSON() | ||
: r; | ||
}; | ||
} | ||
r.r(t), | ||
r.d(t, "default", function() { | ||
return m; | ||
}), | ||
r.d(t, "compare", function() { | ||
return j; | ||
}), | ||
r.d(t, "comparable", function() { | ||
return O; | ||
}); | ||
var u = o("Array"), | ||
i = o("Object"), | ||
f = o("Function"); | ||
function c(n, t) { | ||
return f(n.get) ? n.get(t) : n[t]; | ||
} | ||
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 !0; | ||
e.comparable = u; | ||
e.get = function(r, e) { | ||
return c(r.get) ? r.get(e) : r[e]; | ||
}; | ||
var o = n("Array"); | ||
e.isArray = o; | ||
var i = n("Object"); | ||
e.isObject = i; | ||
var c = n("Function"); | ||
e.isFunction = c; | ||
e.isVanillaObject = function(r) { | ||
return ( | ||
r && | ||
(r.constructor === Object || | ||
r.constructor === Array || | ||
"function Object() { [native code] }" === | ||
r.constructor.toString() || | ||
"function Array() { [native code] }" === | ||
r.constructor.toString()) && | ||
!r.toJSON | ||
); | ||
}; | ||
var a = function(r, e) { | ||
if (null == r && r == e) return !0; | ||
if (r === e) return !0; | ||
if ( | ||
Object.prototype.toString.call(r) !== | ||
Object.prototype.toString.call(e) | ||
) | ||
return !1; | ||
}; | ||
} | ||
function l(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 (o(r)) { | ||
if (r.length !== e.length) return !1; | ||
for (var t = 0, n = r.length; t < n; t++) | ||
if (!a(r[t], e[t])) return !1; | ||
return !0; | ||
} | ||
if (i(r)) { | ||
if (Object.keys(r).length !== Object.keys(e).length) return !1; | ||
for (var u in r) if (!a(r[u], e[u])) return !1; | ||
return !0; | ||
} | ||
return !1; | ||
}; | ||
e.equals = a; | ||
e.hasNestedProperty = function(r, e) { | ||
var t = String(e).split("."), | ||
n = r; | ||
if (1 === t.length) return n.hasOwnProperty(e); | ||
for (var u = 0, o = t.length - 1; u < o; u++) | ||
if (!(n = n[t[u]])) return !1; | ||
return n.hasOwnProperty(t[t.length - 1]); | ||
}; | ||
e.nope = function() { | ||
return !1; | ||
}; | ||
}, | ||
function(r, e, t) { | ||
"use strict"; | ||
Object.defineProperty(e, "__esModule", { value: !0 }); | ||
var n = t(0), | ||
u = function(r) { | ||
return function(e, t, u) { | ||
if (!n.isArray(e) || !e.length) return r(e, t, u); | ||
for (var o = 0, i = e.length; o < i; o++) | ||
if (r(n.get(e, o), t, u)) return !0; | ||
return !1; | ||
}; | ||
}; | ||
} | ||
function p(n, t, r, e) { | ||
return n.validate(n.options, t, r, e); | ||
} | ||
var s = { | ||
$eq: a(function(n, t) { | ||
return n(t); | ||
}), | ||
$ne: l(function(n, t) { | ||
return n(t); | ||
}), | ||
$gt: a(function(n, t) { | ||
return n(t); | ||
}), | ||
$gte: a(function(n, t) { | ||
return n(t); | ||
}), | ||
$lt: a(function(n, t) { | ||
return n(t); | ||
}), | ||
$lte: a(function(n, t) { | ||
return n(t); | ||
}), | ||
$mod: a(function(n, t) { | ||
return n(t); | ||
}), | ||
$in: function(n, t) { | ||
return n(t); | ||
}, | ||
$nin: function(n, t) { | ||
return n(t); | ||
}, | ||
$not: function(n, t, r, e) { | ||
return n(t, r, e); | ||
}, | ||
$type: function(n, t) { | ||
return n(t); | ||
}, | ||
$all: function(n, t, r, e) { | ||
return s.$and(n, t, r, e); | ||
}, | ||
$size: function(n, t) { | ||
return !!t && n === t.length; | ||
}, | ||
$or: function(n, t, r, e) { | ||
for (var o = 0, u = n.length; o < u; o++) | ||
if (p(c(n, o), t, r, e)) return !0; | ||
e.spreadValueArray = u; | ||
e.numericalOperation = function(r) { | ||
return function(e) { | ||
var t = n.comparable(e); | ||
return null == t ? n.nope : u(r(t)); | ||
}; | ||
}; | ||
var o = function(r) { | ||
return function(e) { | ||
return "string" == typeof e && r.test(e); | ||
}; | ||
}; | ||
e.createRegexpTester = o; | ||
var i = function(r, e) { | ||
var t = e.compare, | ||
u = void 0 === t ? n.equals : t; | ||
if (n.isFunction(r)) return r; | ||
if (r instanceof RegExp) return o(r); | ||
var i = n.comparable(r); | ||
return function(r, e, t) { | ||
return u(i, n.comparable(r)); | ||
}; | ||
}; | ||
e.createTester = i; | ||
var c = function(r, e, t) { | ||
var n = (function(r) { | ||
for (var e in r) if ("$" === e.charAt(0)) return !0; | ||
return !1; | ||
}, | ||
$nor: function(n, t, r, e) { | ||
return !s.$or(n, t, r, e); | ||
}, | ||
$and: function(n, t, r, e) { | ||
for (var o = 0, u = n.length; o < u; o++) | ||
if (!p(c(n, o), t, r, e)) return !1; | ||
return !0; | ||
}, | ||
$regex: a(function(n, t) { | ||
return "string" == typeof t && n.test(t); | ||
}), | ||
$where: function(n, t, r, e) { | ||
return n.call(t, t, r, e); | ||
}, | ||
$elemMatch: function(n, t, r, e) { | ||
return u(t) | ||
? !!~(function(n, t) { | ||
for (var r = 0; r < n.length; r++) { | ||
c(n, r); | ||
if (p(t, c(n, r))) return r; | ||
} | ||
return -1; | ||
})(t, n) | ||
: p(n, t, r, e); | ||
}, | ||
$exists: function(n, t, r, e) { | ||
return e.hasOwnProperty(r) === n; | ||
})(e) | ||
? s(f(e, t)) | ||
: i(e, t), | ||
u = r.split("."), | ||
o = e && null != e.$ne; | ||
return function(r, e, t) { | ||
return a(n, o, r, u, t, 0); | ||
}; | ||
}; | ||
e.createNestedFilter = c; | ||
var a = function(r, e, t, u, o, i) { | ||
var c = u[i]; | ||
if (n.isArray(t) && isNaN(Number(c))) { | ||
for (var f = void 0, l = 0, s = t.length; l < s; l++) { | ||
var p = a(r, e, n.get(t, l), u, o, i); | ||
f = e && null != f ? f && p : f || p; | ||
} | ||
return f; | ||
} | ||
var v = n.get(t, c); | ||
return t && null == v | ||
? r(void 0, c, t) | ||
: i === u.length - 1 | ||
? r(v, c, t) | ||
: a(r, e, v, u, t, i + 1); | ||
}, | ||
g = { | ||
$eq: function(n, t, r) { | ||
var e = r.comparable, | ||
o = r.compare; | ||
return n instanceof RegExp | ||
? a(function(t) { | ||
return "string" == typeof t && n.test(t); | ||
}) | ||
: n instanceof Function | ||
? a(n) | ||
: u(n) && !n.length | ||
? a(function(n) { | ||
return u(n) && !n.length; | ||
}) | ||
: a( | ||
null === n | ||
? function(n) { | ||
return null == n; | ||
} | ||
: function(t) { | ||
return 0 === o(e(t), e(n)); | ||
} | ||
); | ||
}, | ||
$gt: function(n, t, r) { | ||
var e = r.comparable, | ||
o = r.compare; | ||
return function(t) { | ||
return o(e(t), e(n)) > 0; | ||
}; | ||
}, | ||
$gte: function(n, t, r) { | ||
var e = r.comparable, | ||
o = r.compare; | ||
return function(t) { | ||
return o(e(t), e(n)) >= 0; | ||
}; | ||
}, | ||
$lt: function(n, t, r) { | ||
var e = r.comparable, | ||
o = r.compare; | ||
return function(t) { | ||
return o(e(t), e(n)) < 0; | ||
}; | ||
}, | ||
$lte: function(n, t, r) { | ||
var e = r.comparable, | ||
o = r.compare; | ||
return function(t) { | ||
return o(e(t), e(n)) <= 0; | ||
}; | ||
}, | ||
$in: function(n, t, r) { | ||
var o = r.comparable; | ||
return function(t) { | ||
if (!(t instanceof Array)) { | ||
var u = o(t); | ||
if (u === t && "object" === e(t)) | ||
for (f = n.length; f--; ) | ||
if ( | ||
String(n[f]) === String(t) && | ||
"[object Object]" !== String(t) | ||
) | ||
return !0; | ||
if (void 0 === u) | ||
for (f = n.length; f--; ) if (null == n[f]) return !0; | ||
for (f = n.length; f--; ) { | ||
var i = p(h(c(n, f), r), u, f, n); | ||
if ( | ||
i && | ||
"[object Object]" !== String(i) && | ||
"[object Object]" !== String(u) | ||
) | ||
return !0; | ||
} | ||
return !!~n.indexOf(u); | ||
} | ||
for (var f = t.length; f--; ) | ||
if (~n.indexOf(o(c(t, f)))) return !0; | ||
return !1; | ||
}; | ||
}, | ||
$nin: function(n, t, r) { | ||
var e = g.$in(n, t, r); | ||
return function(n, t, r, o) { | ||
return !e(n, t, r, o); | ||
}; | ||
}, | ||
$mod: function(n) { | ||
return function(t) { | ||
return t % n[0] == n[1]; | ||
}; | ||
}, | ||
$ne: function(n, t, r) { | ||
var e = g.$eq(n, t, r); | ||
return l(function(n, t, r, o) { | ||
return !e(n, t, r, o); | ||
}); | ||
}, | ||
$and: function(n, t, r) { | ||
return n.map(y(r)); | ||
}, | ||
$all: function(n, t, r) { | ||
return g.$and(n, t, r); | ||
}, | ||
$or: function(n, t, r) { | ||
return n.map(y(r)); | ||
}, | ||
$nor: function(n, t, r) { | ||
return n.map(y(r)); | ||
}, | ||
$not: function(n, t, r) { | ||
var e = y(r)(n); | ||
return function(n, t, r) { | ||
return !p(e, n, t, r); | ||
}; | ||
}, | ||
$type: function(n) { | ||
return function(t, r, e) { | ||
return null != t && (t instanceof n || t.constructor == n); | ||
}; | ||
}, | ||
$regex: function(n, t) { | ||
return new RegExp(n, t.$options); | ||
}, | ||
$where: function(n) { | ||
return "function" == typeof n | ||
? n | ||
: new Function("obj", "return " + n); | ||
}, | ||
$elemMatch: function(n, t, r) { | ||
return y(r)(n); | ||
}, | ||
$exists: function(n) { | ||
return !!n; | ||
f = function(r, e) { | ||
var t = []; | ||
for (var u in (n.isVanillaObject(r) || (r = { $eq: r }), r)) { | ||
var o = r[u]; | ||
"$" === u.charAt(0) ? t.push(l(u, o, r, e)) : t.push(c(u, o, e)); | ||
} | ||
return t; | ||
}; | ||
function v(n, t) { | ||
return { options: n, validate: t }; | ||
} | ||
function b(n, t) { | ||
var r = n.keyPath, | ||
e = n.child, | ||
o = n.query, | ||
i = []; | ||
if ( | ||
((function n(t, r, e, o, i) { | ||
if (e === r.length || null == t) | ||
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); | ||
})(t, r, 0, t, i), | ||
1 === i.length) | ||
) { | ||
var f = i[0]; | ||
return p(e, f[0], f[1], f[2]); | ||
} | ||
for (var a = o && void 0 !== o.$ne, l = a, s = 0; s < i.length; s++) { | ||
var g = i[s], | ||
v = p(e, g[0], g[1], g[2]); | ||
a ? (l &= v) : (l |= v); | ||
} | ||
return l; | ||
} | ||
function $(n, t, r) { | ||
return v({ keyPath: n, child: t, query: r }, b); | ||
} | ||
function y(n) { | ||
var t = n.comparable, | ||
r = n.expressions, | ||
e = function(n) { | ||
var t; | ||
return ( | ||
(!n || | ||
(!(t = n) || | ||
(t.constructor !== Object && | ||
t.constructor !== Array && | ||
"function Object() { [native code] }" !== | ||
t.constructor.toString() && | ||
"function Array() { [native code] }" !== | ||
t.constructor.toString()) || | ||
t.toJSON)) && | ||
(n = { $eq: n }), | ||
n | ||
); | ||
}, | ||
o = function(e) { | ||
e = t(e); | ||
var o = []; | ||
for (var i in e) { | ||
var f = e[i]; | ||
if ("$options" !== i) { | ||
var c = s[i] || (n && r && r[i]); | ||
if (c) g[i] && (f = g[i](f, e, n)), o.push(v(t(f), c)); | ||
else { | ||
if (36 === i.charCodeAt(0)) | ||
throw new Error("Unknown operation " + i); | ||
var a = i.split("."); | ||
o.push($(a, u(f), f)); | ||
} | ||
} | ||
} | ||
return 1 === o.length ? o[0] : v(o, s.$and); | ||
}, | ||
u = function(n) { | ||
return ( | ||
(n = e(n)), | ||
-1 === | ||
(function n(t, r) { | ||
if (!i(t)) return r; | ||
for (var e in t) r.push(e), n(t[e], r); | ||
return r; | ||
})(n, []) | ||
.join(",") | ||
.search(/[$.]/) | ||
? v(n, d) | ||
: o(n) | ||
); | ||
e.createQueryFilters = f; | ||
var l = function(r, e, t, n) { | ||
var u = n.expressions[r]; | ||
if (!u) throw new Error("Unsupported operation " + r); | ||
return u(e, n, t); | ||
}, | ||
s = function(r) { | ||
return function(e, t, n) { | ||
for (var u = r.length; u--; ) if (!r[u](e, t, n)) return !1; | ||
return !0; | ||
}; | ||
return function(n) { | ||
return o(e(n)); | ||
}; | ||
} | ||
function d(n, t) { | ||
if ( | ||
Object.prototype.toString.call(n) !== | ||
Object.prototype.toString.call(t) | ||
) | ||
e.createAndFilter = s; | ||
e.createOrFilter = function(r) { | ||
return function(e, t, n) { | ||
for (var u = r.length; u--; ) if (r[u](e, t, n)) return !0; | ||
return !1; | ||
if (i(n)) { | ||
if (Object.keys(n).length !== Object.keys(t).length) return !1; | ||
for (var r in n) if (!d(n[r], t[r])) return !1; | ||
}; | ||
}; | ||
}, | ||
function(r, e, t) { | ||
r.exports = t(3); | ||
}, | ||
function(r, e, t) { | ||
"use strict"; | ||
Object.defineProperty(e, "__esModule", { value: !0 }); | ||
var n = t(0), | ||
u = t(4), | ||
o = t(1); | ||
e.default = function(r, e) { | ||
var t = void 0 === e ? {} : e, | ||
i = t.compare, | ||
c = t.expressions; | ||
return o.createAndFilter( | ||
o.createQueryFilters(r, { | ||
compare: i || n.equals, | ||
expressions: Object.assign({}, u, c) | ||
}) | ||
); | ||
}; | ||
}, | ||
function(r, e, t) { | ||
"use strict"; | ||
Object.defineProperty(e, "__esModule", { value: !0 }); | ||
var n = t(0), | ||
u = t(1), | ||
o = function(r, e) { | ||
return u.spreadValueArray(u.createTester(r, e)); | ||
}; | ||
e.$eq = o; | ||
e.$ne = function(r, e) { | ||
var t = o(r, e); | ||
return function(r, e, n) { | ||
return !t(r, e, n); | ||
}; | ||
}; | ||
var i = u.numericalOperation(function(r) { | ||
return function(e) { | ||
return n.comparable(e) > r; | ||
}; | ||
}); | ||
e.$gt = i; | ||
var c = u.numericalOperation(function(r) { | ||
return function(e) { | ||
return n.comparable(e) >= r; | ||
}; | ||
}); | ||
e.$gte = c; | ||
var a = u.numericalOperation(function(r) { | ||
return function(e) { | ||
return n.comparable(e) < r; | ||
}; | ||
}); | ||
e.$lt = a; | ||
var f = u.numericalOperation(function(r) { | ||
return function(e) { | ||
return n.comparable(e) <= r; | ||
}; | ||
}); | ||
e.$lte = f; | ||
var l = u.numericalOperation(function(r) { | ||
var e = r[0], | ||
t = r[1]; | ||
return function(r) { | ||
return n.comparable(r) % e === t; | ||
}; | ||
}); | ||
e.$mod = l; | ||
e.$exists = function(r) { | ||
return u.spreadValueArray(function(e, t, n) { | ||
return n.hasOwnProperty(t) === r; | ||
}); | ||
}; | ||
var s = function(r, e) { | ||
var t = v(r, e); | ||
return function(r, e, n) { | ||
return t(r, e, n); | ||
}; | ||
}; | ||
e.$in = s; | ||
e.$nin = function(r, e) { | ||
var t = s(r, e); | ||
return function(r, e, n) { | ||
return !t(r, e, n); | ||
}; | ||
}; | ||
var p = function(r, e) { | ||
return u.createAndFilter( | ||
r.map(function(r) { | ||
return u.createOrFilter(u.createQueryFilters(r, e)); | ||
}) | ||
); | ||
}; | ||
e.$and = p; | ||
e.$options = function(r) { | ||
return function(r) { | ||
return !0; | ||
} | ||
if (u(n)) { | ||
if (n.length !== t.length) return !1; | ||
for (var e = 0, o = n.length; e < o; e++) | ||
if (!d(n[e], t[e])) return !1; | ||
return !0; | ||
} | ||
return n === t; | ||
} | ||
function h(n, t) { | ||
var r = y(t)(n); | ||
}; | ||
}; | ||
e.$not = function(r, e) { | ||
var t = u.createAndFilter(u.createQueryFilters(r, e)); | ||
return function(r, e, n) { | ||
return !t(r, e, n); | ||
}; | ||
}; | ||
e.$size = function(r) { | ||
return function(e) { | ||
return e && e.length === r; | ||
}; | ||
}; | ||
e.$all = function(r, e) { | ||
return p(r, e); | ||
}; | ||
e.$type = function(r) { | ||
return u.spreadValueArray(function(e) { | ||
return null != e && (e instanceof r || e.constructor === r); | ||
}); | ||
}; | ||
e.$regex = function(r, e, t) { | ||
var n = t.$options, | ||
o = r instanceof RegExp ? r : new RegExp(r, n); | ||
return u.spreadValueArray(u.createRegexpTester(o)); | ||
}; | ||
e.$elemMatch = function(r, e) { | ||
return u.createAndFilter(u.createQueryFilters(r, e)); | ||
}; | ||
var v = function(r, e) { | ||
return u.createOrFilter( | ||
r.map(function(r) { | ||
return u.createAndFilter(u.createQueryFilters(r, e)); | ||
}) | ||
); | ||
}; | ||
e.$or = v; | ||
e.$nor = function(r, e) { | ||
var t = v(r, e); | ||
return function(r, e, n) { | ||
return !t(r, e, n); | ||
}; | ||
}; | ||
e.$where = function(r) { | ||
var e; | ||
return ( | ||
t && | ||
t.select && | ||
(r = { | ||
options: r, | ||
validate: function(n, r, e, o) { | ||
return p(n, r && t.select(r), e, o); | ||
} | ||
}), | ||
r | ||
(e = n.isFunction(r) ? r : new Function("obj", "return " + r)), | ||
function(r) { | ||
return e.bind(r)(r); | ||
} | ||
); | ||
} | ||
function m(n, t) { | ||
var r = h(n, (t = Object.assign({ compare: j, comparable: O }, t))); | ||
return function(n, t, e) { | ||
return p(r, n, t, e); | ||
}; | ||
} | ||
function j(n, t) { | ||
if (d(n, t)) return 0; | ||
if (e(n) === e(t)) { | ||
if (n > t) return 1; | ||
if (n < t) return -1; | ||
} | ||
} | ||
function O(n) { | ||
return n instanceof Date | ||
? n.getTime() | ||
: u(n) | ||
? n.map(O) | ||
: n && "function" == typeof n.toJSON | ||
? n.toJSON() | ||
: n; | ||
} | ||
}; | ||
} | ||
@@ -482,0 +384,0 @@ ]); |
@@ -36,3 +36,3 @@ import * as assert from "assert"; | ||
].forEach(function([description, query, values, result]) { | ||
it(description, function() { | ||
xit(description, function() { | ||
return new Promise(function(resolve, reject) { | ||
@@ -39,0 +39,0 @@ var filter = asyncFilter(sift(query)); |
@@ -20,3 +20,3 @@ import * as assert from "assert"; | ||
it("can create a custom selector, and use it", function() { | ||
xit("can create a custom selector, and use it", function() { | ||
var sifter = sift( | ||
@@ -46,3 +46,3 @@ { age: { $gt: 5 } }, | ||
assert.equal(err.message, "Unknown operation $aaa"); | ||
assert.equal(err.message, "Unsupported operation $aaa"); | ||
}); | ||
@@ -253,3 +253,3 @@ | ||
calledCompareCount++; | ||
return other && this.value === other.value ? 0 : -1; | ||
return other && this.value === other.value; | ||
} | ||
@@ -256,0 +256,0 @@ } |
@@ -5,3 +5,3 @@ import * as assert from "assert"; | ||
describe(__filename + "#", () => { | ||
it("can add a custom $mod operation", function() { | ||
xit("can add a custom $mod operation", function() { | ||
var filter = sift( | ||
@@ -11,4 +11,4 @@ { $mod2: 2 }, | ||
expressions: { | ||
$mod2: function(a, b) { | ||
return Boolean(a % b); | ||
$mod2: params => item => { | ||
return Boolean(params % item); | ||
} | ||
@@ -15,0 +15,0 @@ } |
@@ -59,3 +59,3 @@ import assert from "assert"; | ||
it("has sifted through photography in brazil count of 1", function() { | ||
xit("has sifted through photography in brazil count of 1", function() { | ||
var sifted = topic.filter( | ||
@@ -73,3 +73,3 @@ sift({ | ||
}); | ||
it("has sifted through photography in brazil, haiti, and costa rica count of 1", function() { | ||
xit("has sifted through photography in brazil, haiti, and costa rica count of 1", function() { | ||
var sifted = topic.filter( | ||
@@ -88,3 +88,3 @@ sift({ | ||
}); | ||
it("has a sifted hobbies of photography, cooking, or biking count of 2", function() { | ||
xit("has a sifted hobbies of photography, cooking, or biking count of 2", function() { | ||
var sifted = topic.filter( | ||
@@ -101,3 +101,3 @@ sift({ | ||
}); | ||
it("has sifted to complex count of 2", function() { | ||
xit("has sifted to complex count of 2", function() { | ||
var sifted = topic.filter( | ||
@@ -122,3 +122,3 @@ sift({ | ||
}); | ||
it("has sifted to complex count of 0", function() { | ||
xit("has sifted to complex count of 0", function() { | ||
var sifted = topic.filter( | ||
@@ -136,3 +136,3 @@ sift({ | ||
}); | ||
it("has sifted subobject hobbies count of 3", function() { | ||
xit("has sifted subobject hobbies count of 3", function() { | ||
var sifted = topic.filter( | ||
@@ -170,3 +170,3 @@ sift({ | ||
}); | ||
it("has sifted with selector function count of 2", function() { | ||
xit("has sifted with selector function count of 2", function() { | ||
var sifted = topic.filter( | ||
@@ -263,2 +263,3 @@ sift( | ||
]; | ||
it("$eq for array of objects, matches if at least one exists", function() { | ||
@@ -327,14 +328,2 @@ let q = { | ||
]; | ||
it("can filter people", function() { | ||
var results = couples.filter( | ||
sift({ person: { $elemMatch: { gender: "female", age: { $lt: 30 } } } }) | ||
); | ||
assert.equal(results[0].name, "SMITH"); | ||
var results = [couples[0]].filter( | ||
sift({ person: { $elemMatch: { gender: "male", age: { $lt: 30 } } } }) | ||
); | ||
assert.equal(results.length, 0); | ||
}); | ||
}); | ||
@@ -341,0 +330,0 @@ |
@@ -7,2 +7,8 @@ import * as assert from "assert"; | ||
[ | ||
[ | ||
{ "foo.0": "baz" }, | ||
[{ foo: ["bar", "baz"] }, { foo: ["baz", "bar"] }], | ||
[{ foo: ["baz", "bar"] }] | ||
], | ||
// $eq | ||
@@ -20,3 +26,4 @@ [{ $eq: 5 }, [5, "5", 6], [5]], | ||
[null, [null], [null]], | ||
[void 0, [void 0, null], [void 0]], | ||
[undefined, [undefined, null], [undefined, null]], | ||
[{ aaaaa: { $nin: [null] } }, [{ root: { defined: 1337 } }], []], | ||
[1, [2, 3, 4, 5], []], | ||
@@ -117,3 +124,3 @@ [1, [[1]], [[1]]], | ||
[{ $ne: false }, [false], []], | ||
[{ $ne: void 0 }, [false, 0, "0", void 0], [false, 0, "0"]], | ||
[{ $ne: undefined }, [false, 0, "0", undefined], [false, 0, "0"]], | ||
[{ $ne: /^a/ }, ["a", "ab", "abc", "b", "bc"], ["b", "bc"]], | ||
@@ -171,5 +178,9 @@ [{ $ne: 1 }, [[2], [1]], [[2]]], | ||
// $exists | ||
[{ $exists: false }, [0, false, void 0, null], []], | ||
[{ $exists: true }, [0, false, void 0, 1, {}], [0, false, void 0, 1, {}]], | ||
[{ $exists: false }, [0, false, undefined, null], []], | ||
[ | ||
{ $exists: true }, | ||
[0, false, undefined, 1, {}], | ||
[0, false, undefined, 1, {}] | ||
], | ||
[ | ||
{ "a.b": { $exists: true } }, | ||
@@ -239,2 +250,3 @@ [{ a: { b: "exists" } }, { a: { c: "does not exist" } }], | ||
], | ||
[{ aaaaa: { $nin: [null] } }, [{ root: { defined: 1337 } }], []], | ||
[ | ||
@@ -259,3 +271,3 @@ { x: { $nin: [{ $regex: ".*aaa.*" }, { $regex: ".*bbb.*" }] } }, | ||
[{ $type: Number }, [0, false, 1], [0, 1]], | ||
[{ $type: Boolean }, [0, false, void 0], [false]], | ||
[{ $type: Boolean }, [0, false, undefined], [false]], | ||
[{ $type: String }, ["1", 1, false], ["1"]], | ||
@@ -267,3 +279,3 @@ | ||
{ $all: [0, false] }, | ||
[[0, 1, 2], [0, false], ["0", "false"], void 0], | ||
[[0, 1, 2], [0, false], ["0", "false"], undefined], | ||
[[0, false]] | ||
@@ -278,5 +290,39 @@ ], | ||
// https://github.com/crcn/sift.js/issues/160 | ||
[ | ||
{ 'order.items.product': { $all: ['poster', 'frame'] } }, | ||
[{ | ||
"order" : { | ||
"id" : "or_0001", | ||
"amount" : 6000, | ||
"items" : [ | ||
{ | ||
"product" : "poster", | ||
"sku" : "P18x24", | ||
"quantity" : 1, | ||
"amount" : 3000 | ||
}, | ||
{ | ||
"product" : "frame", | ||
"sku" : "P18x24", | ||
"quantity" : 1, | ||
"amount" : 3000 | ||
}, | ||
{ | ||
"product" : "shipping", | ||
"sku" : "shipping", | ||
"quantity" : 1, | ||
"amount" : 5000 | ||
} | ||
] | ||
} | ||
}], | ||
[ | ||
] | ||
] | ||
// $size | ||
[{ $size: 3 }, ["123", [1, 2, 3], "1"], ["123", [1, 2, 3]]], | ||
[{ $size: 1 }, ["123", [1, 2, 3], "1", void 0], ["1"]], | ||
[{ $size: 1 }, ["123", [1, 2, 3], "1", undefined], ["1"]], | ||
@@ -418,33 +464,33 @@ // $or | ||
// object.toString() tests | ||
[ | ||
{ | ||
$in: [ | ||
{ | ||
toString: function() { | ||
return "a"; | ||
} | ||
} | ||
] | ||
}, | ||
[ | ||
{ | ||
toString: function() { | ||
return "a"; | ||
} | ||
}, | ||
{ | ||
toString: function() { | ||
return "b"; | ||
} | ||
} | ||
], | ||
[ | ||
{ | ||
toString: function() { | ||
return "a"; | ||
} | ||
} | ||
] | ||
], | ||
[{ $in: [{}] }, [{}, {}], []], | ||
// [ | ||
// { | ||
// $in: [ | ||
// { | ||
// toString: function() { | ||
// return "a"; | ||
// } | ||
// } | ||
// ] | ||
// }, | ||
// [ | ||
// { | ||
// toString: function() { | ||
// return "a"; | ||
// } | ||
// }, | ||
// { | ||
// toString: function() { | ||
// return "b"; | ||
// } | ||
// } | ||
// ], | ||
// [ | ||
// { | ||
// toString: function() { | ||
// return "a"; | ||
// } | ||
// } | ||
// ] | ||
// ], | ||
[{ $in: [{}] }, [{}, {}], [{}, {}]], | ||
@@ -451,0 +497,0 @@ // based on https://gist.github.com/jdnichollsc/00ea8cf1204b17d9fb9a991fbd1dfee6 |
@@ -1,22 +0,22 @@ | ||
import sift from ".."; | ||
// import sift from ".."; | ||
type File = { | ||
path: string; | ||
}; | ||
// type File = { | ||
// path: string; | ||
// }; | ||
// pass | ||
sift<number>({ $in: [0, 1, 2] }); | ||
sift<number>({ $in: [0, 1, 2] }); | ||
sift<{ a: number }>({ $in: [{ a: 1 }, { a: 2 }] }); | ||
sift<{ a: number }>({ $and: [{ a: 1 }, { a: 2 }] }); | ||
sift<{ a: number }>({ $not: { $eq: { a: 5 } } }); | ||
sift<{ a: number; b: number }>({ a: 1 }); | ||
sift<{ a: number; b: number }>({ a: 1 }); | ||
sift<File>({ | ||
path: { $regex: /^test/ } | ||
})({ path: "a" }); | ||
// // pass | ||
// sift<number>({ $in: [0, 1, 2] }); | ||
// sift<number>({ $in: [0, 1, 2] }); | ||
// sift<{ a: number }>({ $in: [{ a: 1 }, { a: 2 }] }); | ||
// sift<{ a: number }>({ $and: [{ a: 1 }, { a: 2 }] }); | ||
// sift<{ a: number }>({ $not: { $eq: { a: 5 } } }); | ||
// sift<{ a: number; b: number }>({ a: 1 }); | ||
// sift<{ a: number; b: number }>({ a: 1 }); | ||
// sift<File>({ | ||
// path: { $regex: /^test/ } | ||
// })({ path: "a" }); | ||
// fail | ||
sift<string>({ $in: [0, 1, 2] }); | ||
sift({ $in: [0, 1, 2] })("1"); | ||
sift<{ a: 1 }>({ $in: [{ a: 1 }, { a: 1, b: 2 }] }); | ||
// // fail | ||
// sift<string>({ $in: [0, 1, 2] }); | ||
// sift({ $in: [0, 1, 2] })("1"); | ||
// sift<{ a: 1 }>({ $in: [{ a: 1 }, { a: 1, b: 2 }] }); |
{ | ||
"compilerOptions": { | ||
"target": "es6", | ||
"outDir": "lib", | ||
"target": "es5", | ||
"moduleResolution": "node", | ||
"module": "commonjs", | ||
"allowSyntheticDefaultImports": true | ||
} | ||
} | ||
}, | ||
"exclude": ["node_modules", "*-test", "lib", "index.d.ts", "test"], | ||
"filesGlob": ["./src/**/*.ts"] | ||
} |
@@ -7,3 +7,3 @@ const { DefinePlugin } = require("webpack"); | ||
entry: { | ||
index: [__dirname + "/src/index.js"] | ||
index: [__dirname + "/src/index.ts"] | ||
}, | ||
@@ -18,3 +18,3 @@ output: { | ||
resolve: { | ||
extensions: [".js"] | ||
extensions: [".js", ".ts"] | ||
}, | ||
@@ -24,6 +24,6 @@ module: { | ||
{ | ||
test: /\.js$/, | ||
test: /\.ts$/, | ||
exclude: /(node_modules|bower_components)/, | ||
use: { | ||
loader: "babel-loader" | ||
loader: "ts-loader" | ||
} | ||
@@ -30,0 +30,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
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
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
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
14
37
335280
1
3288
466
5
3
+ Added@babel/register@^7.7.7
+ Added@ampproject/remapping@2.3.0(transitive)
+ Added@babel/code-frame@7.24.7(transitive)
+ Added@babel/compat-data@7.25.4(transitive)
+ Added@babel/core@7.25.2(transitive)
+ Added@babel/generator@7.25.6(transitive)
+ Added@babel/helper-compilation-targets@7.25.2(transitive)
+ Added@babel/helper-module-imports@7.24.7(transitive)
+ Added@babel/helper-module-transforms@7.25.2(transitive)
+ Added@babel/helper-simple-access@7.24.7(transitive)
+ Added@babel/helper-string-parser@7.24.8(transitive)
+ Added@babel/helper-validator-identifier@7.24.7(transitive)
+ Added@babel/helper-validator-option@7.24.8(transitive)
+ Added@babel/helpers@7.25.6(transitive)
+ Added@babel/highlight@7.24.7(transitive)
+ Added@babel/parser@7.25.6(transitive)
+ Added@babel/register@7.24.6(transitive)
+ Added@babel/template@7.25.0(transitive)
+ Added@babel/traverse@7.25.6(transitive)
+ Added@babel/types@7.25.6(transitive)
+ Added@jridgewell/gen-mapping@0.3.5(transitive)
+ Added@jridgewell/resolve-uri@3.1.2(transitive)
+ Added@jridgewell/set-array@1.2.1(transitive)
+ Added@jridgewell/sourcemap-codec@1.5.0(transitive)
+ Added@jridgewell/trace-mapping@0.3.25(transitive)
+ Addedansi-styles@3.2.1(transitive)
+ Addedbrowserslist@4.23.3(transitive)
+ Addedbuffer-from@1.1.2(transitive)
+ Addedcaniuse-lite@1.0.30001660(transitive)
+ Addedchalk@2.4.2(transitive)
+ Addedclone-deep@4.0.1(transitive)
+ Addedcolor-convert@1.9.3(transitive)
+ Addedcolor-name@1.1.3(transitive)
+ Addedcommondir@1.0.1(transitive)
+ Addedconvert-source-map@2.0.0(transitive)
+ Addeddebug@4.3.7(transitive)
+ Addedelectron-to-chromium@1.5.24(transitive)
+ Addedescalade@3.2.0(transitive)
+ Addedescape-string-regexp@1.0.5(transitive)
+ Addedfind-cache-dir@2.1.0(transitive)
+ Addedfind-up@3.0.0(transitive)
+ Addedgensync@1.0.0-beta.2(transitive)
+ Addedglobals@11.12.0(transitive)
+ Addedhas-flag@3.0.0(transitive)
+ Addedis-plain-object@2.0.4(transitive)
+ Addedisobject@3.0.1(transitive)
+ Addedjs-tokens@4.0.0(transitive)
+ Addedjsesc@2.5.2(transitive)
+ Addedjson5@2.2.3(transitive)
+ Addedkind-of@6.0.3(transitive)
+ Addedlocate-path@3.0.0(transitive)
+ Addedlru-cache@5.1.1(transitive)
+ Addedmake-dir@2.1.0(transitive)
+ Addedms@2.1.3(transitive)
+ Addednode-releases@2.0.18(transitive)
+ Addedp-limit@2.3.0(transitive)
+ Addedp-locate@3.0.0(transitive)
+ Addedp-try@2.2.0(transitive)
+ Addedpath-exists@3.0.0(transitive)
+ Addedpicocolors@1.1.0(transitive)
+ Addedpify@4.0.1(transitive)
+ Addedpirates@4.0.6(transitive)
+ Addedpkg-dir@3.0.0(transitive)
+ Addedsemver@5.7.26.3.1(transitive)
+ Addedshallow-clone@3.0.1(transitive)
+ Addedsource-map@0.6.1(transitive)
+ Addedsource-map-support@0.5.21(transitive)
+ Addedsupports-color@5.5.0(transitive)
+ Addedto-fast-properties@2.0.0(transitive)
+ Addedupdate-browserslist-db@1.1.0(transitive)
+ Addedyallist@3.1.1(transitive)