@beabee/beabee-common 1.4.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.convertFiltersToRules = exports.convertRulesToFilters = exports.operationParams = exports.nullableOperators = exports.operators = void 0;
17
+ exports.convertFiltersToRules = exports.convertRulesToFilters = exports.validateRuleGroup = exports.validateRule = exports.isRuleGroup = exports.operatorsByType = exports.nullableOperators = exports.operators = void 0;
18
18
  exports.operators = [
19
19
  "equal",
20
20
  "not_equal",
@@ -52,7 +52,7 @@ exports.nullableOperators = {
52
52
  is_empty: { args: 0 },
53
53
  is_not_empty: { args: 0 },
54
54
  };
55
- exports.operationParams = {
55
+ exports.operatorsByType = {
56
56
  text: {
57
57
  ...equalityOperators,
58
58
  ...arrayOperators,
@@ -68,6 +68,38 @@ exports.operationParams = {
68
68
  enum: equalityOperators,
69
69
  contact: equalityOperators,
70
70
  };
71
+ function isRuleGroup(ruleOrGroup) {
72
+ return "condition" in ruleOrGroup;
73
+ }
74
+ exports.isRuleGroup = isRuleGroup;
75
+ function validateRule(filters, rule) {
76
+ const filter = filters[rule.field];
77
+ if (!filter) {
78
+ return false; // Invalid field
79
+ }
80
+ const operator = exports.operatorsByType[filter.type][rule.operator];
81
+ if (!operator) {
82
+ return false; // Invalid operator
83
+ }
84
+ const values = Array.isArray(rule.value) ? rule.value : [rule.value];
85
+ if (operator.args !== values.length) {
86
+ return false; // Invalid number of args
87
+ }
88
+ return true;
89
+ }
90
+ exports.validateRule = validateRule;
91
+ function validateRuleGroup(filters, ruleGroup) {
92
+ for (const rule of ruleGroup.rules) {
93
+ const valid = isRuleGroup(rule)
94
+ ? validateRuleGroup(filters, rule)
95
+ : validateRule(filters, rule);
96
+ if (!valid) {
97
+ return false;
98
+ }
99
+ }
100
+ return true;
101
+ }
102
+ exports.validateRuleGroup = validateRuleGroup;
71
103
  function convertRulesToFilters(rules) {
72
104
  if (!rules) {
73
105
  return null;
@@ -35,7 +35,7 @@ export const nullableOperators = {
35
35
  is_empty: { args: 0 },
36
36
  is_not_empty: { args: 0 },
37
37
  };
38
- export const operationParams = {
38
+ export const operatorsByType = {
39
39
  text: {
40
40
  ...equalityOperators,
41
41
  ...arrayOperators,
@@ -51,6 +51,35 @@ export const operationParams = {
51
51
  enum: equalityOperators,
52
52
  contact: equalityOperators,
53
53
  };
54
+ export function isRuleGroup(ruleOrGroup) {
55
+ return "condition" in ruleOrGroup;
56
+ }
57
+ export function validateRule(filters, rule) {
58
+ const filter = filters[rule.field];
59
+ if (!filter) {
60
+ return false; // Invalid field
61
+ }
62
+ const operator = operatorsByType[filter.type][rule.operator];
63
+ if (!operator) {
64
+ return false; // Invalid operator
65
+ }
66
+ const values = Array.isArray(rule.value) ? rule.value : [rule.value];
67
+ if (operator.args !== values.length) {
68
+ return false; // Invalid number of args
69
+ }
70
+ return true;
71
+ }
72
+ export function validateRuleGroup(filters, ruleGroup) {
73
+ for (const rule of ruleGroup.rules) {
74
+ const valid = isRuleGroup(rule)
75
+ ? validateRuleGroup(filters, rule)
76
+ : validateRule(filters, rule);
77
+ if (!valid) {
78
+ return false;
79
+ }
80
+ }
81
+ return true;
82
+ }
54
83
  export function convertRulesToFilters(rules) {
55
84
  if (!rules) {
56
85
  return null;
@@ -31,7 +31,7 @@ export declare const nullableOperators: {
31
31
  args: number;
32
32
  };
33
33
  };
34
- export declare const operationParams: Record<FilterType, Partial<Record<FilterOperator, FilterOperatorParams>>>;
34
+ export declare const operatorsByType: Record<FilterType, Partial<Record<FilterOperator, FilterOperatorParams>>>;
35
35
  interface BaseFilterArgs {
36
36
  type: FilterType;
37
37
  nullable?: boolean;
@@ -50,6 +50,9 @@ export interface Filter {
50
50
  operator: FilterOperator;
51
51
  values: FilterValue[];
52
52
  }
53
+ export declare function isRuleGroup<T>(ruleOrGroup: GetPaginatedQueryRule<T> | GetPaginatedQueryRuleGroup<T>): ruleOrGroup is GetPaginatedQueryRuleGroup<T>;
54
+ export declare function validateRule<Field extends string>(filters: Filters<Field>, rule: GetPaginatedQueryRule<string>): rule is GetPaginatedQueryRule<Field>;
55
+ export declare function validateRuleGroup<Field extends string>(filters: Filters<Field>, ruleGroup: GetPaginatedQueryRuleGroup<string>): ruleGroup is GetPaginatedQueryRuleGroup<Field>;
53
56
  export declare function convertRulesToFilters(rules: GetPaginatedQuery<string>["rules"]): Filter[] | null;
54
57
  export declare function convertFiltersToRules(matchType: "all" | "any", filters: Filter[]): GetPaginatedQuery<string>["rules"];
55
58
  export * from "./callouts";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beabee/beabee-common",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",