@nozbe/watermelondb
Version:
Build powerful React Native and React web apps that scale from hundreds to tens of thousands of records and remain fast
82 lines (80 loc) • 2.27 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.rawFieldEquals = exports.notLike = exports.like = exports.default = void 0;
var _likeToRegexp = _interopRequireDefault(require("../../utils/fp/likeToRegexp"));
/* eslint-disable eqeqeq */
var between = function (left, [lower, upper]) {
return left >= lower && left <= upper;
};
var rawFieldEquals = exports.rawFieldEquals = function (left, right) {
return left == right;
};
var rawFieldNotEquals = function (left, right) {
return !(left == right);
};
var noNullComparisons = function (operator) {
return function (left, right) {
// return false if any operand is null/undefined
if (null == left || null == right) {
return false;
}
return operator(left, right);
};
};
// Same as `a > b`, but `5 > undefined` is also true
var weakGt = function (left, right) {
return left > right || null != left && null == right;
};
var handleLikeValue = function (v, defaultV) {
return 'string' === typeof v ? v : defaultV;
};
var like = exports.like = function (left, right) {
var leftV = handleLikeValue(left, '');
return (0, _likeToRegexp.default)(right).test(leftV);
};
var notLike = exports.notLike = function (left, right) {
// Mimic SQLite behaviour
if (null === left) {
return false;
}
var leftV = handleLikeValue(left, '');
return !(0, _likeToRegexp.default)(right).test(leftV);
};
var oneOf = function (value, values) {
return values.includes(value);
};
var notOneOf = function (value, values) {
return !values.includes(value);
};
var gt = function (a, b) {
return a > b;
};
var gte = function (a, b) {
return a >= b;
};
var lt = function (a, b) {
return a < b;
};
var lte = function (a, b) {
return a <= b;
};
var includes = function (a, b) {
return 'string' === typeof a && a.includes(b);
};
var operators = {
eq: rawFieldEquals,
notEq: rawFieldNotEquals,
gt: noNullComparisons(gt),
gte: noNullComparisons(gte),
weakGt: weakGt,
lt: noNullComparisons(lt),
lte: noNullComparisons(lte),
oneOf: oneOf,
notIn: noNullComparisons(notOneOf),
between: between,
like: like,
notLike: notLike,
includes: includes
};
var _default = exports.default = operators;