@trap_stevo/ucr
Version:
The ultimate event routing solution for dynamic, filter-driven, TTL-enforced communication. Build intelligent, reactive communication layers across clients or processes — with deep filter matching, TTL-based cleanup, customizable operators, and smart broa
108 lines (107 loc) • 3.66 kB
JavaScript
"use strict";
function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _lastField = /*#__PURE__*/new WeakMap();
var _UCRFilterManager_brand = /*#__PURE__*/new WeakSet();
class UCRFilterManager {
constructor() {
_classPrivateMethodInitSpec(this, _UCRFilterManager_brand);
_classPrivateFieldInitSpec(this, _lastField, void 0);
this.stack = [{}];
}
field(name) {
_classPrivateFieldSet(_lastField, this, name);
return this;
}
equals(value) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$eq", value);
}
not(value) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$ne", value);
}
greaterThan(value) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$gt", value);
}
lessThan(value) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$lt", value);
}
gte(value) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$gte", value);
}
lte(value) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$lte", value);
}
in(values) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$in", values);
}
notIn(values) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$nin", values);
}
exists(flag = true) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$exists", flag);
}
test(fn) {
return _assertClassBrand(_UCRFilterManager_brand, this, _op).call(this, "$test", fn);
}
and(field) {
const current = this.toObject();
this.stack = [{
$and: [current, {
[field]: {}
}]
}];
_classPrivateFieldSet(_lastField, this, field);
return this;
}
or(field) {
const current = this.stack.pop();
const rightClause = {
[field]: {}
};
const orClause = {
$or: [current, rightClause]
};
this.stack.push(orClause);
_classPrivateFieldSet(_lastField, this, field);
return this;
}
group(...filters) {
const current = this.stack[this.stack.length - 1];
current.$and = filters.map(f => f.toObject());
return this;
}
toObject() {
return this.stack[0];
}
toPredicate(ucr) {
return ucr.matchFilter(this.toObject());
}
describe(ucr) {
console.log(this.toObject());
return ucr.constructor.describeFilter(this.toObject());
}
}
function _findTargetFieldClause() {
const top = this.stack[0];
if (top.$or || top.$and) {
const arr = top.$or || top.$and;
return arr[arr.length - 1];
}
return top;
}
function _op(operator, value) {
const current = _assertClassBrand(_UCRFilterManager_brand, this, _findTargetFieldClause).call(this);
if (!current[_classPrivateFieldGet(_lastField, this)]) {
current[_classPrivateFieldGet(_lastField, this)] = {};
}
current[_classPrivateFieldGet(_lastField, this)][operator] = value;
return this;
}
;
module.exports = {
UCRFilterManager
};