@form-flow/core 1.0.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/README.md +281 -0
- package/dist/dependency-graph.d.ts +14 -0
- package/dist/dependency-graph.d.ts.map +1 -0
- package/dist/dependency-graph.js +69 -0
- package/dist/dependency-graph.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/models/field-definition.d.ts +49 -0
- package/dist/models/field-definition.d.ts.map +1 -0
- package/dist/models/field-definition.js +3 -0
- package/dist/models/field-definition.js.map +1 -0
- package/dist/models/form-definition.d.ts +16 -0
- package/dist/models/form-definition.d.ts.map +1 -0
- package/dist/models/form-definition.js +3 -0
- package/dist/models/form-definition.js.map +1 -0
- package/dist/models/group.d.ts +12 -0
- package/dist/models/group.d.ts.map +1 -0
- package/dist/models/group.js +3 -0
- package/dist/models/group.js.map +1 -0
- package/dist/models/operator-registry.d.ts +21 -0
- package/dist/models/operator-registry.d.ts.map +1 -0
- package/dist/models/operator-registry.js +31 -0
- package/dist/models/operator-registry.js.map +1 -0
- package/dist/models/operators.d.ts +43 -0
- package/dist/models/operators.d.ts.map +1 -0
- package/dist/models/operators.js +29 -0
- package/dist/models/operators.js.map +1 -0
- package/dist/models/rule.d.ts +10 -0
- package/dist/models/rule.d.ts.map +1 -0
- package/dist/models/rule.js +3 -0
- package/dist/models/rule.js.map +1 -0
- package/dist/modern-rule-builder-engine.d.ts +46 -0
- package/dist/modern-rule-builder-engine.d.ts.map +1 -0
- package/dist/modern-rule-builder-engine.js +198 -0
- package/dist/modern-rule-builder-engine.js.map +1 -0
- package/dist/rule-builder.d.ts +30 -0
- package/dist/rule-builder.d.ts.map +1 -0
- package/dist/rule-builder.js +75 -0
- package/dist/rule-builder.js.map +1 -0
- package/dist/rule-evaluator.d.ts +11 -0
- package/dist/rule-evaluator.d.ts.map +1 -0
- package/dist/rule-evaluator.js +90 -0
- package/dist/rule-evaluator.js.map +1 -0
- package/dist/utility/field-helper.d.ts +5 -0
- package/dist/utility/field-helper.d.ts.map +1 -0
- package/dist/utility/field-helper.js +11 -0
- package/dist/utility/field-helper.js.map +1 -0
- package/dist/utility/rule-helper.d.ts +10 -0
- package/dist/utility/rule-helper.d.ts.map +1 -0
- package/dist/utility/rule-helper.js +45 -0
- package/dist/utility/rule-helper.js.map +1 -0
- package/dist/utility/rule-mapper.d.ts +11 -0
- package/dist/utility/rule-mapper.d.ts.map +1 -0
- package/dist/utility/rule-mapper.js +88 -0
- package/dist/utility/rule-mapper.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FORM_FLOW_OPERATORS_MAP = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Default operator map shipped with `@form-flow/core`.
|
|
6
|
+
* Consumers may override or extend this map at runtime.
|
|
7
|
+
*/
|
|
8
|
+
exports.FORM_FLOW_OPERATORS_MAP = {
|
|
9
|
+
eq: { label: 'Equals', allowedTypes: "all", valueType: "single" },
|
|
10
|
+
neq: { label: 'Not equal to', allowedTypes: "all", valueType: "single" },
|
|
11
|
+
gt: { label: 'Greater than', allowedTypes: ['number', 'date'], valueType: "single" },
|
|
12
|
+
gte: { label: 'Greater than or equal to', allowedTypes: ['number', 'date'], valueType: "single" },
|
|
13
|
+
lt: { label: 'Less than', allowedTypes: ['number', 'date'], valueType: "single" },
|
|
14
|
+
lte: { label: 'Less than or equal to', allowedTypes: ['number', 'date'], valueType: "single" },
|
|
15
|
+
in: { label: 'Is in', allowedTypes: "all", valueType: "list" },
|
|
16
|
+
var: { label: 'Variable', allowedTypes: "all", valueType: "field", hideFromPicker: true },
|
|
17
|
+
isEmpty: { label: 'Is empty', allowedTypes: "all", valueType: "none" },
|
|
18
|
+
isNotEmpty: { label: 'Is not empty', allowedTypes: "all", valueType: "none" },
|
|
19
|
+
isTrue: { label: 'Is true', allowedTypes: ['checkbox'], valueType: "none" },
|
|
20
|
+
isFalse: { label: 'Is false', allowedTypes: ['checkbox'], valueType: "none" },
|
|
21
|
+
contains: { label: 'Contains', allowedTypes: ['text'], valueType: "single" },
|
|
22
|
+
startsWith: { label: 'Starts with', allowedTypes: ['text'], valueType: "single" },
|
|
23
|
+
endsWith: { label: 'Ends with', allowedTypes: ['text'], valueType: "single" },
|
|
24
|
+
dateAfter: { label: 'Date is after', allowedTypes: ['date'], valueType: "single" },
|
|
25
|
+
dateBefore: { label: 'Date is before', allowedTypes: ['date'], valueType: "single" },
|
|
26
|
+
lengthEquals: { label: 'Length equals', allowedTypes: ['text'], valueType: "single" },
|
|
27
|
+
truthy: { label: 'Is truthy', allowedTypes: ['checkbox'], valueType: "none" },
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../src/models/operators.ts"],"names":[],"mappings":";;;AAiDA;;;GAGG;AACU,QAAA,uBAAuB,GACmB;IACrD,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE;IACjE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE;IACxE,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IACpF,GAAG,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IACjG,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IACjF,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IAC9F,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;IAC9D,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE;IACzF,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;IACtE,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;IAC7E,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;IAC3E,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;IAC7E,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IAC5E,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IACjF,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IAC7E,SAAS,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IAClF,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IACpF,YAAY,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;IACrF,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;CAC9E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RuleOperatorKey } from "./operators";
|
|
2
|
+
export interface FieldRuleDefinition {
|
|
3
|
+
readonly ruleId: string;
|
|
4
|
+
groupId?: string;
|
|
5
|
+
conditionFieldId: string;
|
|
6
|
+
not?: boolean;
|
|
7
|
+
operator: RuleOperatorKey;
|
|
8
|
+
value?: any;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../src/models/rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,GAAG,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/models/rule.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { RulesLogic } from "json-logic-js";
|
|
2
|
+
interface ConditionMethods {
|
|
3
|
+
eq(value: any): RuleChain;
|
|
4
|
+
neq(value: any): RuleChain;
|
|
5
|
+
gt(value: any): RuleChain;
|
|
6
|
+
gte(value: any): RuleChain;
|
|
7
|
+
lt(value: any): RuleChain;
|
|
8
|
+
lte(value: any): RuleChain;
|
|
9
|
+
in(array: any[]): RuleChain;
|
|
10
|
+
isEmpty(): RuleChain;
|
|
11
|
+
isNotEmpty(): RuleChain;
|
|
12
|
+
isTrue(): RuleChain;
|
|
13
|
+
isFalse(): RuleChain;
|
|
14
|
+
startsWith(prefix: string): RuleChain;
|
|
15
|
+
contains(value: string): RuleChain;
|
|
16
|
+
endsWith(suffix: string): RuleChain;
|
|
17
|
+
dateAfter(date: string): RuleChain;
|
|
18
|
+
dateBefore(date: string): RuleChain;
|
|
19
|
+
lengthEquals(length: number): RuleChain;
|
|
20
|
+
truthy(): RuleChain;
|
|
21
|
+
}
|
|
22
|
+
interface ChainMethods {
|
|
23
|
+
and(field: string): ConditionMethods;
|
|
24
|
+
or(field: string): ConditionMethods;
|
|
25
|
+
build(): RulesLogic;
|
|
26
|
+
}
|
|
27
|
+
type RuleChain = ConditionMethods & ChainMethods;
|
|
28
|
+
export declare class Rule {
|
|
29
|
+
static when(field: string): ConditionMethods;
|
|
30
|
+
}
|
|
31
|
+
export declare class RuleGroupBuilder {
|
|
32
|
+
private operator;
|
|
33
|
+
private rules;
|
|
34
|
+
constructor(operator?: 'and' | 'or');
|
|
35
|
+
static and(): RuleGroupBuilder;
|
|
36
|
+
static or(): RuleGroupBuilder;
|
|
37
|
+
add(rule: RulesLogic): this;
|
|
38
|
+
addRule(builder: (rule: typeof Rule) => RulesLogic): this;
|
|
39
|
+
addGroup(group: RulesLogic): this;
|
|
40
|
+
addWhen(field: string): ConditionMethods & {
|
|
41
|
+
then: (condition: RulesLogic) => RuleGroupBuilder;
|
|
42
|
+
};
|
|
43
|
+
build(): RulesLogic;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=modern-rule-builder-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modern-rule-builder-engine.d.ts","sourceRoot":"","sources":["../src/modern-rule-builder-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,UAAU,gBAAgB;IACtB,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC;IAC3B,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC;IAC3B,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC;IAC3B,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAC5B,OAAO,IAAI,SAAS,CAAC;IACrB,UAAU,IAAI,SAAS,CAAC;IACxB,MAAM,IAAI,SAAS,CAAC;IACpB,OAAO,IAAI,SAAS,CAAC;IACrB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,MAAM,IAAI,SAAS,CAAC;CACvB;AAGD,UAAU,YAAY;IAClB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACrC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACpC,KAAK,IAAI,UAAU,CAAC;CACvB;AAGD,KAAK,SAAS,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAkIjD,qBAAa,IAAI;IACb,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB;CAG/C;AAGD,qBAAa,gBAAgB;IAGb,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,KAAK,CAAoB;gBAEb,QAAQ,GAAE,KAAK,GAAG,IAAY;IAElD,MAAM,CAAC,GAAG;IAIV,MAAM,CAAC,EAAE;IAIT,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK3B,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI;IAKzD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKjC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG;QACvC,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,gBAAgB,CAAA;KACpD;IASD,KAAK,IAAI,UAAU;CAetB"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RuleGroupBuilder = exports.Rule = void 0;
|
|
4
|
+
const rule_builder_1 = require("./rule-builder"); // Il tuo codice esistente
|
|
5
|
+
class RuleCondition {
|
|
6
|
+
constructor(field) {
|
|
7
|
+
this.field = field;
|
|
8
|
+
this.rules = [];
|
|
9
|
+
this.currentOperator = 'and';
|
|
10
|
+
}
|
|
11
|
+
// Metodi di condizione
|
|
12
|
+
eq(value) {
|
|
13
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.eq(this.field, value));
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
neq(value) {
|
|
17
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.neq(this.field, value));
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
gt(value) {
|
|
21
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.gt(this.field, value));
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
gte(value) {
|
|
25
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.gte(this.field, value));
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
lt(value) {
|
|
29
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.lt(this.field, value));
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
lte(value) {
|
|
33
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.lte(this.field, value));
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
in(array) {
|
|
37
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.in(this.field, array));
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
isEmpty() {
|
|
41
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.isEmpty(this.field));
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
isNotEmpty() {
|
|
45
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.isNotEmpty(this.field));
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
isTrue() {
|
|
49
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.isTrue(this.field));
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
isFalse() {
|
|
53
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.isFalse(this.field));
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
startsWith(prefix) {
|
|
57
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.startsWith(this.field, prefix));
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
contains(value) {
|
|
61
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.contains(this.field, value));
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
endsWith(suffix) {
|
|
65
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.endsWith(this.field, suffix));
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
dateAfter(date) {
|
|
69
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.dateAfter(this.field, date));
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
dateBefore(date) {
|
|
73
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.dateBefore(this.field, date));
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
lengthEquals(length) {
|
|
77
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.lengthEquals(this.field, length));
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
truthy() {
|
|
81
|
+
this.rules.push(rule_builder_1.RuleBuilder.value.truthy(this.field));
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
// Metodi di chain
|
|
85
|
+
and(field) {
|
|
86
|
+
this.currentOperator = 'and';
|
|
87
|
+
return new RuleCondition(field).copyState(this);
|
|
88
|
+
}
|
|
89
|
+
or(field) {
|
|
90
|
+
this.currentOperator = 'or';
|
|
91
|
+
return new RuleCondition(field).copyState(this);
|
|
92
|
+
}
|
|
93
|
+
build() {
|
|
94
|
+
if (this.rules.length === 1) {
|
|
95
|
+
return this.rules[0];
|
|
96
|
+
}
|
|
97
|
+
if (this.currentOperator === 'and') {
|
|
98
|
+
return rule_builder_1.RuleBuilder.group.and(...this.rules);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return rule_builder_1.RuleBuilder.group.or(...this.rules);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
copyState(other) {
|
|
105
|
+
this.rules = [...other.rules];
|
|
106
|
+
this.currentOperator = other.currentOperator;
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Classe principale per iniziare la costruzione di regole
|
|
111
|
+
class Rule {
|
|
112
|
+
static when(field) {
|
|
113
|
+
return new RuleCondition(field);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.Rule = Rule;
|
|
117
|
+
// Builder per gruppi di regole
|
|
118
|
+
class RuleGroupBuilder {
|
|
119
|
+
constructor(operator = 'and') {
|
|
120
|
+
this.operator = operator;
|
|
121
|
+
this.rules = [];
|
|
122
|
+
}
|
|
123
|
+
static and() {
|
|
124
|
+
return new RuleGroupBuilder("and");
|
|
125
|
+
}
|
|
126
|
+
static or() {
|
|
127
|
+
return new RuleGroupBuilder("or");
|
|
128
|
+
}
|
|
129
|
+
add(rule) {
|
|
130
|
+
this.rules.push(rule);
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
addRule(builder) {
|
|
134
|
+
this.rules.push(builder(Rule));
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
addGroup(group) {
|
|
138
|
+
this.rules.push(group);
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
addWhen(field) {
|
|
142
|
+
const condition = Rule.when(field);
|
|
143
|
+
condition.then = (rule) => {
|
|
144
|
+
this.rules.push(rule);
|
|
145
|
+
return this;
|
|
146
|
+
};
|
|
147
|
+
return condition;
|
|
148
|
+
}
|
|
149
|
+
build() {
|
|
150
|
+
if (this.rules.length === 0) {
|
|
151
|
+
throw new Error("Cannot build empty rule group");
|
|
152
|
+
}
|
|
153
|
+
if (this.rules.length === 1) {
|
|
154
|
+
return this.rules[0];
|
|
155
|
+
}
|
|
156
|
+
if (this.operator === 'and') {
|
|
157
|
+
return rule_builder_1.RuleBuilder.group.and(...this.rules);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
return rule_builder_1.RuleBuilder.group.or(...this.rules);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.RuleGroupBuilder = RuleGroupBuilder;
|
|
165
|
+
// // Esempi di utilizzo:
|
|
166
|
+
// // Esempio 1: Regola semplice
|
|
167
|
+
// const simpleRule = Rule.when("age").gte(18).build();
|
|
168
|
+
// // Esempio 2: Regola con AND
|
|
169
|
+
// const andRule = Rule.when("age").gte(18).and("email").isNotEmpty().build();
|
|
170
|
+
// // Esempio 3: Regola con OR
|
|
171
|
+
// const orRule = Rule.when("email").isNotEmpty().or("phone").isNotEmpty().build();
|
|
172
|
+
// // Esempio 4: Gruppo di regole
|
|
173
|
+
// const group1 = RuleGroupBuilder.and()
|
|
174
|
+
// .add(Rule.when("age").gte(18).build())
|
|
175
|
+
// .addGroup(
|
|
176
|
+
// new RuleGroupBuilder("or")
|
|
177
|
+
// .add(Rule.when("email").isNotEmpty().build())
|
|
178
|
+
// .add(Rule.when("phone").isNotEmpty().build())
|
|
179
|
+
// .build()
|
|
180
|
+
// )
|
|
181
|
+
// .build();
|
|
182
|
+
// // Esempio 5: Utilizzo alternativo con addRule
|
|
183
|
+
// const group2 = new RuleGroupBuilder("and")
|
|
184
|
+
// .addRule(Rule => Rule.when("age").gte(18).build())
|
|
185
|
+
// .addRule(Rule => Rule.when("status").eq("active").build())
|
|
186
|
+
// .build();
|
|
187
|
+
// // Esempio 6: Regole complesse
|
|
188
|
+
// const complexRule = Rule.when("user.role").eq("admin")
|
|
189
|
+
// .or("user.permissions").contains("read")
|
|
190
|
+
// .and("user.status").eq("active")
|
|
191
|
+
// .and("user.lastLogin").dateAfter("2024-01-01")
|
|
192
|
+
// .build();
|
|
193
|
+
// console.log("Simple rule:", JSON.stringify(simpleRule, null, 2));
|
|
194
|
+
// console.log("AND rule:", JSON.stringify(andRule, null, 2));
|
|
195
|
+
// console.log("OR rule:", JSON.stringify(orRule, null, 2));
|
|
196
|
+
// console.log("Group 1:", JSON.stringify(group1, null, 2));
|
|
197
|
+
// console.log("Complex rule:", JSON.stringify(complexRule, null, 2));
|
|
198
|
+
//# sourceMappingURL=modern-rule-builder-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modern-rule-builder-engine.js","sourceRoot":"","sources":["../src/modern-rule-builder-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { RulesLogic } from "json-logic-js";
|
|
2
|
+
export declare class RuleBuilder {
|
|
3
|
+
static group: {
|
|
4
|
+
and: (...args: RulesLogic[]) => RulesLogic;
|
|
5
|
+
or: (...args: RulesLogic[]) => RulesLogic;
|
|
6
|
+
not: (arg: RulesLogic) => RulesLogic;
|
|
7
|
+
};
|
|
8
|
+
static value: {
|
|
9
|
+
var: (key: string) => RulesLogic;
|
|
10
|
+
eq: (key: string, b: any) => RulesLogic;
|
|
11
|
+
neq: (key: string, b: any) => RulesLogic;
|
|
12
|
+
gt: (key: string, b: any) => RulesLogic;
|
|
13
|
+
gte: (key: string, b: any) => RulesLogic;
|
|
14
|
+
lt: (key: string, b: any) => RulesLogic;
|
|
15
|
+
lte: (key: string, b: any) => RulesLogic;
|
|
16
|
+
in: (key: string, array: any[]) => RulesLogic;
|
|
17
|
+
lengthEquals: (key: string, length: number) => RulesLogic;
|
|
18
|
+
isEmpty: (key: string) => RulesLogic;
|
|
19
|
+
isNotEmpty: (key: string) => RulesLogic;
|
|
20
|
+
isTrue: (key: string) => RulesLogic;
|
|
21
|
+
isFalse: (key: string) => RulesLogic;
|
|
22
|
+
startsWith: (key: string, prefix: string) => RulesLogic;
|
|
23
|
+
contains: (key: string, value: string) => RulesLogic;
|
|
24
|
+
endsWith: (key: string, suffix: string) => RulesLogic;
|
|
25
|
+
dateAfter: (key: string, date: string) => RulesLogic;
|
|
26
|
+
dateBefore: (key: string, date: string) => RulesLogic;
|
|
27
|
+
truthy: (key: string) => RulesLogic;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=rule-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-builder.d.ts","sourceRoot":"","sources":["../src/rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAE,MAAM,eAAe,CAAA;AASzD,qBAAa,WAAW;IACpB,MAAM,CAAC,KAAK;uBACO,UAAU,EAAE,KAAG,UAAU;sBAC1B,UAAU,EAAE,KAAG,UAAU;mBAC5B,UAAU,KAAG,UAAU;MACrC;IAED,MAAM,CAAC,KAAK;mBAEG,MAAM,KAAG,UAAU;kBAGpB,MAAM,KAAK,GAAG,KAAG,UAAU;mBAC1B,MAAM,KAAK,GAAG,KAAG,UAAU;kBAC5B,MAAM,KAAK,GAAG,KAAG,UAAU;mBAC1B,MAAM,KAAK,GAAG,KAAG,UAAU;kBAC5B,MAAM,KAAK,GAAG,KAAG,UAAU;mBAC1B,MAAM,KAAK,GAAG,KAAG,UAAU;kBAG5B,MAAM,SAAS,GAAG,EAAE,KAAG,UAAU;4BACvB,MAAM,UAAU,MAAM,KAAG,UAAU;uBAKxC,MAAM,KAAG,UAAU;0BAOhB,MAAM,KAAG,UAAU;sBAQvB,MAAM,KAAG,UAAU;uBAClB,MAAM,KAAG,UAAU;0BAGhB,MAAM,UAAU,MAAM,KAAG,UAAU;wBAGrC,MAAM,SAAS,MAAM,KAAG,UAAU;wBAGlC,MAAM,UAAU,MAAM,KAAG,UAAU;yBAQlC,MAAM,QAAQ,MAAM,KAAG,UAAU;0BAMhC,MAAM,QAAQ,MAAM,KAAG,UAAU;sBAKrC,MAAM,KAAG,UAAU;MACpC;CACJ"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RuleBuilder = void 0;
|
|
4
|
+
const json_logic_js_1 = require("json-logic-js");
|
|
5
|
+
const startsWith = (text, prefix) => text.startsWith(prefix);
|
|
6
|
+
const endsWith = (text, suffix) => text.endsWith(suffix);
|
|
7
|
+
(0, json_logic_js_1.add_operation)("startsWith", startsWith);
|
|
8
|
+
(0, json_logic_js_1.add_operation)("endsWith", endsWith);
|
|
9
|
+
class RuleBuilder {
|
|
10
|
+
}
|
|
11
|
+
exports.RuleBuilder = RuleBuilder;
|
|
12
|
+
RuleBuilder.group = {
|
|
13
|
+
and: (...args) => ({ and: args }),
|
|
14
|
+
or: (...args) => ({ or: args }),
|
|
15
|
+
not: (arg) => ({ '!': arg }),
|
|
16
|
+
};
|
|
17
|
+
RuleBuilder.value = {
|
|
18
|
+
// Variabili
|
|
19
|
+
var: (key) => ({ var: key }),
|
|
20
|
+
// Condizioni base
|
|
21
|
+
eq: (key, b) => ({ '===': [{ var: key }, b] }),
|
|
22
|
+
neq: (key, b) => ({ '!==': [{ var: key }, b] }),
|
|
23
|
+
gt: (key, b) => ({ '>': [{ var: key }, b] }),
|
|
24
|
+
gte: (key, b) => ({ '>=': [{ var: key }, b] }),
|
|
25
|
+
lt: (key, b) => ({ '<': [{ var: key }, b] }),
|
|
26
|
+
lte: (key, b) => ({ '<=': [{ var: key }, b] }),
|
|
27
|
+
// Array
|
|
28
|
+
in: (key, array) => ({ in: [{ var: key }, array] }),
|
|
29
|
+
lengthEquals: (key, length) => ({
|
|
30
|
+
'===': [{ 'var': key + '.length' }, length]
|
|
31
|
+
}),
|
|
32
|
+
// Valori
|
|
33
|
+
isEmpty: (key) => ({
|
|
34
|
+
or: [
|
|
35
|
+
{ '==': [{ var: key }, null] },
|
|
36
|
+
{ '==': [{ var: key }, undefined] },
|
|
37
|
+
{ '==': [{ var: key }, ''] }
|
|
38
|
+
]
|
|
39
|
+
}),
|
|
40
|
+
isNotEmpty: (key) => ({
|
|
41
|
+
and: [
|
|
42
|
+
{ '!==': [{ var: key }, null] },
|
|
43
|
+
{ '!==': [{ var: key }, undefined] },
|
|
44
|
+
{ '!==': [{ var: key }, ''] }
|
|
45
|
+
]
|
|
46
|
+
}),
|
|
47
|
+
isTrue: (key) => ({ '===': [{ var: key }, true] }),
|
|
48
|
+
isFalse: (key) => ({ '===': [{ var: key }, false] }),
|
|
49
|
+
// Stringhe
|
|
50
|
+
startsWith: (key, prefix) => ({
|
|
51
|
+
'startsWith': [{ var: key }, prefix]
|
|
52
|
+
}),
|
|
53
|
+
contains: (key, value) => ({
|
|
54
|
+
in: [value, { var: key }]
|
|
55
|
+
}),
|
|
56
|
+
endsWith: (key, suffix) => ({
|
|
57
|
+
'endsWith': [{ var: key }, suffix]
|
|
58
|
+
}),
|
|
59
|
+
// Date (richiede valori ISO o timestamp)
|
|
60
|
+
/// <param @date>
|
|
61
|
+
/// ISO / timestamp format
|
|
62
|
+
/// </param>
|
|
63
|
+
dateAfter: (key, date) => ({
|
|
64
|
+
'>': [{ var: key }, date]
|
|
65
|
+
}),
|
|
66
|
+
/// <param @date>
|
|
67
|
+
/// ISO / timestamp format
|
|
68
|
+
/// </param>
|
|
69
|
+
dateBefore: (key, date) => ({
|
|
70
|
+
'<': [{ var: key }, date]
|
|
71
|
+
}),
|
|
72
|
+
// Alias
|
|
73
|
+
truthy: (key) => ({ var: key }),
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=rule-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-builder.js","sourceRoot":"","sources":["../src/rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FieldControlState, FieldDefinition, FormControlState } from './models/field-definition';
|
|
2
|
+
import { DependencyGraph } from './dependency-graph';
|
|
3
|
+
import { RulesLogic } from 'json-logic-js';
|
|
4
|
+
export declare class RuleEvaluator {
|
|
5
|
+
static evaluate(rule: RulesLogic | undefined, data: Record<string, any>): boolean;
|
|
6
|
+
static evaluateField: (field: FieldDefinition, formData: Record<string, any>) => FieldControlState;
|
|
7
|
+
static evaluateFields(fields: FieldDefinition[], formData: Record<string, any>): FormControlState;
|
|
8
|
+
static evaluateDependentsFields(sourceFieldId: string, otherFields: FieldDefinition[], formData: Record<string, any>, dependencyGraph: DependencyGraph): FormControlState;
|
|
9
|
+
static extractVarsFromRule(rule: RulesLogic): string[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=rule-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-evaluator.d.ts","sourceRoot":"","sources":["../src/rule-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGtD,qBAAa,aAAa;IAExB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAYjF,MAAM,CAAC,aAAa,GAClB,OAAO,eAAe,EACtB,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC5B,iBAAiB,CAoBnB;IAED,MAAM,CAAC,cAAc,CACnB,MAAM,EAAE,eAAe,EAAE,EACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,gBAAgB;IAQnB,MAAM,CAAC,wBAAwB,CAC7B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,eAAe,EAAE,EAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,eAAe,EAAE,eAAe,GAC/B,gBAAgB;IAMnB,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;CA+BvD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
var _a;
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.RuleEvaluator = void 0;
|
|
8
|
+
const json_logic_js_1 = __importDefault(require("json-logic-js"));
|
|
9
|
+
const rule_mapper_1 = require("./utility/rule-mapper");
|
|
10
|
+
class RuleEvaluator {
|
|
11
|
+
static evaluate(rule, data) {
|
|
12
|
+
if (!rule)
|
|
13
|
+
return true; // Se la regola è indefinita, ritorna true (o false, a seconda della logica desiderata)
|
|
14
|
+
try {
|
|
15
|
+
// Valida la regola con jsonLogic, se non è valida, restituirà undefined
|
|
16
|
+
const result = json_logic_js_1.default.apply(rule, data);
|
|
17
|
+
return result !== undefined ? !!result : false;
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
console.warn('Rule evaluation error:', err);
|
|
21
|
+
return false; // Restituisce false in caso di errore nell'applicazione della regola
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
static evaluateFields(fields, formData) {
|
|
25
|
+
const evaluated = {};
|
|
26
|
+
fields.forEach((field) => {
|
|
27
|
+
evaluated[field.id] = this.evaluateField(field, formData);
|
|
28
|
+
});
|
|
29
|
+
return evaluated;
|
|
30
|
+
}
|
|
31
|
+
static evaluateDependentsFields(sourceFieldId, otherFields, formData, dependencyGraph) {
|
|
32
|
+
const affectedFieldIds = dependencyGraph.getDependentFields(sourceFieldId);
|
|
33
|
+
return this.evaluateFields(otherFields.filter(field => affectedFieldIds.has(field.id)), formData);
|
|
34
|
+
}
|
|
35
|
+
static extractVarsFromRule(rule) {
|
|
36
|
+
const vars = [];
|
|
37
|
+
// Funzione ricorsiva che attraversa la regola JSON
|
|
38
|
+
const walk = (r) => {
|
|
39
|
+
if (typeof r !== 'object' || r === null)
|
|
40
|
+
return;
|
|
41
|
+
if (Array.isArray(r)) {
|
|
42
|
+
// Se è un array, esplora ogni elemento
|
|
43
|
+
r.forEach(walk);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
for (const key in r) {
|
|
47
|
+
if (key === 'var') {
|
|
48
|
+
// Se trova una variabile 'var', la aggiunge all'elenco
|
|
49
|
+
if (typeof r[key] === 'string') {
|
|
50
|
+
vars.push(r[key]);
|
|
51
|
+
}
|
|
52
|
+
else if (Array.isArray(r[key]) && typeof r[key][0] === 'string') {
|
|
53
|
+
vars.push(r[key][0]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Se la chiave non è 'var', continua a esplorare il valore
|
|
58
|
+
walk(r[key]);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Iniziamo l'esplorazione dalla regola
|
|
64
|
+
walk(rule);
|
|
65
|
+
return vars;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.RuleEvaluator = RuleEvaluator;
|
|
69
|
+
_a = RuleEvaluator;
|
|
70
|
+
RuleEvaluator.evaluateField = (field, formData) => {
|
|
71
|
+
const visible = field.visibleIf
|
|
72
|
+
? _a.evaluate(rule_mapper_1.RuleMapper.mapGroupToEngine(field.visibleIf), formData)
|
|
73
|
+
: true;
|
|
74
|
+
const required = field.requiredIf
|
|
75
|
+
? _a.evaluate(rule_mapper_1.RuleMapper.mapGroupToEngine(field.requiredIf), formData)
|
|
76
|
+
: false;
|
|
77
|
+
const disabled = field.disabledIf
|
|
78
|
+
? _a.evaluate(rule_mapper_1.RuleMapper.mapGroupToEngine(field.disabledIf), formData)
|
|
79
|
+
: false;
|
|
80
|
+
const readonly = field.readonlyIf
|
|
81
|
+
? _a.evaluate(rule_mapper_1.RuleMapper.mapGroupToEngine(field.readonlyIf), formData)
|
|
82
|
+
: false;
|
|
83
|
+
return {
|
|
84
|
+
visible,
|
|
85
|
+
disabled,
|
|
86
|
+
readonly,
|
|
87
|
+
required
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=rule-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-evaluator.js","sourceRoot":"","sources":["../src/rule-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-helper.d.ts","sourceRoot":"","sources":["../../src/utility/field-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,qBAAa,WAAW;IACpB,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,wBAAwB,EAAE;CAInF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FieldHelper = void 0;
|
|
4
|
+
class FieldHelper {
|
|
5
|
+
static getAvailableRuleTypes(field) {
|
|
6
|
+
var types = ["visibleIf", "disabledIf", "requiredIf", "readonlyIf"];
|
|
7
|
+
return types.filter(k => field[k] == undefined);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.FieldHelper = FieldHelper;
|
|
11
|
+
//# sourceMappingURL=field-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-helper.js","sourceRoot":"","sources":["../../src/utility/field-helper.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAW;IACpB,MAAM,CAAC,qBAAqB,CAAC,KAAsB;QAC/C,IAAI,KAAK,GAA+B,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;IACpD,CAAC;CACJ;AALD,kCAKC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FieldRuleGroupDefinition, FieldRuleNode } from "../models/group";
|
|
2
|
+
import { FieldRuleDefinition } from "../models/rule";
|
|
3
|
+
export declare class RuleHelper {
|
|
4
|
+
static isGroup(rule: FieldRuleNode): rule is FieldRuleGroupDefinition;
|
|
5
|
+
static getGroups(group: FieldRuleGroupDefinition): FieldRuleGroupDefinition[];
|
|
6
|
+
static getRules(group: FieldRuleGroupDefinition): FieldRuleDefinition[];
|
|
7
|
+
static findGroup(groupId: string, group: FieldRuleGroupDefinition): FieldRuleGroupDefinition | undefined;
|
|
8
|
+
static findRule(ruleId: string, group: FieldRuleGroupDefinition): FieldRuleDefinition | undefined;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=rule-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-helper.d.ts","sourceRoot":"","sources":["../../src/utility/rule-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,qBAAa,UAAU;IAEnB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,IAAI,wBAAwB;IAIrE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,EAAE;IAI7E,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,EAAE;IAIvE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,SAAS;IAaxG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,GAAG,SAAS;CAgBpG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RuleHelper = void 0;
|
|
4
|
+
class RuleHelper {
|
|
5
|
+
// Funzione privata per verificare se l'elemento è un gruppo
|
|
6
|
+
static isGroup(rule) {
|
|
7
|
+
return rule.rules !== undefined;
|
|
8
|
+
}
|
|
9
|
+
static getGroups(group) {
|
|
10
|
+
return group.rules.filter(r => this.isGroup(r));
|
|
11
|
+
}
|
|
12
|
+
static getRules(group) {
|
|
13
|
+
return group.rules.filter(r => !this.isGroup(r));
|
|
14
|
+
}
|
|
15
|
+
static findGroup(groupId, group) {
|
|
16
|
+
if (group.groupId === groupId)
|
|
17
|
+
return group;
|
|
18
|
+
for (const rule of group.rules) {
|
|
19
|
+
if (this.isGroup(rule)) {
|
|
20
|
+
const found = this.findGroup(groupId, rule);
|
|
21
|
+
if (found)
|
|
22
|
+
return found;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
;
|
|
28
|
+
static findRule(ruleId, group) {
|
|
29
|
+
// Verifica se qualche regola di questo gruppo ha l'ID richiesto
|
|
30
|
+
for (const rule of group.rules) {
|
|
31
|
+
if (!this.isGroup(rule) && rule.ruleId === ruleId) {
|
|
32
|
+
return rule;
|
|
33
|
+
}
|
|
34
|
+
// Se è un gruppo, eseguiamo la ricerca ricorsiva nelle sue regole
|
|
35
|
+
if (this.isGroup(rule)) {
|
|
36
|
+
const found = this.findRule(ruleId, rule);
|
|
37
|
+
if (found)
|
|
38
|
+
return found;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.RuleHelper = RuleHelper;
|
|
45
|
+
//# sourceMappingURL=rule-helper.js.map
|