UNPKG

@usex/rule-engine

Version:

The ultimate JSON-based rule engine that turns complex business logic into declarative configurations. Built for developers who believe code should be expressive, not repetitive.

17 lines (16 loc) 105 kB
'use strict';var dateFnsJalali=require('date-fns-jalali'),ramda=require('ramda'),jsonpathPlus=require('jsonpath-plus'),crypto=require('crypto'),eventemitter3=require('eventemitter3');// ------------------------------------------------------------- // UseStrict - Rule Engine // A Powerful Rule Engine for Node.js & Browser environments // // License: Proprietary - © UseStrict, All Rights Reserved // // Description: // This library is part of the Ali Torki ecosystem, designed to // handle complex business logic or dynamic decision-making // scenarios. It can be seamlessly integrated into both Node.js // backends and browser applications. // // Author: Ali Torki <ali_4286@live.com> // Docs: https://rule-engine.usestrict.dev // ------------------------------------------------------------- var pa=Object.defineProperty;var i=(t,e)=>pa(t,"name",{value:e,configurable:true});var y=function(t){return t.OR="or",t.AND="and",t.NONE="none",t}({});var n=function(t){return t.Equals="equals",t.NotEquals="not-equals",t.Like="like",t.NotLike="not-like",t.StartsWith="starts-with",t.EndsWith="ends-with",t.ContainsString="contains-string",t.GreaterThan="greater-than",t.LessThan="less-than",t.GreaterThanOrEquals="greater-than-or-equals",t.LessThanOrEquals="less-than-or-equals",t.In="in",t.NotIn="not-in",t.Contains="contains",t.NotContains="not-contains",t.ContainsAny="contains-any",t.SelfContainsAny="self-contains-any",t.NotContainsAny="not-contains-any",t.SelfNotContainsAny="self-not-contains-any",t.SelfContainsNone="self-not-contains-none",t.ContainsAll="contains-all",t.SelfContainsAll="self-contains-all",t.NotContainsAll="not-contains-all",t.SelfNotContainsAll="self-not-contains-all",t.Matches="matches",t.NotMatches="not-matches",t.Exists="exists",t.NotExists="not-exists",t.NullOrUndefined="null-or-undefined",t.NotNullOrUndefined="not-null-or-undefined",t.Empty="empty",t.NotEmpty="not-empty",t.DateAfter="date-after",t.DateAfterNow="date-after-now",t.DateBefore="date-before",t.DateBeforeNow="date-before-now",t.DateAfterOrEquals="date-after-or-equals",t.DateAfterNowOrEquals="date-after-now-or-equals",t.DateBeforeOrEquals="date-before-or-equals",t.DateBeforeNowOrEquals="date-before-now-or-equals",t.DateEquals="date-equals",t.DateEqualsToNow="date-equals-to-now",t.DateNotEquals="date-not-equals",t.DateNotEqualsToNow="date-not-equals-to-now",t.DateBetween="date-between",t.DateNotBetween="date-not-between",t.TimeAfter="time-after",t.TimeBefore="time-before",t.TimeAfterOrEquals="time-after-or-equals",t.TimeBeforeOrEquals="time-before-or-equals",t.TimeEquals="time-equals",t.TimeNotEquals="time-not-equals",t.TimeBetween="time-between",t.TimeNotBetween="time-not-between",t.NullOrWhiteSpace="null-or-white-space",t.NotNullOrWhiteSpace="not-null-or-white-space",t.Numeric="numeric",t.NotNumeric="not-numeric",t.Boolean="boolean",t.NotBoolean="not-boolean",t.Date="date",t.NotDate="not-date",t.Email="email",t.NotEmail="not-email",t.Url="url",t.NotUrl="not-url",t.UUID="uuid",t.NotUUID="not-uuid",t.Alpha="alpha",t.NotAlpha="not-alpha",t.AlphaNumeric="alpha-numeric",t.NotAlphaNumeric="not-alpha-numeric",t.PersianAlpha="persian-alpha",t.NotPersianAlpha="not-persian-alpha",t.PersianAlphaNumeric="persian-alpha-numeric",t.NotPersianAlphaNumeric="not-persian-alpha-numeric",t.LowerCase="lower-case",t.NotLowerCase="not-lower-case",t.UpperCase="upper-case",t.NotUpperCase="not-upper-case",t.String="string",t.NotString="not-string",t.Object="object",t.NotObject="not-object",t.Array="array",t.NotArray="not-array",t.ArrayLength="array-length",t.ArrayMinLength="array-min-length",t.ArrayMaxLength="array-max-length",t.BooleanString="boolean-string",t.NotBooleanString="not-boolean-string",t.BooleanNumber="boolean-number",t.NotBooleanNumber="not-boolean-number",t.BooleanNumberString="boolean-number-string",t.NotBooleanNumberString="not-boolean-number-string",t.Number="number",t.NotNumber="not-number",t.Integer="integer",t.NotInteger="not-integer",t.Float="float",t.NotFloat="not-float",t.Positive="positive",t.NotPositive="not-positive",t.Negative="negative",t.NotNegative="not-negative",t.Zero="zero",t.NotZero="not-zero",t.Min="min",t.NotMin="not-min",t.Max="max",t.NotMax="not-max",t.Between="between",t.NotBetween="not-between",t.NumberBetween="number-between",t.NotNumberBetween="not-number-between",t.StringLength="string-length",t.NotStringLength="not-string-length",t.MinLength="min-length",t.NotMinLength="not-min-length",t.MaxLength="max-length",t.NotMaxLength="not-max-length",t.LengthBetween="length-between",t.NotLengthBetween="not-length-between",t.Falsy="falsy",t.NotFalsy="not-falsy",t.Truthy="truthy",t.NotTruthy="not-truthy",t}({});function ca(t=new Date){return new Date(t.getTime()-t.getTimezoneOffset()*6e4)}i(ca,"getDate");function g(t){return ca(new Date(t?.toISOString()??new Date().toISOString()))}i(g,"dateWithTzOffset");var T=class t extends Error{static{i(this,"RuleError");}constructor(e){super(e.error?.message??""),this.error=e.error||null,this.isValid=e.isValid,this.element=e.error?.element||null;}isValid;type=t.name;element;error;toModel(){return {isValid:this.isValid,error:{message:this.message,element:this.element}}}},Be=class extends Error{static{i(this,"RuleTypeError");}constructor(e){super(e??"The type of rule is not valid for this operation");}type=T.name};function ea(t){let e=/\$[^\s,()]+(?:\[[^[\]]*\]|\([^()]*\))*/g,a=[],r;for(;(r=e.exec(t))!==null;){let s=r[0],o=(s.match(/\(/g)||[]).length,d=(s.match(/\)/g)||[]).length,p=(s.match(/\[/g)||[]).length,c=(s.match(/\]/g)||[]).length;for(;d>o;)s=s.slice(0,s.lastIndexOf(")")),d--;for(;c>p;)s=s.slice(0,s.lastIndexOf("]")),c--;a.push(s);}return a}i(ea,"extractJsonPathExpressions");function fa(t){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()}i(fa,"kindOf");function b(t){return fa(t)==="object"}i(b,"isObject");function C(t){if(!Zt(t))throw new Error("Invalid time format");let e=t.split(":"),[a,r,s=0,o=0]=e.map(Number);return a*36e5+r*6e4+s*1e3+o}i(C,"convertTimeToMs");var ya=/^([01]\d|2[0-3]):([0-5]\d)(?:[:.]([0-5]\d)(\.\d{1,3})?)?$/;function Zt(t){return ya.test(t)}i(Zt,"isValidTime");function ta(t,e){return t===void 0||e===void 0||t===null||e===null||typeof t!=typeof e?false:t instanceof Date&&e instanceof Date?t.getTime()===e.getTime():b(t)&&b(e)||Array.isArray(t)&&Array.isArray(e)?JSON.stringify(t)===JSON.stringify(e):t===e}i(ta,"equalsOperator");function ma(t,e){return t===void 0||e===void 0||t===null||e===null||typeof t!=typeof e?false:t>e}i(ma,"greaterThanOperator");function Ya(t,e){return ta(t,e)||ma(t,e)}i(Ya,"greaterThanOrEqualsOperator");function ha(t,e){return t===void 0||e===void 0||t===null||e===null||typeof t!=typeof e?false:t<e}i(ha,"lessThanOperator");function Ga(t,e){return ta(t,e)||ha(t,e)}i(Ga,"lessThanOrEqualsOperator");function Wa(t,e,a=false){let r=e.replace(/([\\%_[\]^$!@#&?()-='">{}])/g,"$1"),s="^",o=false,d=false;for(let p=0;p<r.length;p++){let c=r[p];switch(c){case "%":s+=".*";break;case "_":s+=".";break;case "*":if(p===0)o=true;else if(p===r.length-1)d=true;else return false;break;case "[":{let m="",f=false;r[p+1]==="^"&&(f=true,p++);for(let N=p+1;N<r.length;N++){if(r[N]==="]"){p=N;break}m+=r[N];}s+=f?`[^${m}]`:`[${m}]`;break}case "^":if(p===0)o=true;else return false;break;case "$":if(p===r.length-1)d=true;else return false;break;case "!":if(p+1<r.length)s+=r[p+1],p++;else return false;break;default:s+=c;}}return d?s+="$":o||(s+="$"),new RegExp(s,a?"i":void 0).test(t)}i(Wa,"likeOperator");function _a(t){return t==null||t.trim()===""}i(_a,"isNullOrWhiteSpaceOperator");function w(t){return !Number.isNaN(Number(t))}i(w,"isNumericOperator");function Ja(t){return typeof t=="boolean"}i(Ja,"isBooleanOperator");function Xa(t){try{return new Date(t).toString()!=="Invalid Date"}catch{return false}}i(Xa,"isDateOperator");function Za(t){return /^[^\s@]+@[^\s@][^\s.@]*\.[^\s@]+$/.test(t)}i(Za,"isEmailOperator");function Ha(t){try{return new URL(t),!0}catch{return false}}i(Ha,"isUrlOperator");function Qa(t){return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(t)}i(Qa,"isUuidOperator");var aa="\u0627\u0628\u067E\u062A\u062B\u062C\u0686\u062D\u062E\u062F\u0630\u0631\u0632\u0698\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\u0641\u0642\u06A9\u06AF\u0644\u0645\u0646\u0648\u0647\u06CC",ga="\u06F0\u06F1\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9",ra="\u064E\u0650\u064F",ia="\u200C\u0622\u0627\u064B",sa="\u0652\u064C\u064D\u064B\u064F\u0650\u064E\u0651\u0654\u0670\u0621\u0643\u200C\u0629\u06C0\u0623\u0625\u064A\u0640\u0626\u0624\u060C",Na=aa+ga+ra+ia,na=aa+ra+ia,xa=Na+sa,Ka=na+sa;function er(t){return /^[a-z]+$/i.test(t)}i(er,"isAlphaOperator");function oa(t){let e=t.replace(/["'-+؟\s.]/g,"");return new RegExp(`^[${na}]+$`).test(e)}i(oa,"isPersianAlphaOperator");function tr(t){return /^[a-z0-9]+$/i.test(t)}i(tr,"isAlphaNumericOperator");function ar(t){let e=t.replace(/["'-+؟\s.]/g,"");return new RegExp(`^[${xa}]+$`).test(e)}i(ar,"isPersianAlphaNumericOperator");function rr(t){return t===t.toLowerCase()}i(rr,"isLowerCaseOperator");function ir(t){return t===t.toUpperCase()}i(ir,"isUpperCaseOperator");function A(t){return typeof t=="string"}i(A,"isStringOperator");function sr(t){return b(t)}i(sr,"isObjectOperator");function nr(t){return Array.isArray(t)}i(nr,"isArrayOperator");function or(t){return t==="true"||t==="false"}i(or,"isBooleanStringOperator");function lr(t){return t===0||t===1}i(lr,"isBooleanNumberOperator");function ur(t){return t==="0"||t==="1"}i(ur,"isBooleanNumberStringOperator");function Ht(t){if(typeof t=="number")return !Number.isNaN(t);if(typeof t=="string"){let e=Number(t);return !Number.isNaN(e)&&t.trim()!==""}return false}i(Ht,"isNumberOperator");function dr(t){return Ht(t)?t===Number.parseInt(t,10):false}i(dr,"isIntegerOperator");function pr(t){if(!w(t))return false;let e=Number.EPSILON;return Number.isFinite(t)&&Math.abs(t-Math.floor(t))>e}i(pr,"isFloatOperator");function cr(t){return w(t)?t>0:false}i(cr,"isPositiveOperator");function fr(t){return w(t)?t<0:false}i(fr,"isNegativeOperator");function yr(t){return w(t)?Number(t)===0:false}i(yr,"isZeroOperator");function mr(t,e){if(!Array.isArray(e)||e.length!==2||!w(t))return false;let[a,r]=e;return t>=Number(a)&&t<=Number(r)}i(mr,"isNumberBetweenOperator");function hr(t,e){return !A(t)||!w(e)?false:t.length===e}i(hr,"isLengthOperator");function gr(t,e){return !A(t)||!w(e)?false:t.length>=e}i(gr,"isMinLengthOperator");function Nr(t,e){return !A(t)||!w(e)?false:t.length<=e}i(Nr,"isMaxLengthOperator");function xr(t,e){if(typeof t!="string"||!Array.isArray(e)||e.length!==2)return false;let[a,r]=e;return t.length>=Number(a)&&t.length<=Number(r)}i(xr,"IsLengthBetweenOperator");function Tr(t,e){return !w(t)||!w(e)?false:t>=e}i(Tr,"isMinOperator");function vr(t,e){return t<=e}i(vr,"isMaxOperator");function br(t,e){if(!Array.isArray(e)||e.length!==2||!w(t))return false;let[a,r]=e;return t>=Number(a)&&t<=Number(r)}i(br,"isBetweenOperator");function la(t){return !t&&t!==0&&t!==false&&t!==""||t===0||t===false||t===""||t===null||t===void 0||Number.isNaN(t)}i(la,"isFalsyOperator");function Vr(t){return !!t}i(Vr,"isTruthyOperator");function Ar(t,e){return Array.isArray(e)?e.includes(t):false}i(Ar,"inOperator");function Cr(t,e){return Array.isArray(t)?t.includes(e):false}i(Cr,"containsOperator");function wr(t,e){return !A(t)||!Array.isArray(e)?false:e.every(a=>t.includes(a))}i(wr,"selfContainsAllOperator");function Or(t,e){return !A(t)||!Array.isArray(e)?false:e.some(a=>t.includes(a))}i(Or,"selfContainsAnyOperator");function Er(t,e){return !A(t)||!Array.isArray(e)?false:e.every(a=>!t.includes(a))}i(Er,"selfContainsNoneOperator");function qr(t,e){return !Array.isArray(t)||!Array.isArray(e)?false:t.some(a=>e.includes(a))}i(qr,"containsAnyOperator");function Fr(t,e){return !Array.isArray(t)||!Array.isArray(e)?false:e.every(a=>t.includes(a))}i(Fr,"containsAllOperator");function Ir(t,e){return !A(t)||!A(e)||e.length===0?false:(e.startsWith("/")&&e.endsWith("/")&&(e=e.slice(1,-1)),new RegExp(e).test(t))}i(Ir,"matchesOperator");function Dr(t,e){return b(e)?t in e:false}i(Dr,"isExistsInObjectOperator");function kr(t){return t==null}i(kr,"isNullOrUndefinedOperator");function Sr(t){return Array.isArray(t)?t.length===0:b(t)?Object.keys(t).length===0:typeof t=="string"?t==="":false}i(Sr,"isEmptyOperator");function Pr(t,e){try{return t!==e&&dateFnsJalali.isAfter(g(new Date(t)),g(new Date(e)))}catch{return false}}i(Pr,"isDateAfterOperator");function Rr(t){try{return dateFnsJalali.isAfter(g(new Date(t)),new Date)}catch{return false}}i(Rr,"isDateAfterNowOperator");function Mr(t,e){try{return t!==e&&dateFnsJalali.isBefore(g(new Date(t)),g(new Date(e)))}catch{return false}}i(Mr,"isDateBeforeOperator");function Br(t){try{return dateFnsJalali.isBefore(g(new Date(t)),new Date)}catch{return false}}i(Br,"isDateBeforeNowOperator");function Lr(t,e){try{return !dateFnsJalali.isBefore(g(new Date(t)),g(new Date(e)))}catch{return false}}i(Lr,"isDateAfterOrEqualsOperator");function Ur(t){try{return !dateFnsJalali.isBefore(g(new Date(t)),new Date)}catch{return false}}i(Ur,"isDateAfterNowOrEqualsOperator");function $r(t,e){try{return !dateFnsJalali.isAfter(g(new Date(t)),g(new Date(e)))}catch{return false}}i($r,"isDateBeforeOrEqualsOperator");function jr(t){try{return !dateFnsJalali.isAfter(g(new Date(t)),new Date)}catch{return false}}i(jr,"isDateBeforeNowOrEqualsOperator");function zr(t,e){try{return g(new Date(t)).getTime()===g(new Date(e)).getTime()}catch{return false}}i(zr,"isDateEqualsOperator");function Yr(t){try{return g(new Date(t)).getTime()===new Date().getTime()}catch{return false}}i(Yr,"isDateEqualsToNowOperator");function Gr(t,e){try{if(!Array.isArray(e)||e.length!==2)return !1;let[a,r]=e;return dateFnsJalali.isAfter(g(new Date(t)),g(new Date(a)))&&dateFnsJalali.isBefore(g(new Date(t)),g(new Date(r)))}catch{return false}}i(Gr,"isDateBetweenOperator");function Ta(t,e){try{return C(t)>C(e)}catch{return false}}i(Ta,"isTimeAfterOperator");function va(t,e){try{return C(t)<C(e)}catch{return false}}i(va,"isTimeBeforeOperator");function Wr(t,e){try{return C(t)>=C(e)}catch{return false}}i(Wr,"isTimeAfterOrEqualsOperator");function _r(t,e){try{return C(t)<=C(e)}catch{return false}}i(_r,"isTimeBeforeOrEqualsOperator");function Jr(t,e){try{return C(t)===C(e)}catch{return false}}i(Jr,"isTimeEqualsOperator");function Xr(t,e){if(!Array.isArray(e)||e.length!==2||!Zt(t))return false;let[a,r]=e;return Ta(t,a)&&va(t,r)}i(Xr,"isTimeBetweenOperator");var u=function(t){return t.COMPARISON="comparison",t.STRING="string",t.NUMERIC="numeric",t.ARRAY="array",t.DATE_TIME="date_time",t.TYPE="type",t.EXISTENCE="existence",t.BOOLEAN="boolean",t.PATTERN="pattern",t.PERSIAN="persian",t}({}),l=class{static{i(this,"BaseOperatorStrategy");}validate(e){let{fieldValue:a,constraintValue:r}=e;return this.metadata.requiresValue&&r===void 0?{isValid:false,error:`Operator "${this.metadata.displayName}" requires a value`}:"isValidFieldType"in this&&typeof this.isValidFieldType=="function"&&!this.isValidFieldType(a)?{isValid:false,error:`Invalid field type for operator "${this.metadata.displayName}". Expected one of: ${this.metadata.acceptedFieldTypes.join(", ")}`}:"isValidConstraintType"in this&&typeof this.isValidConstraintType=="function"&&r!==void 0&&!this.isValidConstraintType(r)?{isValid:false,error:`Invalid value type for operator "${this.metadata.displayName}". Expected: ${this.metadata.expectedValueType}`}:{isValid:true}}formatMessage(e,a){return e.replace("{{field}}",a.fieldPath||"field").replace("{{value}}",JSON.stringify(a.constraintValue)).replace("{{fieldValue}}",JSON.stringify(a.fieldValue))}};var Le=class t{static{i(this,"OperatorRegistry");}static instance;operators=new Map;metadata=new Map;initialized=false;constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}register(e,a=false){let r=this.createInstance(e),{name:s}=r.metadata;if(this.operators.has(s)&&!a)throw new Error(`Operator "${s}" is already registered. Use override=true to replace.`);let o=typeof e=="function"&&e.prototype?()=>new e:e;this.operators.set(s,o),this.metadata.set(s,r.metadata);}registerMany(e,a=false){for(let r of e)this.register(r,a);}unregister(e){let a=this.operators.delete(e);return this.metadata.delete(e),a}get(e){let a=this.operators.get(e);return a?a():null}has(e){return this.operators.has(e)}getOperatorNames(){return Array.from(this.operators.keys())}getAllMetadata(){return Array.from(this.metadata.values())}getByCategory(e){return this.getAllMetadata().filter(a=>a.category===e)}getByFieldType(e){return this.getAllMetadata().filter(a=>a.acceptedFieldTypes.includes(e))}clear(){this.operators.clear(),this.metadata.clear(),this.initialized=false;}isInitialized(){return this.initialized}markInitialized(){this.initialized=true;}getNegatedOperator(e){return {[n.Equals]:n.NotEquals,[n.NotEquals]:n.Equals,[n.Like]:n.NotLike,[n.NotLike]:n.Like,[n.GreaterThan]:n.LessThanOrEquals,[n.LessThan]:n.GreaterThanOrEquals,[n.GreaterThanOrEquals]:n.LessThan,[n.LessThanOrEquals]:n.GreaterThan,[n.In]:n.NotIn,[n.NotIn]:n.In,[n.Contains]:n.NotContains,[n.NotContains]:n.Contains,[n.ContainsAny]:n.NotContainsAny,[n.NotContainsAny]:n.ContainsAny,[n.ContainsAll]:n.NotContainsAll,[n.NotContainsAll]:n.ContainsAll,[n.Matches]:n.NotMatches,[n.NotMatches]:n.Matches,[n.Exists]:n.NotExists,[n.NotExists]:n.Exists,[n.Empty]:n.NotEmpty,[n.NotEmpty]:n.Empty,[n.NullOrUndefined]:n.NotNullOrUndefined,[n.NotNullOrUndefined]:n.NullOrUndefined,[n.DateAfter]:n.DateBeforeOrEquals,[n.DateBefore]:n.DateAfterOrEquals,[n.DateAfterOrEquals]:n.DateBefore,[n.DateBeforeOrEquals]:n.DateAfter,[n.DateEquals]:n.DateNotEquals,[n.DateNotEquals]:n.DateEquals,[n.DateBetween]:n.DateNotBetween,[n.DateNotBetween]:n.DateBetween,[n.Boolean]:n.NotBoolean,[n.NotBoolean]:n.Boolean,[n.String]:n.NotString,[n.NotString]:n.String,[n.Number]:n.NotNumber,[n.NotNumber]:n.Number,[n.Array]:n.NotArray,[n.NotArray]:n.Array,[n.Object]:n.NotObject,[n.NotObject]:n.Object}[e]||null}createInstance(e){return typeof e=="function"&&e.prototype?new e:e()}export(){return {operators:Array.from(this.metadata.entries()).map(([e,a])=>({name:e,metadata:a}))}}import(e){this.clear();for(let{name:a,factory:r}of e.operators){let s=r();this.operators.set(a,r),this.metadata.set(a,s.metadata);}}},h=Le.getInstance();var L=class extends l{static{i(this,"ContainsOperator");}metadata={name:n.Contains,displayName:"Contains",category:u.ARRAY,description:"Checks if the array contains the specified value",acceptedFieldTypes:["array"],expectedValueType:"any",requiresValue:true,isNegatable:true,example:'{ field: "tags", operator: "contains", value: "featured" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return Array.isArray(a)?a.includes(r):false}isValidFieldType(e){return Array.isArray(e)}},Ue=class extends l{static{i(this,"NotContainsOperator");}metadata={name:n.NotContains,displayName:"Not Contains",category:u.ARRAY,description:"Checks if the array does not contain the specified value",acceptedFieldTypes:["array"],expectedValueType:"any",requiresValue:true,isNegatable:true,example:'{ field: "tags", operator: "not-contains", value: "draft" }'};containsOperator=new L;evaluate(e){return !this.containsOperator.evaluate(e)}isValidFieldType(e){return Array.isArray(e)}},U=class extends l{static{i(this,"ContainsAnyOperator");}metadata={name:n.ContainsAny,displayName:"Contains Any",category:u.ARRAY,description:"Checks if the array contains any of the specified values",acceptedFieldTypes:["array"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "roles", operator: "contains-any", value: ["admin", "moderator"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return !Array.isArray(a)||!Array.isArray(r)?false:a.some(s=>r.includes(s))}isValidFieldType(e){return Array.isArray(e)}isValidConstraintType(e){return Array.isArray(e)}},$e=class extends l{static{i(this,"NotContainsAnyOperator");}metadata={name:n.NotContainsAny,displayName:"Not Contains Any",category:u.ARRAY,description:"Checks if the array does not contain any of the specified values",acceptedFieldTypes:["array"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "roles", operator: "not-contains-any", value: ["banned", "suspended"] }'};containsAnyOperator=new U;evaluate(e){return !this.containsAnyOperator.evaluate(e)}isValidFieldType(e){return Array.isArray(e)}isValidConstraintType(e){return Array.isArray(e)}},$=class extends l{static{i(this,"ContainsAllOperator");}metadata={name:n.ContainsAll,displayName:"Contains All",category:u.ARRAY,description:"Checks if the array contains all of the specified values",acceptedFieldTypes:["array"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "permissions", operator: "contains-all", value: ["read", "write"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return !Array.isArray(a)||!Array.isArray(r)?false:r.every(s=>a.includes(s))}isValidFieldType(e){return Array.isArray(e)}isValidConstraintType(e){return Array.isArray(e)}},je=class extends l{static{i(this,"NotContainsAllOperator");}metadata={name:n.NotContainsAll,displayName:"Not Contains All",category:u.ARRAY,description:"Checks if the array does not contain all of the specified values",acceptedFieldTypes:["array"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "features", operator: "not-contains-all", value: ["premium", "enterprise"] }'};containsAllOperator=new $;evaluate(e){return !this.containsAllOperator.evaluate(e)}isValidFieldType(e){return Array.isArray(e)}isValidConstraintType(e){return Array.isArray(e)}};var j=class extends l{static{i(this,"SelfContainsAnyOperator");}metadata={name:n.SelfContainsAny,displayName:"Self Contains Any",category:u.STRING,description:"Checks if the string field contains any of the values in the constraint array",acceptedFieldTypes:["string"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "password", operator: "self-contains-any", value: ["admin", "user"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return typeof a!="string"||!Array.isArray(r)?false:r.some(s=>a.includes(String(s)))}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return Array.isArray(e)}},z=class extends l{static{i(this,"SelfNotContainsAnyOperator");}metadata={name:n.SelfNotContainsAny,displayName:"Self Not Contains Any",category:u.STRING,description:"Checks if the string field does not contain any of the values in the constraint array",acceptedFieldTypes:["string"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "password", operator: "self-not-contains-any", value: ["admin", "test"] }'};selfContainsAnyOperator=new j;evaluate(e){return !this.selfContainsAnyOperator.evaluate(e)}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return Array.isArray(e)}},Y=class extends l{static{i(this,"SelfContainsAllOperator");}metadata={name:n.SelfContainsAll,displayName:"Self Contains All",category:u.STRING,description:"Checks if the string field contains all of the values in the constraint array",acceptedFieldTypes:["string"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "password", operator: "self-contains-all", value: ["pass", "word"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return typeof a!="string"||!Array.isArray(r)?false:r.every(s=>a.includes(String(s)))}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return Array.isArray(e)}},ze=class extends l{static{i(this,"SelfNotContainsAllOperator");}metadata={name:n.SelfNotContainsAll,displayName:"Self Not Contains All",category:u.STRING,description:"Checks if the string field does not contain all of the values in the constraint array",acceptedFieldTypes:["string"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "password", operator: "self-not-contains-all", value: ["admin", "123"] }'};selfContainsAllOperator=new Y;evaluate(e){return !this.selfContainsAllOperator.evaluate(e)}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return Array.isArray(e)}},Ye=class extends l{static{i(this,"SelfContainsNoneOperator");}metadata={name:n.SelfContainsNone,displayName:"Self Contains None",category:u.STRING,description:"Checks if the string field contains none of the values in the constraint array",acceptedFieldTypes:["string"],expectedValueType:"array",requiresValue:true,isNegatable:false,example:'{ field: "password", operator: "self-not-contains-none", value: ["admin", "test"] }'};selfNotContainsAnyOperator=new z;evaluate(e){return this.selfNotContainsAnyOperator.evaluate(e)}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return Array.isArray(e)}};var Ge=class extends l{static{i(this,"BooleanOperator");}metadata={name:n.Boolean,displayName:"Is Boolean",category:u.TYPE,description:"Checks if the field value is a boolean",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "isActive", operator: "boolean" }'};evaluate(e){let{fieldValue:a}=e;return typeof a=="boolean"}},We=class extends l{static{i(this,"NotBooleanOperator");}metadata={name:n.NotBoolean,displayName:"Is Not Boolean",category:u.TYPE,description:"Checks if the field value is not a boolean",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "status", operator: "not-boolean" }'};evaluate(e){let{fieldValue:a}=e;return typeof a!="boolean"}},G=class extends l{static{i(this,"BooleanStringOperator");}metadata={name:n.BooleanString,displayName:"Is Boolean String",category:u.TYPE,description:"Checks if the field value is a boolean string (true/false)",acceptedFieldTypes:["string"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "enabled", operator: "boolean-string" }'};evaluate(e){let{fieldValue:a}=e;return typeof a=="string"&&(a==="true"||a==="false")}isValidFieldType(e){return typeof e=="string"}},_e=class extends l{static{i(this,"NotBooleanStringOperator");}metadata={name:n.NotBooleanString,displayName:"Is Not Boolean String",category:u.TYPE,description:"Checks if the field value is not a boolean string",acceptedFieldTypes:["string"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "value", operator: "not-boolean-string" }'};booleanStringOperator=new G;evaluate(e){return !this.booleanStringOperator.evaluate(e)}isValidFieldType(e){return typeof e=="string"}},W=class extends l{static{i(this,"BooleanNumberOperator");}metadata={name:n.BooleanNumber,displayName:"Is Boolean Number",category:u.TYPE,description:"Checks if the field value is a boolean number (0 or 1)",acceptedFieldTypes:["number"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "flag", operator: "boolean-number" }'};evaluate(e){let{fieldValue:a}=e;return typeof a=="number"&&(a===0||a===1)}isValidFieldType(e){return typeof e=="number"}},Je=class extends l{static{i(this,"NotBooleanNumberOperator");}metadata={name:n.NotBooleanNumber,displayName:"Is Not Boolean Number",category:u.TYPE,description:"Checks if the field value is not a boolean number",acceptedFieldTypes:["number"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "count", operator: "not-boolean-number" }'};booleanNumberOperator=new W;evaluate(e){return !this.booleanNumberOperator.evaluate(e)}isValidFieldType(e){return typeof e=="number"}},_=class extends l{static{i(this,"BooleanNumberStringOperator");}metadata={name:n.BooleanNumberString,displayName:"Is Boolean Number String",category:u.TYPE,description:"Checks if the field value is a boolean number string (0 or 1)",acceptedFieldTypes:["string"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "active", operator: "boolean-number-string" }'};evaluate(e){let{fieldValue:a}=e;return typeof a=="string"&&(a==="0"||a==="1")}isValidFieldType(e){return typeof e=="string"}},Xe=class extends l{static{i(this,"NotBooleanNumberStringOperator");}metadata={name:n.NotBooleanNumberString,displayName:"Is Not Boolean Number String",category:u.TYPE,description:"Checks if the field value is not a boolean number string",acceptedFieldTypes:["string"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "value", operator: "not-boolean-number-string" }'};booleanNumberStringOperator=new _;evaluate(e){return !this.booleanNumberStringOperator.evaluate(e)}isValidFieldType(e){return typeof e=="string"}},J=class extends l{static{i(this,"TruthyOperator");}metadata={name:n.Truthy,displayName:"Is Truthy",category:u.BOOLEAN,description:"Checks if the field value is truthy",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "hasPermission", operator: "truthy" }'};evaluate(e){let{fieldValue:a}=e;return !!a}},Ze=class extends l{static{i(this,"NotTruthyOperator");}metadata={name:n.NotTruthy,displayName:"Is Not Truthy",category:u.BOOLEAN,description:"Checks if the field value is not truthy",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "disabled", operator: "not-truthy" }'};truthyOperator=new J;evaluate(e){return !this.truthyOperator.evaluate(e)}},X=class extends l{static{i(this,"FalsyOperator");}metadata={name:n.Falsy,displayName:"Is Falsy",category:u.BOOLEAN,description:"Checks if the field value is falsy",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "isDisabled", operator: "falsy" }'};evaluate(e){let{fieldValue:a}=e;return la(a)}},He=class extends l{static{i(this,"NotFalsyOperator");}metadata={name:n.NotFalsy,displayName:"Is Not Falsy",category:u.BOOLEAN,description:"Checks if the field value is not falsy",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "isEnabled", operator: "not-falsy" }'};falsyOperator=new X;evaluate(e){return !this.falsyOperator.evaluate(e)}};var q=class extends l{static{i(this,"EqualsOperator");}metadata={name:n.Equals,displayName:"Equals",category:u.COMPARISON,description:"Checks if the field value equals the constraint value",acceptedFieldTypes:["any"],expectedValueType:"any",requiresValue:true,isNegatable:true,example:'{ field: "age", operator: "equals", value: 25 }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return a===void 0||r===void 0?false:a===null||r===null?a===r:typeof a!=typeof r?false:a instanceof Date&&r instanceof Date?a.getTime()===r.getTime():b(a)&&b(r)||Array.isArray(a)&&Array.isArray(r)?JSON.stringify(a)===JSON.stringify(r):a===r}},Z=class extends l{static{i(this,"NotEqualsOperator");}metadata={name:n.NotEquals,displayName:"Not Equals",category:u.COMPARISON,description:"Checks if the field value does not equal the constraint value",acceptedFieldTypes:["any"],expectedValueType:"any",requiresValue:true,isNegatable:true,example:'{ field: "status", operator: "not-equals", value: "inactive" }'};equalsOperator=new q;evaluate(e){return !this.equalsOperator.evaluate(e)}},F=class extends l{static{i(this,"GreaterThanOperator");}metadata={name:n.GreaterThan,displayName:"Greater Than",category:u.COMPARISON,description:"Checks if the field value is greater than the constraint value",acceptedFieldTypes:["number","string","date"],expectedValueType:"number",requiresValue:true,isNegatable:true,example:'{ field: "age", operator: "greater-than", value: 18 }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return a===void 0||r===void 0||a===null||r===null||typeof a!=typeof r?false:a>r}isValidFieldType(e){return typeof e=="number"||typeof e=="string"||e instanceof Date}isValidConstraintType(e){return this.isValidFieldType(e)}},H=class extends l{static{i(this,"GreaterThanOrEqualsOperator");}metadata={name:n.GreaterThanOrEquals,displayName:"Greater Than or Equals",category:u.COMPARISON,description:"Checks if the field value is greater than or equal to the constraint value",acceptedFieldTypes:["number","string","date"],expectedValueType:"number",requiresValue:true,isNegatable:true,example:'{ field: "score", operator: "greater-than-or-equals", value: 60 }'};equalsOperator=new q;greaterThanOperator=new F;evaluate(e){return this.equalsOperator.evaluate(e)||this.greaterThanOperator.evaluate(e)}isValidFieldType(e){return this.greaterThanOperator.isValidFieldType(e)}isValidConstraintType(e){return this.greaterThanOperator.isValidConstraintType(e)}},I=class extends l{static{i(this,"LessThanOperator");}metadata={name:n.LessThan,displayName:"Less Than",category:u.COMPARISON,description:"Checks if the field value is less than the constraint value",acceptedFieldTypes:["number","string","date"],expectedValueType:"number",requiresValue:true,isNegatable:true,example:'{ field: "price", operator: "less-than", value: 100 }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return a===void 0||r===void 0||a===null||r===null||typeof a!=typeof r?false:a<r}isValidFieldType(e){return typeof e=="number"||typeof e=="string"||e instanceof Date}isValidConstraintType(e){return this.isValidFieldType(e)}},Q=class extends l{static{i(this,"LessThanOrEqualsOperator");}metadata={name:n.LessThanOrEquals,displayName:"Less Than or Equals",category:u.COMPARISON,description:"Checks if the field value is less than or equal to the constraint value",acceptedFieldTypes:["number","string","date"],expectedValueType:"number",requiresValue:true,isNegatable:true,example:'{ field: "quantity", operator: "less-than-or-equals", value: 10 }'};equalsOperator=new q;lessThanOperator=new I;evaluate(e){return this.equalsOperator.evaluate(e)||this.lessThanOperator.evaluate(e)}isValidFieldType(e){return this.lessThanOperator.isValidFieldType(e)}isValidConstraintType(e){return this.lessThanOperator.isValidConstraintType(e)}},D=class extends l{static{i(this,"InOperator");}metadata={name:n.In,displayName:"In",category:u.COMPARISON,description:"Checks if the field value is in the provided array",acceptedFieldTypes:["any"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "status", operator: "in", value: ["active", "pending"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;return Array.isArray(r)?r.includes(a):false}isValidConstraintType(e){return Array.isArray(e)}},K=class extends l{static{i(this,"NotInOperator");}metadata={name:n.NotIn,displayName:"Not In",category:u.COMPARISON,description:"Checks if the field value is not in the provided array",acceptedFieldTypes:["any"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "role", operator: "not-in", value: ["admin", "moderator"] }'};inOperator=new D;evaluate(e){return !this.inOperator.evaluate(e)}isValidConstraintType(e){return Array.isArray(e)}},k=class extends l{static{i(this,"BetweenOperator");}metadata={name:n.Between,displayName:"Between",category:u.COMPARISON,description:"Checks if the field value is between two values (inclusive)",acceptedFieldTypes:["number"],expectedValueType:"range",requiresValue:true,isNegatable:true,example:'{ field: "age", operator: "between", value: [18, 65] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(!Array.isArray(r)||r.length!==2||typeof a!="number")return false;let[s,o]=r;return a>=Number(s)&&a<=Number(o)}isValidFieldType(e){return typeof e=="number"}isValidConstraintType(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="number"&&typeof e[1]=="number"}validate(e){let a=super.validate(e);if(!a.isValid)return a;if(Array.isArray(e.constraintValue)&&e.constraintValue.length===2){let[r,s]=e.constraintValue;if(r>s)return {isValid:false,error:"Minimum value cannot be greater than maximum value"}}return a}},ee=class extends l{static{i(this,"NotBetweenOperator");}metadata={name:n.NotBetween,displayName:"Not Between",category:u.COMPARISON,description:"Checks if the field value is not between two values",acceptedFieldTypes:["number"],expectedValueType:"range",requiresValue:true,isNegatable:true,example:'{ field: "temperature", operator: "not-between", value: [0, 100] }'};betweenOperator=new k;evaluate(e){return !this.betweenOperator.evaluate(e)}isValidFieldType(e){return this.betweenOperator.isValidFieldType(e)}isValidConstraintType(e){return this.betweenOperator.isValidConstraintType(e)}validate(e){return this.betweenOperator.validate(e)}};function x(t){if(t instanceof Date)return t;if(typeof t=="string"||typeof t=="number"){let e=new Date(t);return Number.isNaN(e.getTime())?null:e}return null}i(x,"parseDate");function v(t){let e=t.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/);if(!e)return null;let a=Number.parseInt(e[1],10),r=Number.parseInt(e[2],10),s=e[3]?Number.parseInt(e[3],10):0;return a<0||a>23||r<0||r>59||s<0||s>59?null:a*3600+r*60+s}i(v,"parseTime");var Qe=class extends l{static{i(this,"DateAfterOperator");}metadata={name:n.DateAfter,displayName:"Date After",category:u.DATE_TIME,description:"Checks if the field date is after the provided date",acceptedFieldTypes:["date","string","number"],expectedValueType:"date",requiresValue:true,isNegatable:true,example:'{ field: "createdAt", operator: "date-after", value: "2024-01-01" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e,s=x(a),o=x(r);return !s||!o?false:s>o}},Ke=class extends l{static{i(this,"DateAfterNowOperator");}metadata={name:n.DateAfterNow,displayName:"Date After Now",category:u.DATE_TIME,description:"Checks if the field date is after the current date",acceptedFieldTypes:["date","string","number"],expectedValueType:"void",requiresValue:false,isNegatable:true,example:'{ field: "expiresAt", operator: "date-after-now" }'};evaluate(e){let{fieldValue:a}=e,r=x(a);return r?r>new Date:false}},et=class extends l{static{i(this,"DateBeforeOperator");}metadata={name:n.DateBefore,displayName:"Date Before",category:u.DATE_TIME,description:"Checks if the field date is before the provided date",acceptedFieldTypes:["date","string","number"],expectedValueType:"date",requiresValue:true,isNegatable:true,example:'{ field: "birthday", operator: "date-before", value: "2000-01-01" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e,s=x(a),o=x(r);return !s||!o?false:s<o}},tt=class extends l{static{i(this,"DateBeforeNowOperator");}metadata={name:n.DateBeforeNow,displayName:"Date Before Now",category:u.DATE_TIME,description:"Checks if the field date is before the current date",acceptedFieldTypes:["date","string","number"],expectedValueType:"void",requiresValue:false,isNegatable:true,example:'{ field: "startedAt", operator: "date-before-now" }'};evaluate(e){let{fieldValue:a}=e,r=x(a);return r?r<new Date:false}},te=class extends l{static{i(this,"DateEqualsOperator");}metadata={name:n.DateEquals,displayName:"Date Equals",category:u.DATE_TIME,description:"Checks if the field date equals the provided date",acceptedFieldTypes:["date","string","number"],expectedValueType:"date",requiresValue:true,isNegatable:true,example:'{ field: "appointmentDate", operator: "date-equals", value: "2024-01-15" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e,s=x(a),o=x(r);return !s||!o?false:s.getTime()===o.getTime()}},ae=class extends l{static{i(this,"DateEqualsToNowOperator");}metadata={name:n.DateEqualsToNow,displayName:"Date Equals Now",category:u.DATE_TIME,description:"Checks if the field date equals the current date",acceptedFieldTypes:["date","string","number"],expectedValueType:"void",requiresValue:false,isNegatable:true,example:'{ field: "todayDate", operator: "date-equals-to-now" }'};evaluate(e){let{fieldValue:a}=e,r=x(a);if(!r)return false;let s=new Date;return r.toDateString()===s.toDateString()}},at=class extends l{static{i(this,"DateNotEqualsOperator");}metadata={name:n.DateNotEquals,displayName:"Date Not Equals",category:u.DATE_TIME,description:"Checks if the field date does not equal the provided date",acceptedFieldTypes:["date","string","number"],expectedValueType:"date",requiresValue:true,isNegatable:true,example:'{ field: "lastLogin", operator: "date-not-equals", value: "2024-01-01" }'};equalsOperator=new te;evaluate(e){return !this.equalsOperator.evaluate(e)}},rt=class extends l{static{i(this,"DateAfterOrEqualsOperator");}metadata={name:n.DateAfterOrEquals,displayName:"Date After Or Equals",category:u.DATE_TIME,description:"Checks if the field date is after or equals the provided date",acceptedFieldTypes:["date","string","number"],expectedValueType:"date",requiresValue:true,isNegatable:true,example:'{ field: "startDate", operator: "date-after-or-equals", value: "2024-01-01" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e,s=x(a),o=x(r);return !s||!o?false:s>=o}},it=class extends l{static{i(this,"DateBeforeOrEqualsOperator");}metadata={name:n.DateBeforeOrEquals,displayName:"Date Before Or Equals",category:u.DATE_TIME,description:"Checks if the field date is before or equals the provided date",acceptedFieldTypes:["date","string","number"],expectedValueType:"date",requiresValue:true,isNegatable:true,example:'{ field: "endDate", operator: "date-before-or-equals", value: "2024-12-31" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e,s=x(a),o=x(r);return !s||!o?false:s<=o}},re=class extends l{static{i(this,"DateBetweenOperator");}metadata={name:n.DateBetween,displayName:"Date Between",category:u.DATE_TIME,description:"Checks if the field date is between two dates",acceptedFieldTypes:["date","string","number"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "eventDate", operator: "date-between", value: ["2024-01-01", "2024-12-31"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(!Array.isArray(r)||r.length!==2)return false;let s=x(a),o=x(r[0]),d=x(r[1]);return !s||!o||!d?false:s>=o&&s<=d}isValidConstraintType(e){return Array.isArray(e)&&e.length===2}},st=class extends l{static{i(this,"DateNotBetweenOperator");}metadata={name:n.DateNotBetween,displayName:"Date Not Between",category:u.DATE_TIME,description:"Checks if the field date is not between two dates",acceptedFieldTypes:["date","string","number"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "holiday", operator: "date-not-between", value: ["2024-06-01", "2024-08-31"] }'};betweenOperator=new re;evaluate(e){return !this.betweenOperator.evaluate(e)}isValidConstraintType(e){return Array.isArray(e)&&e.length===2}},nt=class extends l{static{i(this,"TimeAfterOperator");}metadata={name:n.TimeAfter,displayName:"Time After",category:u.DATE_TIME,description:"Checks if the field time is after the provided time",acceptedFieldTypes:["string"],expectedValueType:"string",requiresValue:true,isNegatable:true,example:'{ field: "openingTime", operator: "time-after", value: "09:00:00" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||typeof r!="string")return false;let s=v(a),o=v(r);return s===null||o===null?false:s>o}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return typeof e=="string"}},ot=class extends l{static{i(this,"TimeBeforeOperator");}metadata={name:n.TimeBefore,displayName:"Time Before",category:u.DATE_TIME,description:"Checks if the field time is before the provided time",acceptedFieldTypes:["string"],expectedValueType:"string",requiresValue:true,isNegatable:true,example:'{ field: "closingTime", operator: "time-before", value: "18:00:00" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||typeof r!="string")return false;let s=v(a),o=v(r);return s===null||o===null?false:s<o}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return typeof e=="string"}},lt=class extends l{static{i(this,"TimeEqualsOperator");}metadata={name:n.TimeEquals,displayName:"Time Equals",category:u.DATE_TIME,description:"Checks if the field time equals the provided time",acceptedFieldTypes:["string"],expectedValueType:"string",requiresValue:true,isNegatable:true,example:'{ field: "meetingTime", operator: "time-equals", value: "14:30:00" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||typeof r!="string")return false;let s=v(a),o=v(r);return s===null||o===null?false:s===o}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return typeof e=="string"}},ut=class extends l{static{i(this,"TimeBetweenOperator");}metadata={name:n.TimeBetween,displayName:"Time Between",category:u.DATE_TIME,description:"Checks if the field time is between two times",acceptedFieldTypes:["string"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "workHours", operator: "time-between", value: ["09:00:00", "17:00:00"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||!Array.isArray(r)||r.length!==2)return false;let s=v(a),o=v(r[0]),d=v(r[1]);return s===null||o===null||d===null?false:s>=o&&s<=d}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&typeof e[1]=="string"}},ie=class extends l{static{i(this,"DateOperator");}metadata={name:n.Date,displayName:"Is Date",category:u.TYPE,description:"Checks if the field value is a valid date",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "birthday", operator: "date" }'};evaluate(e){let{fieldValue:a}=e;return x(a)!==null}},dt=class extends l{static{i(this,"NotDateOperator");}metadata={name:n.NotDate,displayName:"Is Not Date",category:u.TYPE,description:"Checks if the field value is not a valid date",acceptedFieldTypes:["any"],expectedValueType:"void",requiresValue:false,isNegatable:false,example:'{ field: "customField", operator: "not-date" }'};dateOperator=new ie;evaluate(e){return !this.dateOperator.evaluate(e)}},pt=class extends l{static{i(this,"TimeAfterOrEqualsOperator");}metadata={name:n.TimeAfterOrEquals,displayName:"Time After Or Equals",category:u.DATE_TIME,description:"Checks if the field time is after or equal to the provided time",acceptedFieldTypes:["string"],expectedValueType:"string",requiresValue:true,isNegatable:true,example:'{ field: "startTime", operator: "time-after-or-equals", value: "09:00:00" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||typeof r!="string")return false;let s=v(a),o=v(r);return s===null||o===null?false:s>=o}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return typeof e=="string"}},ct=class extends l{static{i(this,"TimeBeforeOrEqualsOperator");}metadata={name:n.TimeBeforeOrEquals,displayName:"Time Before Or Equals",category:u.DATE_TIME,description:"Checks if the field time is before or equal to the provided time",acceptedFieldTypes:["string"],expectedValueType:"string",requiresValue:true,isNegatable:true,example:'{ field: "endTime", operator: "time-before-or-equals", value: "17:00:00" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||typeof r!="string")return false;let s=v(a),o=v(r);return s===null||o===null?false:s<=o}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return typeof e=="string"}},ft=class extends l{static{i(this,"TimeNotEqualsOperator");}metadata={name:n.TimeNotEquals,displayName:"Time Not Equals",category:u.DATE_TIME,description:"Checks if the field time does not equal the provided time",acceptedFieldTypes:["string"],expectedValueType:"string",requiresValue:true,isNegatable:true,example:'{ field: "breakTime", operator: "time-not-equals", value: "12:00:00" }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||typeof r!="string")return false;let s=v(a),o=v(r);return s===null||o===null?false:s!==o}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return typeof e=="string"}},yt=class extends l{static{i(this,"TimeNotBetweenOperator");}metadata={name:n.TimeNotBetween,displayName:"Time Not Between",category:u.DATE_TIME,description:"Checks if the field time is not between two times",acceptedFieldTypes:["string"],expectedValueType:"array",requiresValue:true,isNegatable:true,example:'{ field: "breakTime", operator: "time-not-between", value: ["09:00:00", "17:00:00"] }'};evaluate(e){let{fieldValue:a,constraintValue:r}=e;if(typeof a!="string"||!Array.isArray(r)||r.length!==2)return false;let s=v(a),o=v(r[0]),d=v(r[1]);return s===null||o===null||d===null?false:s<o||s>d}isValidFieldType(e){return typeof e=="string"}isValidConstraintType(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="string"&&typeof e[1]=="string"}},mt=class extends l{static{i(this,"DateNotEqualsToNowOperator");}metadata={name:n.DateNotEqualsToNow,displayName:"Date Not Equals Now",category:u.DATE_TIME,description:"Checks if the field date does not equal the current date",acceptedFieldTypes:["date","string","number"],expectedValueType:"void",requiresValue:false,isNegatable:true,example:'{ field: "eventDate", operator: "date-not-equals-to-now" }'};equalsToNowOperator=new ae;evaluate(e){return !this.equalsToNowOperator.evaluate(e)}},ht=class extends l{static{i(this,"DateAfterNowOrEqualsOperator");}metadata={name:n.DateAfterNowOrEquals,displayName:"Date After Now Or Equals",category:u.DATE_TIME,description:"Checks if the field date is after or equal to the current date",acceptedFieldTypes:["date","string","number"],expectedValueType:"void",requiresValue:false,isNegatable:true,example:'{ field: "validUntil", operator: "date-after-now-or-equals" }'};evaluate(e){let{fieldValue:a}=e,r=x(a);return r?r>=new Date:false}},gt=class extends l{static{i(this,"DateBeforeNowOrEqualsOperator");}metadata={name:n.DateBeforeNowOrEquals,displayName:"Date Before Now Or Equals",category:u.DATE_TIME,description:"Checks if the field date is before or equal to the current date",acceptedFieldTypes:["date","string","number"],expectedValueType:"void",requiresValue:false,isNegatable:true,example:'{ fiel