@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 @@
|
|
|
1
|
+
{"version":3,"file":"rule-helper.js","sourceRoot":"","sources":["../../src/utility/rule-helper.ts"],"names":[],"mappings":";;;AAGA,MAAa,UAAU;IACnB,4DAA4D;IAC5D,MAAM,CAAC,OAAO,CAAC,IAAmB;QAC9B,OAAQ,IAAiC,CAAC,KAAK,KAAK,SAAS,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA+B;QAC5C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAA+B,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,KAA+B;QAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAA0B,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAe,EAAE,KAA+B;QAC7D,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAAA,CAAC;IAEF,MAAM,CAAC,QAAQ,CAAC,MAAc,EAAE,KAA+B;QAC3D,gEAAgE;QAChE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAChD,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,kEAAkE;YAClE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AA3CD,gCA2CC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RulesLogic } from "json-logic-js";
|
|
2
|
+
import { FieldRuleGroupDefinition } from "../models/group";
|
|
3
|
+
import { FieldRuleDefinition } from "../models/rule";
|
|
4
|
+
export declare class RuleMapper {
|
|
5
|
+
static mapGroupToEngine(group: FieldRuleGroupDefinition): RulesLogic;
|
|
6
|
+
static mapGroupToCustom(group: FieldRuleGroupDefinition, callback: (group: FieldRuleGroupDefinition, mappedRules: RulesLogic[]) => RulesLogic): RulesLogic;
|
|
7
|
+
private static extractRulesFromGroup;
|
|
8
|
+
static mapRuleToEngine(rule: FieldRuleDefinition): RulesLogic;
|
|
9
|
+
static mapRuleToCustom(rule: FieldRuleDefinition, callback: (rule: FieldRuleDefinition, logic: RulesLogic) => RulesLogic): RulesLogic;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=rule-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-mapper.d.ts","sourceRoot":"","sources":["../../src/utility/rule-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD,qBAAa,UAAU;IAErB,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,GAAG,UAAU;IAmBpE,MAAM,CAAC,gBAAgB,CACrB,KAAK,EAAE,wBAAwB,EAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,UAAU,GACnF,UAAU;IAoBb,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAepC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,UAAU;IAoB7D,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,KAAK,UAAU,GACrE,UAAU;CAmBd"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RuleMapper = void 0;
|
|
4
|
+
const rule_helper_1 = require("./rule-helper");
|
|
5
|
+
const rule_builder_1 = require("../rule-builder");
|
|
6
|
+
class RuleMapper {
|
|
7
|
+
// Mappare il gruppo principale con tutte le regole e i gruppi annidati
|
|
8
|
+
static mapGroupToEngine(group) {
|
|
9
|
+
const groupedRules = this.extractRulesFromGroup(group);
|
|
10
|
+
// Se il gruppo contiene solo una regola, la mappiamo direttamente
|
|
11
|
+
if (groupedRules.length === 1) {
|
|
12
|
+
return groupedRules[0];
|
|
13
|
+
}
|
|
14
|
+
// Se ci sono più regole, combiniamo con l'operatore AND/OR
|
|
15
|
+
const engineGroup = rule_builder_1.RuleBuilder.group[group.operator];
|
|
16
|
+
const engineRule = engineGroup(...groupedRules);
|
|
17
|
+
if (group.not) {
|
|
18
|
+
return rule_builder_1.RuleBuilder.group.not(engineRule);
|
|
19
|
+
}
|
|
20
|
+
return engineRule;
|
|
21
|
+
}
|
|
22
|
+
;
|
|
23
|
+
static mapGroupToCustom(group, callback) {
|
|
24
|
+
const groupedRules = this.extractRulesFromGroup(group);
|
|
25
|
+
// Se il gruppo contiene solo una regola, la mappiamo direttamente
|
|
26
|
+
if (groupedRules.length === 1) {
|
|
27
|
+
return callback(group, groupedRules);
|
|
28
|
+
}
|
|
29
|
+
// Se ci sono più regole, combiniamo con l'operatore AND/OR
|
|
30
|
+
const engineGroup = rule_builder_1.RuleBuilder.group[group.operator];
|
|
31
|
+
const engineRule = engineGroup(...groupedRules);
|
|
32
|
+
if (group.not) {
|
|
33
|
+
return callback(group, [rule_builder_1.RuleBuilder.group.not(engineRule)]);
|
|
34
|
+
}
|
|
35
|
+
return callback(group, [engineRule]);
|
|
36
|
+
}
|
|
37
|
+
// Funzione privata per raccogliere le regole da un gruppo (incluso il supporto per gruppi annidati)
|
|
38
|
+
static extractRulesFromGroup(group) {
|
|
39
|
+
return group.rules.reduce((acc, rule) => {
|
|
40
|
+
// Se la regola è un gruppo annidato, applica ricorsivamente
|
|
41
|
+
if (rule_helper_1.RuleHelper.isGroup(rule)) {
|
|
42
|
+
acc.push(this.mapGroupToEngine(rule)); // Gruppo annidato
|
|
43
|
+
}
|
|
44
|
+
// Se è una regola normale e appartiene al gruppo, aggiungila
|
|
45
|
+
else {
|
|
46
|
+
acc.push(this.mapRuleToEngine(rule)); // Regola normale
|
|
47
|
+
}
|
|
48
|
+
return acc;
|
|
49
|
+
}, []);
|
|
50
|
+
}
|
|
51
|
+
// Mappatura di una singola regola
|
|
52
|
+
static mapRuleToEngine(rule) {
|
|
53
|
+
const engineRule = rule_builder_1.RuleBuilder.value[rule.operator];
|
|
54
|
+
let logic;
|
|
55
|
+
if (rule.operator == "var") {
|
|
56
|
+
const left = engineRule(rule.conditionFieldId, undefined);
|
|
57
|
+
const right = engineRule(rule.value, undefined);
|
|
58
|
+
logic = { "==": [left, right] };
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
logic = engineRule(rule.conditionFieldId, rule.value);
|
|
62
|
+
}
|
|
63
|
+
if (rule.not) {
|
|
64
|
+
return rule_builder_1.RuleBuilder.group.not(logic);
|
|
65
|
+
}
|
|
66
|
+
return logic;
|
|
67
|
+
}
|
|
68
|
+
// Mappatura di una singola regola con una funzione di callback
|
|
69
|
+
static mapRuleToCustom(rule, callback) {
|
|
70
|
+
const engineRule = rule_builder_1.RuleBuilder.value[rule.operator];
|
|
71
|
+
let logic;
|
|
72
|
+
if (rule.operator == "var") {
|
|
73
|
+
const left = engineRule(rule.conditionFieldId, undefined);
|
|
74
|
+
const right = engineRule(rule.value, undefined);
|
|
75
|
+
logic = { "==": [left, right] };
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
logic = engineRule(rule.conditionFieldId, rule.value);
|
|
79
|
+
}
|
|
80
|
+
if (rule.not) {
|
|
81
|
+
logic = rule_builder_1.RuleBuilder.group.not(logic);
|
|
82
|
+
}
|
|
83
|
+
// Applica la callback per il formato personalizzato
|
|
84
|
+
return callback(rule, logic);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.RuleMapper = RuleMapper;
|
|
88
|
+
//# sourceMappingURL=rule-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-mapper.js","sourceRoot":"","sources":["../../src/utility/rule-mapper.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@form-flow/core",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "TypeScript engine for conditional UI states (visible, required, disabled, readonly) on form fields",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"directories": {
|
|
8
|
+
"doc": "docs"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"dev": "ts-node src/index.ts",
|
|
15
|
+
"build": "tsc --build",
|
|
16
|
+
"test": "jest"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"typescript",
|
|
20
|
+
"form",
|
|
21
|
+
"validation",
|
|
22
|
+
"rules",
|
|
23
|
+
"ui-states"
|
|
24
|
+
],
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/amoretti-dev/form-flow-core.git"
|
|
28
|
+
},
|
|
29
|
+
"author": "",
|
|
30
|
+
"license": "ISC",
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"json-logic-js": "^2.0.5"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"json-logic-js": "^2.0.5"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@babel/parser": "^7.28.6",
|
|
39
|
+
"@types/jest": "^29.5.14",
|
|
40
|
+
"@types/json-logic-js": "^2.0.8",
|
|
41
|
+
"@types/node": "^22.15.17",
|
|
42
|
+
"jest": "^29.7.0",
|
|
43
|
+
"ts-jest": "^29.3.2",
|
|
44
|
+
"ts-node": "^10.9.2",
|
|
45
|
+
"typescript": "^5.8.3"
|
|
46
|
+
}
|
|
47
|
+
}
|