@beabee/beabee-common 1.4.1 → 1.5.1

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,37 @@ 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
+ if (operator.args !== rule.value.length) {
85
+ return false; // Invalid number of args
86
+ }
87
+ return true;
88
+ }
89
+ exports.validateRule = validateRule;
90
+ function validateRuleGroup(filters, ruleGroup) {
91
+ for (const rule of ruleGroup.rules) {
92
+ const valid = isRuleGroup(rule)
93
+ ? validateRuleGroup(filters, rule)
94
+ : validateRule(filters, rule);
95
+ if (!valid) {
96
+ return false;
97
+ }
98
+ }
99
+ return true;
100
+ }
101
+ exports.validateRuleGroup = validateRuleGroup;
71
102
  function convertRulesToFilters(rules) {
72
103
  if (!rules) {
73
104
  return null;
@@ -77,7 +108,7 @@ function convertRulesToFilters(rules) {
77
108
  return rulesWithoutGroups.map((rule) => ({
78
109
  id: rule.field,
79
110
  operator: rule.operator,
80
- values: Array.isArray(rule.value) ? [...rule.value] : [rule.value],
111
+ values: [...rule.value],
81
112
  }));
82
113
  }
83
114
  exports.convertRulesToFilters = convertRulesToFilters;
@@ -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,34 @@ 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
+ if (operator.args !== rule.value.length) {
67
+ return false; // Invalid number of args
68
+ }
69
+ return true;
70
+ }
71
+ export function validateRuleGroup(filters, ruleGroup) {
72
+ for (const rule of ruleGroup.rules) {
73
+ const valid = isRuleGroup(rule)
74
+ ? validateRuleGroup(filters, rule)
75
+ : validateRule(filters, rule);
76
+ if (!valid) {
77
+ return false;
78
+ }
79
+ }
80
+ return true;
81
+ }
54
82
  export function convertRulesToFilters(rules) {
55
83
  if (!rules) {
56
84
  return null;
@@ -60,7 +88,7 @@ export function convertRulesToFilters(rules) {
60
88
  return rulesWithoutGroups.map((rule) => ({
61
89
  id: rule.field,
62
90
  operator: rule.operator,
63
- values: Array.isArray(rule.value) ? [...rule.value] : [rule.value],
91
+ values: [...rule.value],
64
92
  }));
65
93
  }
66
94
  export function convertFiltersToRules(matchType, filters) {
@@ -4,7 +4,7 @@ export declare type GetPaginatedQueryRuleValue = string | number | boolean;
4
4
  export interface GetPaginatedQueryRule<T> {
5
5
  field: T;
6
6
  operator: GetPaginatedQueryRuleOperator;
7
- value: GetPaginatedQueryRuleValue | GetPaginatedQueryRuleValue[];
7
+ value: GetPaginatedQueryRuleValue[];
8
8
  }
9
9
  export interface GetPaginatedQueryRuleGroup<T> {
10
10
  condition: "AND" | "OR";
@@ -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.1",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",