@beabee/beabee-common 1.6.1 → 1.7.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.
- package/dist/cjs/search/index.js +20 -2
- package/dist/esm/search/index.js +20 -2
- package/dist/types/search/index.d.ts +134 -12
- package/package.json +1 -1
package/dist/cjs/search/index.js
CHANGED
|
@@ -86,10 +86,27 @@ function validateRule(filters, rule) {
|
|
|
86
86
|
if (operator.args !== rule.value.length) {
|
|
87
87
|
return false; // Invalid number of args
|
|
88
88
|
}
|
|
89
|
-
|
|
89
|
+
const expectedType = filter.type === "boolean" || filter.type === "number"
|
|
90
|
+
? filter.type
|
|
91
|
+
: "string";
|
|
92
|
+
if (rule.value.some((v) => typeof v !== expectedType)) {
|
|
93
|
+
return false; // Invalid value type
|
|
94
|
+
}
|
|
95
|
+
if (filter.type === "date" &&
|
|
96
|
+
rule.value.some((v) => isNaN(+new Date(v)))) {
|
|
97
|
+
return false; // Invalid date
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
...rule,
|
|
101
|
+
type: filter.type,
|
|
102
|
+
};
|
|
90
103
|
}
|
|
91
104
|
exports.validateRule = validateRule;
|
|
92
105
|
function validateRuleGroup(filters, ruleGroup) {
|
|
106
|
+
const validatedRuleGroup = {
|
|
107
|
+
condition: ruleGroup.condition,
|
|
108
|
+
rules: [],
|
|
109
|
+
};
|
|
93
110
|
for (const rule of ruleGroup.rules) {
|
|
94
111
|
const valid = isRuleGroup(rule)
|
|
95
112
|
? validateRuleGroup(filters, rule)
|
|
@@ -97,8 +114,9 @@ function validateRuleGroup(filters, ruleGroup) {
|
|
|
97
114
|
if (!valid) {
|
|
98
115
|
return false;
|
|
99
116
|
}
|
|
117
|
+
validatedRuleGroup.rules.push(valid);
|
|
100
118
|
}
|
|
101
|
-
return
|
|
119
|
+
return validatedRuleGroup;
|
|
102
120
|
}
|
|
103
121
|
exports.validateRuleGroup = validateRuleGroup;
|
|
104
122
|
function convertRuleGroupToFilters(ruleGroup) {
|
package/dist/esm/search/index.js
CHANGED
|
@@ -68,9 +68,26 @@ export function validateRule(filters, rule) {
|
|
|
68
68
|
if (operator.args !== rule.value.length) {
|
|
69
69
|
return false; // Invalid number of args
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
const expectedType = filter.type === "boolean" || filter.type === "number"
|
|
72
|
+
? filter.type
|
|
73
|
+
: "string";
|
|
74
|
+
if (rule.value.some((v) => typeof v !== expectedType)) {
|
|
75
|
+
return false; // Invalid value type
|
|
76
|
+
}
|
|
77
|
+
if (filter.type === "date" &&
|
|
78
|
+
rule.value.some((v) => isNaN(+new Date(v)))) {
|
|
79
|
+
return false; // Invalid date
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
...rule,
|
|
83
|
+
type: filter.type,
|
|
84
|
+
};
|
|
72
85
|
}
|
|
73
86
|
export function validateRuleGroup(filters, ruleGroup) {
|
|
87
|
+
const validatedRuleGroup = {
|
|
88
|
+
condition: ruleGroup.condition,
|
|
89
|
+
rules: [],
|
|
90
|
+
};
|
|
74
91
|
for (const rule of ruleGroup.rules) {
|
|
75
92
|
const valid = isRuleGroup(rule)
|
|
76
93
|
? validateRuleGroup(filters, rule)
|
|
@@ -78,8 +95,9 @@ export function validateRuleGroup(filters, ruleGroup) {
|
|
|
78
95
|
if (!valid) {
|
|
79
96
|
return false;
|
|
80
97
|
}
|
|
98
|
+
validatedRuleGroup.rules.push(valid);
|
|
81
99
|
}
|
|
82
|
-
return
|
|
100
|
+
return validatedRuleGroup;
|
|
83
101
|
}
|
|
84
102
|
export function convertRuleGroupToFilters(ruleGroup) {
|
|
85
103
|
if (!ruleGroup) {
|
|
@@ -1,14 +1,28 @@
|
|
|
1
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
2
|
export declare type RuleOperator = typeof ruleOperators[number];
|
|
3
3
|
export declare type RuleValue = string | number | boolean;
|
|
4
|
-
export interface Rule
|
|
5
|
-
field:
|
|
4
|
+
export interface Rule {
|
|
5
|
+
field: string;
|
|
6
6
|
operator: RuleOperator;
|
|
7
7
|
value: RuleValue[];
|
|
8
8
|
}
|
|
9
|
-
export interface RuleGroup
|
|
9
|
+
export interface RuleGroup {
|
|
10
10
|
condition: "AND" | "OR";
|
|
11
|
-
rules: (RuleGroup
|
|
11
|
+
rules: (RuleGroup | Rule)[];
|
|
12
|
+
}
|
|
13
|
+
interface BaseValidatedRule<T extends FilterType, F extends string, V> {
|
|
14
|
+
type: T;
|
|
15
|
+
field: F;
|
|
16
|
+
operator: keyof typeof operatorsByType[T];
|
|
17
|
+
value: V[];
|
|
18
|
+
}
|
|
19
|
+
declare type ValidatedNumberRule<Field extends string> = BaseValidatedRule<"number", Field, number>;
|
|
20
|
+
declare type ValidatedStringRule<Field extends string> = BaseValidatedRule<Exclude<FilterType, "number" | "boolean">, Field, string>;
|
|
21
|
+
declare type ValidatedBooleanRule<Field extends string> = BaseValidatedRule<"boolean", Field, boolean>;
|
|
22
|
+
export declare type ValidatedRule<Field extends string> = ValidatedNumberRule<Field> | ValidatedStringRule<Field> | ValidatedBooleanRule<Field>;
|
|
23
|
+
export interface ValidatedRuleGroup<Field extends string> {
|
|
24
|
+
condition: "AND" | "OR";
|
|
25
|
+
rules: (ValidatedRuleGroup<Field> | ValidatedRule<Field>)[];
|
|
12
26
|
}
|
|
13
27
|
export declare type FilterType = "text" | "date" | "number" | "boolean" | "array" | "enum" | "contact";
|
|
14
28
|
export declare type FilterValue = RuleValue;
|
|
@@ -24,7 +38,115 @@ export declare const nullableOperators: {
|
|
|
24
38
|
args: number;
|
|
25
39
|
};
|
|
26
40
|
};
|
|
27
|
-
export declare const operatorsByType:
|
|
41
|
+
export declare const operatorsByType: {
|
|
42
|
+
readonly text: {
|
|
43
|
+
readonly begins_with: {
|
|
44
|
+
readonly args: 1;
|
|
45
|
+
};
|
|
46
|
+
readonly ends_with: {
|
|
47
|
+
readonly args: 1;
|
|
48
|
+
};
|
|
49
|
+
readonly not_begins_with: {
|
|
50
|
+
readonly args: 1;
|
|
51
|
+
};
|
|
52
|
+
readonly not_ends_with: {
|
|
53
|
+
readonly args: 1;
|
|
54
|
+
};
|
|
55
|
+
readonly contains: {
|
|
56
|
+
args: number;
|
|
57
|
+
};
|
|
58
|
+
readonly not_contains: {
|
|
59
|
+
args: number;
|
|
60
|
+
};
|
|
61
|
+
readonly equal: {
|
|
62
|
+
args: number;
|
|
63
|
+
};
|
|
64
|
+
readonly not_equal: {
|
|
65
|
+
args: number;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
readonly date: {
|
|
69
|
+
between: {
|
|
70
|
+
args: number;
|
|
71
|
+
};
|
|
72
|
+
not_between: {
|
|
73
|
+
args: number;
|
|
74
|
+
};
|
|
75
|
+
less: {
|
|
76
|
+
args: number;
|
|
77
|
+
};
|
|
78
|
+
greater: {
|
|
79
|
+
args: number;
|
|
80
|
+
};
|
|
81
|
+
less_or_equal: {
|
|
82
|
+
args: number;
|
|
83
|
+
};
|
|
84
|
+
greater_or_equal: {
|
|
85
|
+
args: number;
|
|
86
|
+
};
|
|
87
|
+
equal: {
|
|
88
|
+
args: number;
|
|
89
|
+
};
|
|
90
|
+
not_equal: {
|
|
91
|
+
args: number;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
readonly number: {
|
|
95
|
+
between: {
|
|
96
|
+
args: number;
|
|
97
|
+
};
|
|
98
|
+
not_between: {
|
|
99
|
+
args: number;
|
|
100
|
+
};
|
|
101
|
+
less: {
|
|
102
|
+
args: number;
|
|
103
|
+
};
|
|
104
|
+
greater: {
|
|
105
|
+
args: number;
|
|
106
|
+
};
|
|
107
|
+
less_or_equal: {
|
|
108
|
+
args: number;
|
|
109
|
+
};
|
|
110
|
+
greater_or_equal: {
|
|
111
|
+
args: number;
|
|
112
|
+
};
|
|
113
|
+
equal: {
|
|
114
|
+
args: number;
|
|
115
|
+
};
|
|
116
|
+
not_equal: {
|
|
117
|
+
args: number;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
readonly boolean: {
|
|
121
|
+
readonly equal: {
|
|
122
|
+
args: number;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
readonly array: {
|
|
126
|
+
contains: {
|
|
127
|
+
args: number;
|
|
128
|
+
};
|
|
129
|
+
not_contains: {
|
|
130
|
+
args: number;
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
readonly enum: {
|
|
134
|
+
equal: {
|
|
135
|
+
args: number;
|
|
136
|
+
};
|
|
137
|
+
not_equal: {
|
|
138
|
+
args: number;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
readonly contact: {
|
|
142
|
+
equal: {
|
|
143
|
+
args: number;
|
|
144
|
+
};
|
|
145
|
+
not_equal: {
|
|
146
|
+
args: number;
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
};
|
|
28
150
|
interface BaseFilterArgs {
|
|
29
151
|
type: FilterType;
|
|
30
152
|
nullable?: boolean;
|
|
@@ -49,18 +171,18 @@ export interface Paginated<T> {
|
|
|
49
171
|
count: number;
|
|
50
172
|
total: number;
|
|
51
173
|
}
|
|
52
|
-
export interface PaginatedQuery
|
|
174
|
+
export interface PaginatedQuery {
|
|
53
175
|
limit?: number;
|
|
54
176
|
offset?: number;
|
|
55
177
|
sort?: string;
|
|
56
178
|
order?: "ASC" | "DESC";
|
|
57
|
-
rules?: RuleGroup
|
|
179
|
+
rules?: RuleGroup;
|
|
58
180
|
}
|
|
59
|
-
export declare function isRuleGroup
|
|
60
|
-
export declare function validateRule<Field extends string>(filters: Filters<Field>, rule: Rule
|
|
61
|
-
export declare function validateRuleGroup<Field extends string>(filters: Filters<Field>, ruleGroup: RuleGroup
|
|
62
|
-
export declare function convertRuleGroupToFilters(ruleGroup?: RuleGroup
|
|
63
|
-
export declare function convertFiltersToRuleGroup(matchType: "all" | "any", filters: Filter[]): RuleGroup
|
|
181
|
+
export declare function isRuleGroup(ruleOrGroup: Rule | RuleGroup): ruleOrGroup is RuleGroup;
|
|
182
|
+
export declare function validateRule<Field extends string>(filters: Filters<Field>, rule: Rule): ValidatedRule<Field> | false;
|
|
183
|
+
export declare function validateRuleGroup<Field extends string>(filters: Filters<Field>, ruleGroup: RuleGroup): ValidatedRuleGroup<Field> | false;
|
|
184
|
+
export declare function convertRuleGroupToFilters(ruleGroup?: RuleGroup): Filter[] | null;
|
|
185
|
+
export declare function convertFiltersToRuleGroup(matchType: "all" | "any", filters: Filter[]): RuleGroup;
|
|
64
186
|
export * from "./callouts";
|
|
65
187
|
export * from "./contacts";
|
|
66
188
|
export * from "./notices";
|