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 6.0.0 to 7.0.0

.babelrc

2

bower.json

@@ -18,5 +18,5 @@ {

"benchmark",
"gulpfile.js",
"webpack.js",
"package.json"
]
}

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

### 7.0.0
- Remove global `*.use()` function.
- converted to ES6
### 3.3.x

@@ -2,0 +7,0 @@

@@ -57,3 +57,2 @@ export type SupportedTypes = Array<string | { [index: string]: any } | number | null | any>;

indexOf<T extends SupportedTypes>(query: SiftQuery<T>, target: T, rawSelector?: any): number;
use<K>(plugin: PluginFunction<K> | PluginDefinition<K>): void;
compare<T, K>(a: T, b: K): 0 | -1 | 1;

@@ -60,0 +59,0 @@ }

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

@@ -16,23 +16,18 @@ "author": {

"devDependencies": {
"benchmark": "^1.0.0",
"bson": "^0.2.18",
"gulp": "^3.9.0",
"gulp-coveralls": "^0.1.4",
"gulp-istanbul": "^0.10.0",
"gulp-jscs": "^1.6.0",
"gulp-jshint": "^1.11.2",
"gulp-mocha": "^2.1.2",
"gulp-plumber": "^1.0.1",
"gulp-rename": "^1.2.2",
"gulp-uglify": "^1.2.0",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2015-loose": "^8.0.0",
"bson": "^3.0.2",
"immutable": "^3.7.6",
"nodangel": "^1.3.8",
"mocha": "^5.2.0",
"webpack": "^4.20.2",
"webpack-cli": "^3.1.2",
"yargs": "^3.15.0"
},
"main": "./sift.js",
"main": "./lib/index.js",
"scripts": {
"test": "gulp test-coverage",
"test-coveralls": "gulp test-coveralls",
"tdd": "nodangel --ignore node_modules --watch test --watch sift.js --exec 'npm run test'"
"build": "mkdir -p lib; babel src/index.js > lib/index.js; webpack",
"test": "mocha ./test -R spec --compilers js:babel-core/register"
}
}
## validate objects & filter arrays with mongodb queries
[![Build Status](https://secure.travis-ci.org/crcn/sift.js.png)](https://secure.travis-ci.org/crcn/sift.js) [![Coverage Status](https://coveralls.io/repos/crcn/sift.js/badge.svg)](https://coveralls.io/r/crcn/sift.js) [![Join the chat at https://gitter.im/crcn/sift.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/crcn/sift.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://secure.travis-ci.org/crcn/sift.js.png)](https://secure.travis-ci.org/crcn/sift.js)
<!-- [![Coverage Status](https://coveralls.io/repos/crcn/sift.js/badge.svg)](https://coveralls.io/r/crcn/sift.js) -->
<!-- [![Join the chat at https://gitter.im/crcn/sift.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/crcn/sift.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -->

@@ -24,3 +26,3 @@ **For extended documentation, checkout http://docs.mongodb.org/manual/reference/operator/query/**

var sift = require('sift');
import sift from 'sift';

@@ -209,3 +211,3 @@ //intersecting arrays

Checks if query == value. Note that **$eq can be omitted**. For **$eq**, and **$ne**
Checks if `query === value`. Note that **$eq can be omitted**. For **$eq**, and **$ne**

@@ -226,3 +228,3 @@ ```javascript

Checks if query != value.
Checks if `query !== value`.

@@ -362,3 +364,3 @@ ```javascript

}}
}, bills); // {month:'august', casts:[{id:2, value: 1000},{id: 4, value: 4000}]}
}, bills); // {month:'august', casts:[{id:3, value: 1000},{id: 4, value: 4000}]}
```

@@ -399,24 +401,2 @@

## Custom Expressions
You can add your own expressions. For instance - say you want to do some bitmask filtering, you could add this example:
```javascript
sift.use({
$band: function(a, b) {
return (a & b) ? 0 : -1; // 0 = exists, -1 = doesn't exist
}
});
// ops
var IS_ANIMAL = 2,
IS_PERSON = IS_ANIMAL << 1,
IS_DOG = IS_PERSON << 1,
EATS_CEREAL = IS_DOG << 1,
EATS_BONES = EATS_CEREAL << 1;
sift({ $band: IS_PERSON }, [ IS_PERSON|EATS_CEREAL, IS_DOG|EATS_BONES, IS_PERSON ]);
```
## Get index of first matching element

@@ -427,2 +407,3 @@

```javascript
import {indexOf as siftIndexOf} from 'sift';
var people = [{

@@ -441,3 +422,3 @@ name: 'craig',

var index = sift.indexOf({ address: { city: 'Minneapolis' }}, people); // index = 0
var index = siftIndexOf({ address: { city: 'Minneapolis' }}, people); // index = 0
```

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

(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}})();
!function(n,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.sift=t():n.sift=t()}(window,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 r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:e})},r.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__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);if(r.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var o in n)r.d(e,o,function(t){return n[t]}.bind(null,o));return e},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="",r(r.s=0)}([function(n,t,r){n.exports=r(1)},function(n,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var 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};function o(n){return"function"==typeof n}function u(n){return"[object Array]"===Object.prototype.toString.call(n)}function i(n){return n instanceof Date?n.getTime():u(n)?n.map(i):n&&"function"==typeof n.toJSON?n.toJSON():n}function f(n,t){return o(n.get)?n.get(t):n[t]}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,f(r,e)))return!0;return!1}}function l(n,t,r,e){return n.v(n.a,t,r,e)}t.default=function(n,t,r){o(t)&&(r=t,t=void 0);var e=y(n,r);function u(n,t,r){return l(e,n,t,r)}if(t)return t.filter(u);return u},t.indexOf=function(n,t,r){return d(t,y(n,r))},t.compare=b;var a={$eq:c(function(n,t){return n(t)}),$ne:function(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,f(r,e)))return!1;return!0}}(function(n,t){return!n(t)}),$gt:c(function(n,t){return b(i(t),n)>0}),$gte:c(function(n,t){return b(i(t),n)>=0}),$lt:c(function(n,t){return b(i(t),n)<0}),$lte:c(function(n,t){return b(i(t),n)<=0}),$mod:c(function(n,t){return t%n[0]==n[1]}),$in:function(n,t){if(!(t instanceof Array)){var r=i(t);if(r===t&&"object"===(void 0===t?"undefined":e(t)))for(u=n.length;u--;)if(String(n[u])===String(t)&&"[object Object]"!==String(t))return!0;if(void 0===r)for(u=n.length;u--;)if(null==n[u])return!0;for(u=n.length;u--;){var o=l(y(f(n,u),void 0),t,u,n);if(o&&"[object Object]"!==String(o)&&"[object Object]"!==String(t))return!0}return!!~n.indexOf(r)}for(var u=t.length;u--;)if(~n.indexOf(i(f(t,u))))return!0;return!1},$nin:function(n,t,r,e){return!a.$in(n,t,r,e)},$not:function(n,t,r,e){return!l(n,t,r,e)},$type:function(n,t){return void 0!=t&&(t instanceof n||t.constructor==n)},$all:function(n,t,r,e){return a.$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(l(f(n,o),t,r,e))return!0;return!1},$nor:function(n,t,r,e){return!a.$or(n,t,r,e)},$and:function(n,t,r,e){for(var o=0,u=n.length;o<u;o++)if(!l(f(n,o),t,r,e))return!1;return!0},$regex:c(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)?!!~d(t,n):l(n,t,r,e)},$exists:function(n,t,r,e){return e.hasOwnProperty(r)===n}},p={$eq:function(n){return n instanceof RegExp?function(t){return"string"==typeof t&&n.test(t)}:n instanceof Function?n:u(n)&&!n.length?function(n){return u(n)&&!n.length}:null===n?function(n){return null==n}:function(t){return 0===b(i(t),i(n))}},$ne:function(n){return p.$eq(n)},$and:function(n){return n.map($)},$all:function(n){return p.$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}};function d(n,t){for(var r=0;r<n.length;r++){f(n,r);if(l(t,f(n,r)))return r}return-1}function s(n,t){return{a:n,v:t}}function v(n,t){var r=[];if(function n(t,r,e,o,i){if(e===r.length||void 0==t)return void i.push([t,r[e-1],o]);var c=f(r,e);if(u(t)&&isNaN(Number(c)))for(var l=0,a=t.length;l<a;l++)n(f(t,l),r,e,t,i);else n(f(t,c),r,e+1,t,i)}(t,n.k,0,t,r),1===r.length){var e=r[0];return l(n.nv,e[0],e[1],e[2])}for(var o=n&&n.q&&void 0!==n.q.$ne,i=o,c=0;c<r.length;c++){var a=r[c],p=l(n.nv,a[0],a[1],a[2]);o?i&=p:i|=p}return i}function g(n,t,r){return{a:{k:n,nv:t,q:r},v:v}}function $(n){(n=i(n))&&function(n){return n&&n.constructor===Object}(n)||(n={$eq:n});var t=[];for(var r in n){var e=n[r];if("$options"!==r)if(a[r])p[r]&&(e=p[r](e,n)),t.push(s(i(e),a[r]));else{if(36===r.charCodeAt(0))throw new Error("Unknown operation "+r);t.push(g(r.split("."),$(e),e))}}return 1===t.length?t[0]:s(t,a.$and)}function y(n,t){var r=$(n);return t&&(r={a:r,v:function(n,r,e,o){return l(n,t(r),e,o)}}),r}function b(n,t){if(n===t)return 0;if((void 0===n?"undefined":e(n))===(void 0===t?"undefined":e(t))){if(n>t)return 1;if(n<t)return-1}}}])});

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

var assert = require('assert'),
sift = require('..');
import * as assert from 'assert';
import sift, {indexOf as siftIndexOf} from '..';

@@ -57,3 +57,3 @@ describe(__filename + '#', function() {

it('can get the first index of a matching element', function () {
var index = sift.indexOf({ val: { $gt: 5}}, [{val: 4}, {val: 3}, {val: 6}, {val: 7}]);
var index = siftIndexOf({ val: { $gt: 5}}, [{val: 4}, {val: 3}, {val: 6}, {val: 7}]);

@@ -64,3 +64,3 @@ assert.equal(index, 2);

it('returns -1 as index if no matching element is found', function () {
var index = sift.indexOf({ val: { $gt: 7}}, [{val: 4}, {val: 3}, {val: 6}, {val: 7}]);
var index = siftIndexOf({ val: { $gt: 7}}, [{val: 4}, {val: 3}, {val: 6}, {val: 7}]);

@@ -124,2 +124,44 @@ assert.equal(index, -1);

it('$eq matches objects that serialize to the same value', function() {
var counter = 0;
function Book(name) {
this.name = name;
this.copyNumber = counter;
this.toJSON = function() {
return this.name; // discard the copy when serializing.
};
counter += 1;
}
var warAndPeace = new Book('War and Peace');
var sifter = sift({ $eq: warAndPeace});
var books = [ new Book('War and Peace')];
var filtered = books.filter(sifter);
assert.equal(filtered.length, 1);
});
it('$neq does not match objects that serialize to the same value', function() {
var counter = 0;
function Book(name) {
this.name = name;
this.copyNumber = counter;
this.toJSON = function() {
return this.name; // discard the copy when serializing.
};
counter += 1;
}
var warAndPeace = new Book('War and Peace');
var sifter = sift({ $ne: warAndPeace});
var books = [ new Book('War and Peace')];
var filtered = books.filter(sifter);
assert.equal(filtered.length, 0);
});
// https://gist.github.com/jdnichollsc/00ea8cf1204b17d9fb9a991fbd1dfee6

@@ -126,0 +168,0 @@ it('returns a period between start and end dates', function() {

@@ -1,33 +0,17 @@

var assert = require("assert"),
Immutable = require("immutable"),
sift = require(".."),
ObjectID = require('bson').pure().ObjectID;
import * as assert from 'assert';
import * as Immutable from 'immutable';
describe(__filename + "#", function() {
import sift from '..';
const ObjectID = require('bson').ObjectID;
it("can use custom operators", function() {
describe(__filename + '#', function() {
var i = 0;
sift.use({
$abba: function(a, b) {
i++;
}
});
sift({ a: {$abba:-1}}, Immutable.List([1, 2, 3]));
// expect(i).to.be(3);
assert.equal(i, 3);
});
var topic = Immutable.List([1, 2, 3, 4, 5, 6, 6, 4, 3]);
it("works with Immutable.List", function() {
assert.equal(sift({$notb: 6 }, topic).includes(6), false);
});
var persons = Immutable.fromJS([{ person: {age: 3} }, { person: {age: 5} }, { person: {age: 8} }]);
it("works with Immutable.Map in a Immutable.List", function() {
it('works with Immutable.Map in a Immutable.List', function() {
assert.equal(sift({ 'person.age' : { $gt: 4 } }, persons).size, 2);

@@ -34,0 +18,0 @@ assert.equal(persons.filter(sift({ 'person.age' : { $gt: 4 } })).size, 2);

@@ -1,8 +0,7 @@

var sift = require(".."),
assert = require("assert");
import assert from 'assert';
import sift from '..';
describe(__filename + '#', function () {
describe(__filename + "#", function () {
var topic = [

@@ -61,3 +60,3 @@ {

];
xit("throws error if $not is incorrect", function () {
xit('throws error if $not is incorrect', function () {
assert.throws(function () {

@@ -69,3 +68,3 @@ sift({

});
it("has sifted through photography in brazil count of 1", function () {
it('has sifted through photography in brazil count of 1', function () {
var sifted = sift({

@@ -81,3 +80,3 @@ hobbies: {

});
it("has sifted through photography in brazil, haiti, and costa rica count of 1", function () {
it('has sifted through photography in brazil, haiti, and costa rica count of 1', function () {
var sifted = sift({

@@ -94,3 +93,3 @@ hobbies: {

});
it("has a sifted hobbies of photography, cooking, or biking count of 2", function () {
it('has a sifted hobbies of photography, cooking, or biking count of 2', function () {
var sifted = sift({

@@ -105,3 +104,3 @@ hobbies: {

});
it("has sifted to complex count of 2", function () {
it('has sifted to complex count of 2', function () {
var sifted = sift({

@@ -124,3 +123,3 @@ hobbies: {

});
it("has sifted to complex count of 0", function () {
it('has sifted to complex count of 0', function () {
var sifted = sift({

@@ -136,5 +135,5 @@ hobbies: {

});
it("has sifted subobject hobbies count of 3", function () {
it('has sifted subobject hobbies count of 3', function () {
var sifted = sift({
"hobbies.name": "photography"
'hobbies.name': 'photography'
}, topic);

@@ -145,3 +144,3 @@ assert.equal(sifted.length, 2);

var sifted = sift({
"hobbies.name": {
'hobbies.name': {
$in: ['photography', 'cooking', 'biking']

@@ -152,10 +151,10 @@ }

});
it("has sifted to complex dot-search count of 2", function () {
it('has sifted to complex dot-search count of 2', function () {
var sifted = sift({
"hobbies.name": "photography",
"hobbies.places": {
'hobbies.name': 'photography',
'hobbies.places': {
$in: ['costa rica']
},
"address.state": "MN",
"address.phone": {
'address.state': 'MN',
'address.phone': {
$exists: true

@@ -166,6 +165,6 @@ }

});
it("has sifted with selector function count of 2", function () {
it('has sifted with selector function count of 2', function () {
var sifted = sift({
"name": "photography",
"places": {
'name': 'photography',
'places': {
$in: ['costa rica']

@@ -179,4 +178,4 @@ }

describe("nesting", function () {
it("$eq for nested object", function () {
describe('nesting', function () {
it('$eq for nested object', function () {
var sifted = sift({'sub.num': {'$eq': 10}}, loremArr);

@@ -189,3 +188,3 @@ assert(sifted.length > 0);

it("$ne for nested object", function () {
it('$ne for nested object', function () {
var sifted = sift({'sub.num': {'$ne': 10}}, loremArr);

@@ -198,3 +197,3 @@ assert(sifted.length > 0);

it("$regex for nested object (one missing key)", function () {
it('$regex for nested object (one missing key)', function () {
var persons = [{

@@ -215,3 +214,3 @@ id: 1,

}];
var q = { "name": { "$regex": "n" } };
var q = { 'name': { '$regex': 'n' } };
var sifted = sift(q, persons);

@@ -226,3 +225,3 @@ assert.deepEqual(sifted, [{

describe("arrays of objects", function () {
describe('arrays of objects', function () {
var objects = [

@@ -248,3 +247,3 @@ {

];
it("$eq for array of objects, matches if at least one exists", function () {
it('$eq for array of objects, matches if at least one exists', function () {
let q = {

@@ -261,3 +260,3 @@ 'things.id': 123

})
it("$ne for array of objects, returns if none of the array elements match the query", function () {
it('$ne for array of objects, returns if none of the array elements match the query', function () {
let q = {

@@ -280,13 +279,13 @@ 'things.id': {

describe("$where", function() {
describe('$where', function() {
var couples = [{
name: "SMITH",
name: 'SMITH',
person: [{
firstName: "craig",
gender: "female",
firstName: 'craig',
gender: 'female',
age: 29
}, {
firstName: "tim",
gender: "male",
firstName: 'tim',
gender: 'male',
age: 32

@@ -297,10 +296,10 @@ }

}, {
name: "JOHNSON",
name: 'JOHNSON',
person: [{
firstName: "emily",
gender: "female",
firstName: 'emily',
gender: 'female',
age: 35
}, {
firstName: "jacob",
gender: "male",
firstName: 'jacob',
gender: 'male',
age: 32

@@ -312,7 +311,7 @@ }

it("can filter people", function() {
var results = sift({"person": {$elemMatch: { "gender": "female", "age": {"$lt": 30}}}}, couples);
assert.equal(results[0].name, "SMITH");
it('can filter people', function() {
var results = sift({'person': {$elemMatch: { 'gender': 'female', 'age': {'$lt': 30}}}}, couples);
assert.equal(results[0].name, 'SMITH');
var results = sift({"person": {$elemMatch: { "gender": "male", "age": {"$lt": 30}}}}, [couples[0]]);
var results = sift({'person': {$elemMatch: { 'gender': 'male', 'age': {'$lt': 30}}}}, [couples[0]]);
assert.equal(results.length, 0);

@@ -322,3 +321,3 @@ });

describe("keypath", function () {
describe('keypath', function () {

@@ -335,4 +334,4 @@ var arr = [

]
it("can be used", function () {
assert.equal(sift({"a.b.c":1})(arr[0]), true);
it('can be used', function () {
assert.equal(sift({'a.b.c':1})(arr[0]), true);
});

@@ -345,89 +344,89 @@ });

{
"num": 1,
"pum": 1,
"sub": {
"num": 1,
"pum": 1
'num': 1,
'pum': 1,
'sub': {
'num': 1,
'pum': 1
}
},
{
"num": 2,
"pum": 2,
"sub": {
"num": 2,
"pum": 2
'num': 2,
'pum': 2,
'sub': {
'num': 2,
'pum': 2
}
},
{
"num": 3,
"pum": 3,
"sub": {
"num": 3,
"pum": 3
'num': 3,
'pum': 3,
'sub': {
'num': 3,
'pum': 3
}
},
{
"num": 4,
"pum": 4,
"sub": {
"num": 4,
"pum": 4
'num': 4,
'pum': 4,
'sub': {
'num': 4,
'pum': 4
}
},
{
"num": 5,
"pum": 5,
"sub": {
"num": 5,
"pum": 5
'num': 5,
'pum': 5,
'sub': {
'num': 5,
'pum': 5
}
},
{
"num": 6,
"pum": 6,
"sub": {
"num": 6,
"pum": 6
'num': 6,
'pum': 6,
'sub': {
'num': 6,
'pum': 6
}
},
{
"num": 7,
"pum": 7,
"sub": {
"num": 7,
"pum": 7
'num': 7,
'pum': 7,
'sub': {
'num': 7,
'pum': 7
}
},
{
"num": 8,
"pum": 8,
"sub": {
"num": 8,
"pum": 8
'num': 8,
'pum': 8,
'sub': {
'num': 8,
'pum': 8
}
},
{
"num": 9,
"pum": 9,
"sub": {
"num": 9,
"pum": 9
'num': 9,
'pum': 9,
'sub': {
'num': 9,
'pum': 9
}
},
{
"num": 10,
"pum": 10,
"sub": {
"num": 10,
"pum": 10
'num': 10,
'pum': 10,
'sub': {
'num': 10,
'pum': 10
}
},
{
"num": 11,
"pum": 11,
"sub": {
"num": 10,
"pum": 10
'num': 11,
'pum': 11,
'sub': {
'num': 10,
'pum': 10
}
}
];

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

var assert = require('assert');
var sift = require('../sift');
var ObjectID = require('bson').pure().ObjectID;
import * as assert from 'assert';
import sift from '..';
var ObjectID = require('bson').ObjectID;
describe(__filename + '#', function () {

@@ -62,3 +61,3 @@

[{$exists:true}, [0,false,void 0, 1, {}],[0, false, void 0, 1, {}]],
[{"a.b": {$exists: true}}, [{a: {b: "exists"}}, {a: {c: "does not exist"}}], [{a: {b: "exists"}}]],
[{'a.b': {$exists: true}}, [{a: {b: 'exists'}}, {a: {c: 'does not exist'}}], [{a: {b: 'exists'}}]],
[{field: { $exists: false }}, [{a: 1}, {a: 2, field: 5}, {a: 3, field: 0}, {a: 4, field: undefined}, {a: 5}],[{a: 1}, {a: 5}]],

@@ -80,4 +79,4 @@

[{$nin:[new Date(1)]},[new Date(1), new Date(2)],[new Date(2)]],
[{"root.notDefined": {$nin: [1, 2, 3]}}, [{"root": {"defined": 1337}}], [{"root": {"defined": 1337}}]],
[{"root.notDefined": {$nin: [1, 2, 3, null]}}, [{"root": {"defined": 1337}}], []],
[{'root.notDefined': {$nin: [1, 2, 3]}}, [{'root': {'defined': 1337}}], [{'root': {'defined': 1337}}]],
[{'root.notDefined': {$nin: [1, 2, 3, null]}}, [{'root': {'defined': 1337}}], []],
[{'x': {$nin: [{$regex: '.*aaa.*'}, {$regex: '.*bbb.*'}]}}, [{'x': {'b': 'aaa'}}, {'x': 'bbb'}, {'x': 'ccc'}, {'x': 'aaa'}], [{'x': {'b': 'aaa'}},{'x': 'ccc'}]],

@@ -134,3 +133,3 @@ [{'x': {$nin: [/.*aaa.*/, /.*bbb.*/]}}, [{'x': {'b': 'aaa'}}, {'x': 'bbb'}, {'x': 'ccc'}, {'x': 'aaa'}], [{'x': {'b': 'aaa'}},{'x': 'ccc'}]],

// Multiple conditions on an undefined root
[{"a.b": {$exists: true, $nin: [null]}}, [{a: {b: "exists"}}, {a: {c: "does not exist"}}], [{a: {b: "exists"}}]],
[{'a.b': {$exists: true, $nin: [null]}}, [{a: {b: 'exists'}}, {a: {c: 'does not exist'}}], [{a: {b: 'exists'}}]],

@@ -192,5 +191,5 @@ // $where

[
{ $and: [{ 'a.s': { $lte: new Date("2017-01-29T05:00:00.000Z") }}, {'a.e': { $gte: new Date("2017-01-08T05:00:00.000Z") }}]},
[{ a: { s: new Date("2017-01-13T05:00:00.000Z"), e: new Date("2017-01-31T05:00:00.000Z") }}],
[{ a: { s: new Date("2017-01-13T05:00:00.000Z"), e: new Date("2017-01-31T05:00:00.000Z") }}]
{ $and: [{ 'a.s': { $lte: new Date('2017-01-29T05:00:00.000Z') }}, {'a.e': { $gte: new Date('2017-01-08T05:00:00.000Z') }}]},
[{ a: { s: new Date('2017-01-13T05:00:00.000Z'), e: new Date('2017-01-31T05:00:00.000Z') }}],
[{ a: { s: new Date('2017-01-13T05:00:00.000Z'), e: new Date('2017-01-31T05:00:00.000Z') }}]
],

@@ -197,0 +196,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