@beabee/beabee-common 1.5.0 → 1.6.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.
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ // *** Definitions for rules ***
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -14,8 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
16
  };
16
17
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.convertFiltersToRules = exports.convertRulesToFilters = exports.validateRuleGroup = exports.validateRule = exports.isRuleGroup = exports.operatorsByType = exports.nullableOperators = exports.operators = void 0;
18
- exports.operators = [
18
+ exports.convertFiltersToRuleGroup = exports.convertRuleGroupToFilters = exports.validateRuleGroup = exports.validateRule = exports.isRuleGroup = exports.operatorsByType = exports.nullableOperators = exports.ruleOperators = void 0;
19
+ exports.ruleOperators = [
19
20
  "equal",
20
21
  "not_equal",
21
22
  "less",
@@ -68,6 +69,7 @@ exports.operatorsByType = {
68
69
  enum: equalityOperators,
69
70
  contact: equalityOperators,
70
71
  };
72
+ // *** Helper methods ***
71
73
  function isRuleGroup(ruleOrGroup) {
72
74
  return "condition" in ruleOrGroup;
73
75
  }
@@ -81,8 +83,7 @@ function validateRule(filters, rule) {
81
83
  if (!operator) {
82
84
  return false; // Invalid operator
83
85
  }
84
- const values = Array.isArray(rule.value) ? rule.value : [rule.value];
85
- if (operator.args !== values.length) {
86
+ if (operator.args !== rule.value.length) {
86
87
  return false; // Invalid number of args
87
88
  }
88
89
  return true;
@@ -100,20 +101,20 @@ function validateRuleGroup(filters, ruleGroup) {
100
101
  return true;
101
102
  }
102
103
  exports.validateRuleGroup = validateRuleGroup;
103
- function convertRulesToFilters(rules) {
104
- if (!rules) {
104
+ function convertRuleGroupToFilters(ruleGroup) {
105
+ if (!ruleGroup) {
105
106
  return null;
106
107
  }
107
108
  // TODO: how to handle groups?
108
- const rulesWithoutGroups = rules.rules.filter((rule) => "operator" in rule);
109
+ const rulesWithoutGroups = ruleGroup.rules.filter((rule) => !isRuleGroup(rule));
109
110
  return rulesWithoutGroups.map((rule) => ({
110
111
  id: rule.field,
111
112
  operator: rule.operator,
112
- values: Array.isArray(rule.value) ? [...rule.value] : [rule.value],
113
+ values: [...rule.value],
113
114
  }));
114
115
  }
115
- exports.convertRulesToFilters = convertRulesToFilters;
116
- function convertFiltersToRules(matchType, filters) {
116
+ exports.convertRuleGroupToFilters = convertRuleGroupToFilters;
117
+ function convertFiltersToRuleGroup(matchType, filters) {
117
118
  return {
118
119
  condition: matchType === "all" ? "AND" : "OR",
119
120
  rules: filters.map((filter) => ({
@@ -123,7 +124,7 @@ function convertFiltersToRules(matchType, filters) {
123
124
  })),
124
125
  };
125
126
  }
126
- exports.convertFiltersToRules = convertFiltersToRules;
127
+ exports.convertFiltersToRuleGroup = convertFiltersToRuleGroup;
127
128
  __exportStar(require("./callouts"), exports);
128
129
  __exportStar(require("./contacts"), exports);
129
130
  __exportStar(require("./notices"), exports);
@@ -1,4 +1,5 @@
1
- export const operators = [
1
+ // *** Definitions for rules ***
2
+ export const ruleOperators = [
2
3
  "equal",
3
4
  "not_equal",
4
5
  "less",
@@ -51,6 +52,7 @@ export const operatorsByType = {
51
52
  enum: equalityOperators,
52
53
  contact: equalityOperators,
53
54
  };
55
+ // *** Helper methods ***
54
56
  export function isRuleGroup(ruleOrGroup) {
55
57
  return "condition" in ruleOrGroup;
56
58
  }
@@ -63,8 +65,7 @@ export function validateRule(filters, rule) {
63
65
  if (!operator) {
64
66
  return false; // Invalid operator
65
67
  }
66
- const values = Array.isArray(rule.value) ? rule.value : [rule.value];
67
- if (operator.args !== values.length) {
68
+ if (operator.args !== rule.value.length) {
68
69
  return false; // Invalid number of args
69
70
  }
70
71
  return true;
@@ -80,19 +81,19 @@ export function validateRuleGroup(filters, ruleGroup) {
80
81
  }
81
82
  return true;
82
83
  }
83
- export function convertRulesToFilters(rules) {
84
- if (!rules) {
84
+ export function convertRuleGroupToFilters(ruleGroup) {
85
+ if (!ruleGroup) {
85
86
  return null;
86
87
  }
87
88
  // TODO: how to handle groups?
88
- const rulesWithoutGroups = rules.rules.filter((rule) => "operator" in rule);
89
+ const rulesWithoutGroups = ruleGroup.rules.filter((rule) => !isRuleGroup(rule));
89
90
  return rulesWithoutGroups.map((rule) => ({
90
91
  id: rule.field,
91
92
  operator: rule.operator,
92
- values: Array.isArray(rule.value) ? [...rule.value] : [rule.value],
93
+ values: [...rule.value],
93
94
  }));
94
95
  }
95
- export function convertFiltersToRules(matchType, filters) {
96
+ export function convertFiltersToRuleGroup(matchType, filters) {
96
97
  return {
97
98
  condition: matchType === "all" ? "AND" : "OR",
98
99
  rules: filters.map((filter) => ({
@@ -1,25 +1,18 @@
1
- export declare const operators: readonly ["equal", "not_equal", "less", "less_or_equal", "greater", "greater_or_equal", "between", "not_between", "begins_with", "not_begins_with", "contains", "not_contains", "ends_with", "not_ends_with", "is_empty", "is_not_empty"];
2
- export declare type GetPaginatedQueryRuleOperator = typeof operators[number];
3
- export declare type GetPaginatedQueryRuleValue = string | number | boolean;
4
- export interface GetPaginatedQueryRule<T> {
1
+ export declare const ruleOperators: readonly ["equal", "not_equal", "less", "less_or_equal", "greater", "greater_or_equal", "between", "not_between", "begins_with", "not_begins_with", "contains", "not_contains", "ends_with", "not_ends_with", "is_empty", "is_not_empty"];
2
+ export declare type RuleOperator = typeof ruleOperators[number];
3
+ export declare type RuleValue = string | number | boolean;
4
+ export interface Rule<T> {
5
5
  field: T;
6
- operator: GetPaginatedQueryRuleOperator;
7
- value: GetPaginatedQueryRuleValue | GetPaginatedQueryRuleValue[];
6
+ operator: RuleOperator;
7
+ value: RuleValue[];
8
8
  }
9
- export interface GetPaginatedQueryRuleGroup<T> {
9
+ export interface RuleGroup<T> {
10
10
  condition: "AND" | "OR";
11
- rules: (GetPaginatedQueryRuleGroup<T> | GetPaginatedQueryRule<T>)[];
12
- }
13
- export interface GetPaginatedQuery<T> {
14
- limit?: number;
15
- offset?: number;
16
- sort?: string;
17
- order?: "ASC" | "DESC";
18
- rules?: GetPaginatedQueryRuleGroup<T>;
11
+ rules: (RuleGroup<T> | Rule<T>)[];
19
12
  }
20
13
  export declare type FilterType = "text" | "date" | "number" | "boolean" | "array" | "enum" | "contact";
21
- export declare type FilterValue = GetPaginatedQueryRuleValue;
22
- export declare type FilterOperator = GetPaginatedQueryRuleOperator;
14
+ export declare type FilterValue = RuleValue;
15
+ export declare type FilterOperator = RuleOperator;
23
16
  export interface FilterOperatorParams {
24
17
  args: number;
25
18
  }
@@ -50,11 +43,24 @@ export interface Filter {
50
43
  operator: FilterOperator;
51
44
  values: FilterValue[];
52
45
  }
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>;
56
- export declare function convertRulesToFilters(rules: GetPaginatedQuery<string>["rules"]): Filter[] | null;
57
- export declare function convertFiltersToRules(matchType: "all" | "any", filters: Filter[]): GetPaginatedQuery<string>["rules"];
46
+ export interface Paginated<T> {
47
+ items: T[];
48
+ offset: number;
49
+ count: number;
50
+ total: number;
51
+ }
52
+ export interface PaginatedQuery<T> {
53
+ limit?: number;
54
+ offset?: number;
55
+ sort?: string;
56
+ order?: "ASC" | "DESC";
57
+ rules?: RuleGroup<T>;
58
+ }
59
+ export declare function isRuleGroup<T>(ruleOrGroup: Rule<T> | RuleGroup<T>): ruleOrGroup is RuleGroup<T>;
60
+ export declare function validateRule<Field extends string>(filters: Filters<Field>, rule: Rule<string>): rule is Rule<Field>;
61
+ export declare function validateRuleGroup<Field extends string>(filters: Filters<Field>, ruleGroup: RuleGroup<string>): ruleGroup is RuleGroup<Field>;
62
+ export declare function convertRuleGroupToFilters(ruleGroup?: RuleGroup<string>): Filter[] | null;
63
+ export declare function convertFiltersToRuleGroup(matchType: "all" | "any", filters: Filter[]): RuleGroup<string>;
58
64
  export * from "./callouts";
59
65
  export * from "./contacts";
60
66
  export * from "./notices";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beabee/beabee-common",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",