@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.
Files changed (58) hide show
  1. package/README.md +281 -0
  2. package/dist/dependency-graph.d.ts +14 -0
  3. package/dist/dependency-graph.d.ts.map +1 -0
  4. package/dist/dependency-graph.js +69 -0
  5. package/dist/dependency-graph.js.map +1 -0
  6. package/dist/index.d.ts +13 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +23 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/models/field-definition.d.ts +49 -0
  11. package/dist/models/field-definition.d.ts.map +1 -0
  12. package/dist/models/field-definition.js +3 -0
  13. package/dist/models/field-definition.js.map +1 -0
  14. package/dist/models/form-definition.d.ts +16 -0
  15. package/dist/models/form-definition.d.ts.map +1 -0
  16. package/dist/models/form-definition.js +3 -0
  17. package/dist/models/form-definition.js.map +1 -0
  18. package/dist/models/group.d.ts +12 -0
  19. package/dist/models/group.d.ts.map +1 -0
  20. package/dist/models/group.js +3 -0
  21. package/dist/models/group.js.map +1 -0
  22. package/dist/models/operator-registry.d.ts +21 -0
  23. package/dist/models/operator-registry.d.ts.map +1 -0
  24. package/dist/models/operator-registry.js +31 -0
  25. package/dist/models/operator-registry.js.map +1 -0
  26. package/dist/models/operators.d.ts +43 -0
  27. package/dist/models/operators.d.ts.map +1 -0
  28. package/dist/models/operators.js +29 -0
  29. package/dist/models/operators.js.map +1 -0
  30. package/dist/models/rule.d.ts +10 -0
  31. package/dist/models/rule.d.ts.map +1 -0
  32. package/dist/models/rule.js +3 -0
  33. package/dist/models/rule.js.map +1 -0
  34. package/dist/modern-rule-builder-engine.d.ts +46 -0
  35. package/dist/modern-rule-builder-engine.d.ts.map +1 -0
  36. package/dist/modern-rule-builder-engine.js +198 -0
  37. package/dist/modern-rule-builder-engine.js.map +1 -0
  38. package/dist/rule-builder.d.ts +30 -0
  39. package/dist/rule-builder.d.ts.map +1 -0
  40. package/dist/rule-builder.js +75 -0
  41. package/dist/rule-builder.js.map +1 -0
  42. package/dist/rule-evaluator.d.ts +11 -0
  43. package/dist/rule-evaluator.d.ts.map +1 -0
  44. package/dist/rule-evaluator.js +90 -0
  45. package/dist/rule-evaluator.js.map +1 -0
  46. package/dist/utility/field-helper.d.ts +5 -0
  47. package/dist/utility/field-helper.d.ts.map +1 -0
  48. package/dist/utility/field-helper.js +11 -0
  49. package/dist/utility/field-helper.js.map +1 -0
  50. package/dist/utility/rule-helper.d.ts +10 -0
  51. package/dist/utility/rule-helper.d.ts.map +1 -0
  52. package/dist/utility/rule-helper.js +45 -0
  53. package/dist/utility/rule-helper.js.map +1 -0
  54. package/dist/utility/rule-mapper.d.ts +11 -0
  55. package/dist/utility/rule-mapper.d.ts.map +1 -0
  56. package/dist/utility/rule-mapper.js +88 -0
  57. package/dist/utility/rule-mapper.js.map +1 -0
  58. 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
+ }