Predicate
type Predicate = | { left: PathOrLiteral; op: "eq" | "ne" | "lt" | "lte" | "gt" | "gte"; right: PathOrLiteral;} | { op: "in" | "notIn"; set: (string | number | boolean | null)[]; value: PathOrLiteral;} | { op: "exists" | "notExists"; path: string;} | { op: "truthy" | "falsy"; value: PathOrLiteral;} | { args: Predicate[]; op: "and" | "or";} | { arg: Predicate; op: "not";};