Comparing version 6.0.0 to 7.0.0
@@ -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 @@ |
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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
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
248802
10
22
1849
418
2
1