src/expressions.js
'use strict'
// var moment = require('moment')
module.exports = {
// Getters
$field: $field,
// Booleans
$and: $and,
$or: $or,
$not: $not,
// Expressions
$eq: $eq,
$gt: $gt,
$gte: $gte,
$lt: $lt,
$lte: $lte,
$ne: $ne,
$type: $type,
// Array Expressions
$in: $in,
$nin: $nin,
$contains: $contains,
$excludes: $excludes,
$size: $size,
}
// Getters
function $field(d, child) {
return d[child]
}
// Operators
function $and(d, child) {
child = child(d)
for (var i = 0; i < child.length; i++) {
if (!child[i]) {
return false
}
}
return true
}
function $or(d, child) {
child = child(d)
for (var i = 0; i < child.length; i++) {
if (child[i]) {
return true
}
}
return false
}
function $not(d, child) {
child = child(d)
for (var i = 0; i < child.length; i++) {
if (child[i]) {
return false
}
}
return true
}
// Expressions
function $eq(d, child) {
return d === child()
}
function $gt(d, child) {
return d > child()
}
function $gte(d, child) {
return d >= child()
}
function $lt(d, child) {
return d < child()
}
function $lte(d, child) {
return d <= child()
}
function $ne(d, child) {
return d !== child()
}
function $type(d, child) {
return typeof d === child()
}
// Array Expressions
function $in(d, child) {
return d.indexOf(child()) > -1
}
function $nin(d, child) {
return d.indexOf(child()) === -1
}
function $contains(d, child) {
return child().indexOf(d) > -1
}
function $excludes(d, child) {
return child().indexOf(d) === -1
}
function $size(d, child) {
return d.length === child()
}