UNPKG

@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
"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 };