@woltz/rich-domain 1.8.9 → 1.9.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 (65) hide show
  1. package/README.md +7 -6
  2. package/dist/cjs/constants.d.ts.map +1 -1
  3. package/dist/cjs/constants.js +1 -0
  4. package/dist/cjs/constants.js.map +1 -1
  5. package/dist/cjs/core/base-entity.d.ts +26 -0
  6. package/dist/cjs/core/base-entity.d.ts.map +1 -1
  7. package/dist/cjs/core/base-entity.js +128 -35
  8. package/dist/cjs/core/base-entity.js.map +1 -1
  9. package/dist/cjs/core/change-tracker.js +1 -1
  10. package/dist/cjs/core/change-tracker.js.map +1 -1
  11. package/dist/cjs/core/value-object.d.ts +9 -0
  12. package/dist/cjs/core/value-object.d.ts.map +1 -1
  13. package/dist/cjs/core/value-object.js +42 -8
  14. package/dist/cjs/core/value-object.js.map +1 -1
  15. package/dist/cjs/criteria.d.ts +1 -1
  16. package/dist/cjs/t.d.ts +2 -0
  17. package/dist/cjs/t.d.ts.map +1 -0
  18. package/dist/cjs/t.js +96 -0
  19. package/dist/cjs/t.js.map +1 -0
  20. package/dist/cjs/types/domain.d.ts +9 -0
  21. package/dist/cjs/types/domain.d.ts.map +1 -1
  22. package/dist/cjs/validation-error.d.ts +26 -4
  23. package/dist/cjs/validation-error.d.ts.map +1 -1
  24. package/dist/cjs/validation-error.js +45 -9
  25. package/dist/cjs/validation-error.js.map +1 -1
  26. package/dist/esm/constants.d.ts.map +1 -1
  27. package/dist/esm/constants.js +1 -0
  28. package/dist/esm/constants.js.map +1 -1
  29. package/dist/esm/core/base-entity.d.ts +26 -0
  30. package/dist/esm/core/base-entity.d.ts.map +1 -1
  31. package/dist/esm/core/base-entity.js +129 -36
  32. package/dist/esm/core/base-entity.js.map +1 -1
  33. package/dist/esm/core/change-tracker.js +1 -1
  34. package/dist/esm/core/change-tracker.js.map +1 -1
  35. package/dist/esm/core/value-object.d.ts +9 -0
  36. package/dist/esm/core/value-object.d.ts.map +1 -1
  37. package/dist/esm/core/value-object.js +43 -9
  38. package/dist/esm/core/value-object.js.map +1 -1
  39. package/dist/esm/criteria.d.ts +1 -1
  40. package/dist/esm/t.d.ts +2 -0
  41. package/dist/esm/t.d.ts.map +1 -0
  42. package/dist/esm/t.js +94 -0
  43. package/dist/esm/t.js.map +1 -0
  44. package/dist/esm/types/domain.d.ts +9 -0
  45. package/dist/esm/types/domain.d.ts.map +1 -1
  46. package/dist/esm/validation-error.d.ts +26 -4
  47. package/dist/esm/validation-error.d.ts.map +1 -1
  48. package/dist/esm/validation-error.js +43 -8
  49. package/dist/esm/validation-error.js.map +1 -1
  50. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  51. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  52. package/dist/tsconfig.types.tsbuildinfo +1 -1
  53. package/dist/types/constants.d.ts.map +1 -1
  54. package/dist/types/core/base-entity.d.ts +26 -0
  55. package/dist/types/core/base-entity.d.ts.map +1 -1
  56. package/dist/types/core/value-object.d.ts +9 -0
  57. package/dist/types/core/value-object.d.ts.map +1 -1
  58. package/dist/types/criteria.d.ts +1 -1
  59. package/dist/types/t.d.ts +2 -0
  60. package/dist/types/t.d.ts.map +1 -0
  61. package/dist/types/types/domain.d.ts +9 -0
  62. package/dist/types/types/domain.d.ts.map +1 -1
  63. package/dist/types/validation-error.d.ts +26 -4
  64. package/dist/types/validation-error.d.ts.map +1 -1
  65. package/package.json +2 -6
@@ -10,9 +10,9 @@ function getStaticProperty(instance, propertyName) {
10
10
  class ValueObject {
11
11
  value;
12
12
  validationConfig;
13
- // @ts-expect-error - This is a private property
14
13
  domainHooks;
15
14
  domainSchema;
15
+ issueCollector = new validation_error_js_1.ValidationIssueCollector();
16
16
  static validation;
17
17
  static hooks;
18
18
  constructor(value) {
@@ -34,27 +34,61 @@ class ValueObject {
34
34
  }
35
35
  this.value = value;
36
36
  if (hooks?.rules) {
37
- hooks.rules(this);
37
+ this.runRulesHook();
38
38
  }
39
39
  Object.freeze(this);
40
40
  }
41
+ /**
42
+ * Add a validation issue during rules hook execution (non-throwing mode).
43
+ */
44
+ addValidationIssue(path, message) {
45
+ this.issueCollector.add(path, message);
46
+ }
47
+ beginValidationCycle() {
48
+ this.issueCollector.clear();
49
+ }
50
+ finalizeValidation(collectedIssues = []) {
51
+ const existing = this._validationError;
52
+ const merged = validation_error_js_1.ValidationError.merge(existing, collectedIssues);
53
+ if (!merged) {
54
+ delete this._validationError;
55
+ return;
56
+ }
57
+ if (this.validationConfig.throwOnError) {
58
+ throw merged;
59
+ }
60
+ this._validationError = merged;
61
+ }
62
+ runRulesHook() {
63
+ if (!this.domainHooks?.rules)
64
+ return;
65
+ this.beginValidationCycle();
66
+ this.domainHooks.rules(this);
67
+ this.finalizeValidation([...this.issueCollector.getIssues()]);
68
+ }
41
69
  validateValue(value) {
42
- if (!this.domainSchema)
70
+ const schemaError = this.validateSchema(value);
71
+ if (!schemaError)
43
72
  return;
73
+ if (this.validationConfig.throwOnError) {
74
+ throw schemaError;
75
+ }
76
+ this._validationError = schemaError;
77
+ }
78
+ validateSchema(value) {
79
+ if (!this.domainSchema)
80
+ return null;
44
81
  const result = this.domainSchema["~standard"].validate(value);
45
82
  if (result instanceof Promise) {
46
83
  throw new exceptions_js_1.DomainError("Async validation not supported in constructor. Use sync validation schema.");
47
84
  }
48
85
  if (result.issues && result.issues.length > 0) {
49
- const validationError = new validation_error_js_1.ValidationError(result.issues.map((issue) => ({
86
+ return new validation_error_js_1.ValidationError(result.issues.map((issue) => ({
50
87
  path: issue.path?.map((p) => this.extractPathKey(p)) || [],
51
88
  message: issue.message,
52
89
  })));
53
- if (this.validationConfig.throwOnError) {
54
- throw validationError;
55
- }
56
- this._validationError = validationError;
57
90
  }
91
+ return null;
58
92
  }
59
93
  extractPathKey(pathSegment) {
60
94
  if (pathSegment === null || pathSegment === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"value-object.js","sourceRoot":"","sources":["../../../src/core/value-object.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"value-object.js","sourceRoot":"","sources":["../../../src/core/value-object.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export declare class Criteria<T = any> {
37
37
  toJSON(): {
38
38
  filters: {
39
39
  field: FieldPath<T>;
40
- operator: "equals" | "notEquals" | "greaterThan" | "greaterThanOrEqual" | "lessThan" | "lessThanOrEqual" | "contains" | "startsWith" | "endsWith" | "in" | "notIn" | "between" | "isNull" | "isNotNull";
40
+ operator: "in" | "notIn" | "isNull" | "isNotNull" | "equals" | "notEquals" | "greaterThan" | "greaterThanOrEqual" | "lessThan" | "lessThanOrEqual" | "between" | "contains" | "startsWith" | "endsWith";
41
41
  value: any;
42
42
  options: CriteriaOptions | undefined;
43
43
  }[];
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=t.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"t.d.ts","sourceRoot":"","sources":["../../src/t.ts"],"names":[],"mappings":""}
package/dist/cjs/t.js ADDED
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const zod_1 = require("zod");
4
+ const core_1 = require("./core");
5
+ const AddressSchema = zod_1.z.object({
6
+ id: zod_1.z.instanceof(core_1.Id),
7
+ rua: zod_1.z.string(),
8
+ });
9
+ class Address extends core_1.Entity {
10
+ static validation = {
11
+ schema: AddressSchema,
12
+ };
13
+ changeRua(rua) {
14
+ this.props.rua = rua;
15
+ }
16
+ }
17
+ class Role extends core_1.ValueObject {
18
+ }
19
+ const UserSchema = zod_1.z.object({
20
+ id: zod_1.z.instanceof(core_1.Id),
21
+ name: zod_1.z.string().min(3),
22
+ email: zod_1.z.string().email(),
23
+ password: zod_1.z.string(),
24
+ address: zod_1.z.instanceof(Address).optional(),
25
+ role: zod_1.z.instanceof(Role),
26
+ age: zod_1.z.number().int().gte(18),
27
+ });
28
+ function generatePasswordRandom() {
29
+ return Math.random() + "oi";
30
+ }
31
+ class User extends core_1.Aggregate {
32
+ static validation = {
33
+ schema: UserSchema,
34
+ config: {
35
+ throwOnError: false,
36
+ },
37
+ };
38
+ static hooks = {
39
+ onBeforeCreate: (props) => {
40
+ if (!props.password) {
41
+ props.password = generatePasswordRandom();
42
+ }
43
+ },
44
+ rules: (entity) => {
45
+ if (entity.age > 90) {
46
+ entity.addValidationIssue("age", "Idade nao pode passar de 90 anos.");
47
+ }
48
+ },
49
+ onCreate: (entity) => {
50
+ if (entity.isNew()) {
51
+ // entity.addDomainEvent(UserCreatedEvent)
52
+ }
53
+ console.log(`Criei um user, é novo?: ${entity.isNew()}`);
54
+ },
55
+ };
56
+ get age() {
57
+ return this.props.age;
58
+ }
59
+ changeAge(newAge) {
60
+ this.props.age = newAge;
61
+ }
62
+ changeName(newName) {
63
+ this.props.name = newName;
64
+ }
65
+ get address() {
66
+ return this.props.address;
67
+ }
68
+ changeRole(role) {
69
+ this.props.role = role;
70
+ }
71
+ removeAddress() {
72
+ if (this.props.address) {
73
+ delete this.props.address;
74
+ }
75
+ }
76
+ }
77
+ const id = new core_1.Id().value;
78
+ const tarcisio = new User({
79
+ id: new core_1.Id(id),
80
+ age: 27,
81
+ email: "root@root.com",
82
+ name: "Tarcisio Andrade",
83
+ address: new Address({
84
+ rua: "Segunda Ligação",
85
+ }),
86
+ role: new Role("Admin"),
87
+ });
88
+ tarcisio.changeAge(91);
89
+ tarcisio.changeName("22");
90
+ tarcisio.changeRole(new Role("User"));
91
+ tarcisio.removeAddress();
92
+ if (tarcisio.hasValidationErrors) {
93
+ console.log(tarcisio.validationErrors.getFormattedErrors());
94
+ }
95
+ console.log(tarcisio.toJSON());
96
+ //# sourceMappingURL=t.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"t.js","sourceRoot":"","sources":["../../src/t.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,18 @@ export interface EntityHooks<T extends BaseProps, E> {
20
20
  rules?: (entity: E) => void;
21
21
  }
22
22
  export interface ValidationConfig {
23
+ /** When true, validates the entity on creation. Default: true */
23
24
  onCreate?: boolean;
25
+ /** When true, validates the entity on update. Default: true */
24
26
  onUpdate?: boolean;
27
+ /** When true, throws a ValidationError when validation fails. Default: true */
25
28
  throwOnError?: boolean;
29
+ /**
30
+ * When `throwOnError` is `false`, controls whether invalid updates are kept on the entity.
31
+ * - `true` (default): apply mutations and refresh `validationErrors` (dirty / form mode).
32
+ * - `false`: block mutations when errors already exist, and revert updates that fail validation.
33
+ */
34
+ persistInvalidMutations?: boolean;
26
35
  }
27
36
  export {};
28
37
  //# sourceMappingURL=domain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/types/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,EAAE,CAAC;CACR;AAED,UAAU,gBAAgB,CAAC,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACtD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAElD,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,EAAE;IAC5B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/types/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,EAAE,CAAC;CACR;AAED,UAAU,gBAAgB,CAAC,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACtD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAElD,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,EAAE;IAC5B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC"}
@@ -2,6 +2,20 @@ export interface ValidationIssue {
2
2
  path: string[];
3
3
  message: string;
4
4
  }
5
+ export type FormattedValidationError = {
6
+ path: string;
7
+ message: string;
8
+ };
9
+ export declare class ValidationIssueCollector {
10
+ private issues;
11
+ add(path: string | string[], message: string): void;
12
+ getIssues(): readonly ValidationIssue[];
13
+ hasIssues(): boolean;
14
+ clear(): void;
15
+ toValidationError(options?: {
16
+ entityName?: string;
17
+ }): ValidationError | undefined;
18
+ }
5
19
  export declare class ValidationError extends Error {
6
20
  readonly issues: ValidationIssue[];
7
21
  readonly __isValidationError = true;
@@ -10,7 +24,15 @@ export declare class ValidationError extends Error {
10
24
  message?: string;
11
25
  entityName?: string;
12
26
  });
27
+ static fromIssues(issues: ValidationIssue[], options?: {
28
+ message?: string;
29
+ entityName?: string;
30
+ }): ValidationError;
31
+ static merge(existing: ValidationError | undefined, extra: ValidationIssue[], options?: {
32
+ entityName?: string;
33
+ }): ValidationError | undefined;
13
34
  private static formatMessage;
35
+ private static normalizePath;
14
36
  /**
15
37
  * Check if an error is a ValidationError (works across module boundaries)
16
38
  */
@@ -22,11 +44,11 @@ export declare class ValidationError extends Error {
22
44
  /**
23
45
  * Get errors for a specific field path
24
46
  */
25
- getErrorsForPath(path: string): ValidationIssue[];
47
+ getErrorsForPath(path: string | string[]): ValidationIssue[];
26
48
  /**
27
49
  * Check if a specific path has errors
28
50
  */
29
- hasErrorsForPath(path: string): boolean;
51
+ hasErrorsForPath(path: string | string[]): boolean;
30
52
  /**
31
53
  * Convert to a plain object for serialization
32
54
  */
@@ -37,9 +59,9 @@ export declare class ValidationError extends Error {
37
59
  entityName?: string;
38
60
  };
39
61
  /**
40
- * Get a formatted string with all validation errors
62
+ * Get validation errors formatted for UI/API consumption
41
63
  */
42
- getFormattedErrors(): string;
64
+ getFormattedErrors(): FormattedValidationError[];
43
65
  /**
44
66
  * Get a summary of the error for logging
45
67
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validation-error.d.ts","sourceRoot":"","sources":["../../src/validation-error.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1C,SAAgB,mBAAmB,QAAQ;IAC3C,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGlC,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAerD,OAAO,CAAC,MAAM,CAAC,aAAa;IA4B5B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe;IAYlE;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;IAIjD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,MAAM,IAAI;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IASD;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAU5B;;OAEG;IACH,UAAU,IAAI,MAAM;CAarB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,eAAe,CAKjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,KAAK,CAEP"}
1
+ {"version":3,"file":"validation-error.d.ts","sourceRoot":"","sources":["../../src/validation-error.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAyB;IAEvC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAInD,SAAS,IAAI,SAAS,eAAe,EAAE;IAIvC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,IAAI;IAIb,iBAAiB,CAAC,OAAO,CAAC,EAAE;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,eAAe,GAAG,SAAS;CAMhC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1C,SAAgB,mBAAmB,QAAQ;IAC3C,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGlC,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAerD,MAAM,CAAC,UAAU,CACf,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAClD,eAAe;IAIlB,MAAM,CAAC,KAAK,CACV,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,eAAe,GAAG,SAAS;IAW9B,OAAO,CAAC,MAAM,CAAC,aAAa;IA4B5B,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe;IAYlE;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,eAAe,EAAE;IAK5D;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAIlD;;OAEG;IACH,MAAM,IAAI;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IASD;;OAEG;IACH,kBAAkB,IAAI,wBAAwB,EAAE;IAOhD;;OAEG;IACH,UAAU,IAAI,MAAM;CAarB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,eAAe,CAKjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,KAAK,CAEP"}
@@ -1,8 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValidationError = void 0;
3
+ exports.ValidationError = exports.ValidationIssueCollector = void 0;
4
4
  exports.createValidationIssue = createValidationIssue;
5
5
  exports.throwValidationError = throwValidationError;
6
+ class ValidationIssueCollector {
7
+ issues = [];
8
+ add(path, message) {
9
+ this.issues.push(createValidationIssue(path, message));
10
+ }
11
+ getIssues() {
12
+ return this.issues;
13
+ }
14
+ hasIssues() {
15
+ return this.issues.length > 0;
16
+ }
17
+ clear() {
18
+ this.issues = [];
19
+ }
20
+ toValidationError(options) {
21
+ if (!this.hasIssues()) {
22
+ return undefined;
23
+ }
24
+ return new ValidationError([...this.issues], options);
25
+ }
26
+ }
27
+ exports.ValidationIssueCollector = ValidationIssueCollector;
6
28
  class ValidationError extends Error {
7
29
  issues;
8
30
  __isValidationError = true;
@@ -18,6 +40,18 @@ class ValidationError extends Error {
18
40
  Error.captureStackTrace(this, ValidationError);
19
41
  }
20
42
  }
43
+ static fromIssues(issues, options) {
44
+ return new ValidationError(issues, options);
45
+ }
46
+ static merge(existing, extra, options) {
47
+ if (!existing && extra.length === 0) {
48
+ return undefined;
49
+ }
50
+ const allIssues = [...(existing?.issues ?? []), ...extra];
51
+ return new ValidationError(allIssues, {
52
+ entityName: options?.entityName ?? existing?.entityName,
53
+ });
54
+ }
21
55
  static formatMessage(issues, entityName) {
22
56
  const entityPrefix = entityName ? `[${entityName}] ` : "";
23
57
  if (issues.length === 0) {
@@ -36,6 +70,9 @@ class ValidationError extends Error {
36
70
  .join("\n");
37
71
  return `${entityPrefix}Validation failed with ${issues.length} error(s):\n${errorLines}`;
38
72
  }
73
+ static normalizePath(path) {
74
+ return Array.isArray(path) ? path.join(".") : path;
75
+ }
39
76
  /**
40
77
  * Check if an error is a ValidationError (works across module boundaries)
41
78
  */
@@ -58,7 +95,8 @@ class ValidationError extends Error {
58
95
  * Get errors for a specific field path
59
96
  */
60
97
  getErrorsForPath(path) {
61
- return this.issues.filter((i) => i.path.join(".") === path);
98
+ const normalized = ValidationError.normalizePath(path);
99
+ return this.issues.filter((i) => i.path.join(".") === normalized);
62
100
  }
63
101
  /**
64
102
  * Check if a specific path has errors
@@ -78,15 +116,13 @@ class ValidationError extends Error {
78
116
  };
79
117
  }
80
118
  /**
81
- * Get a formatted string with all validation errors
119
+ * Get validation errors formatted for UI/API consumption
82
120
  */
83
121
  getFormattedErrors() {
84
- return this.issues
85
- .map((issue) => {
86
- const pathStr = issue.path.length > 0 ? ` [${issue.path.join(".")}]` : "";
87
- return `${pathStr} ${issue.message}`;
88
- })
89
- .join("\n");
122
+ return this.issues.map((issue) => ({
123
+ path: issue.path.length > 0 ? issue.path.join(".") : "",
124
+ message: issue.message,
125
+ }));
90
126
  }
91
127
  /**
92
128
  * Get a summary of the error for logging
@@ -1 +1 @@
1
- {"version":3,"file":"validation-error.js","sourceRoot":"","sources":["../../src/validation-error.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-error.js","sourceRoot":"","sources":["../../src/validation-error.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,GAAG,CAAC;AAEX,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,gBAAgB,CAIhE,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,EAK3C,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAK/C,CAAC;AACF,eAAO,MAAM,cAAc,EAAE,aAAa,EAYzC,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAY7C,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAU7C,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAe5C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,GAAG,CAAC;AAEX,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,gBAAgB,CAKhE,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,EAK3C,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAK/C,CAAC;AACF,eAAO,MAAM,cAAc,EAAE,aAAa,EAYzC,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAY7C,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAU7C,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAe5C,CAAC"}
@@ -2,6 +2,7 @@ export const DEFAULT_VALIDATION_CONFIG = {
2
2
  onCreate: true,
3
3
  onUpdate: true,
4
4
  throwOnError: true,
5
+ persistInvalidMutations: true,
5
6
  };
6
7
  export const ARRAY_OPERATORS = [
7
8
  "in",
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,yBAAyB,GAA+B;IACnE,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,QAAQ;IACR,WAAW;IACX,aAAa;IACb,oBAAoB;IACpB,UAAU;IACV,iBAAiB;IACjB,IAAI;IACJ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,QAAQ;IACR,WAAW;IACX,aAAa;IACb,oBAAoB;IACpB,UAAU;IACV,iBAAiB;IACjB,IAAI;IACJ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,QAAQ;IACR,WAAW;IACX,UAAU;IACV,YAAY;IACZ,UAAU;IACV,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,QAAQ;IACR,WAAW;IACX,aAAa;IACb,oBAAoB;IACpB,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,YAAY;IACZ,UAAU;IACV,IAAI;IACJ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,WAAW;CACZ,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,yBAAyB,GAA+B;IACnE,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,QAAQ;IACR,WAAW;IACX,aAAa;IACb,oBAAoB;IACpB,UAAU;IACV,iBAAiB;IACjB,IAAI;IACJ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,QAAQ;IACR,WAAW;IACX,aAAa;IACb,oBAAoB;IACpB,UAAU;IACV,iBAAiB;IACjB,IAAI;IACJ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,QAAQ;IACR,WAAW;IACX,UAAU;IACV,YAAY;IACZ,UAAU;IACV,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,WAAW;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,QAAQ;IACR,WAAW;IACX,aAAa;IACb,oBAAoB;IACpB,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,YAAY;IACZ,UAAU;IACV,IAAI;IACJ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,WAAW;CACZ,CAAC"}
@@ -9,12 +9,38 @@ export declare abstract class BaseEntity<T extends BaseProps, TOptionalInput ext
9
9
  private validationConfig;
10
10
  private entityHooks?;
11
11
  private entitySchema?;
12
+ private readonly issueCollector;
12
13
  protected static validation?: EntityValidation<any>;
13
14
  protected static hooks?: EntityHooks<any, any>;
14
15
  constructor(props: Omit<T, TOptionalInput | "id"> & Partial<Pick<T, TOptionalInput>> & {
15
16
  id?: Id;
16
17
  });
18
+ /**
19
+ * Add a validation issue during rules hook execution (non-throwing mode).
20
+ */
21
+ addValidationIssue(path: string | string[], message: string): void;
22
+ private beginValidationCycle;
23
+ private finalizeValidation;
24
+ private runRulesHook;
17
25
  private validateProps;
26
+ private validateSchema;
27
+ private handleValidationFailure;
28
+ private clearValidationError;
29
+ /**
30
+ * Validates the full current props (schema + rules). Used on updates when
31
+ * throwOnError is false so validationErrors reflects every invalid field.
32
+ */
33
+ private collectCurrentValidationIssues;
34
+ /**
35
+ * @returns true when the entity has no validation issues after refresh
36
+ */
37
+ private refreshValidationStateFromCurrentProps;
38
+ /**
39
+ * When true, failed schema/rules updates keep the mutated value and refresh
40
+ * validationErrors (dirty / form mode). Requires throwOnError: false and
41
+ * persistInvalidMutations: true.
42
+ */
43
+ private shouldPersistInvalidMutation;
18
44
  private extractPathKey;
19
45
  /**
20
46
  * Setup validation that runs on every property change.
@@ -1 +1 @@
1
- {"version":3,"file":"base-entity.d.ts","sourceRoot":"","sources":["../../../src/core/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EAGX,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAiB,gBAAgB,EAAE,EAAE,EAAe,MAAM,SAAS,CAAC;AAwC3E,8BAAsB,UAAU,CAC9B,CAAC,SAAS,SAAS,EACnB,cAAc,SAAS,MAAM,CAAC,GAAG,KAAK;IAEtC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,WAAW,CAAC,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAoB;IAEzC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAG7C,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,EAAE,CAAA;KAAE;IAsDlD,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA4E7B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAkDtB,IAAI,EAAE,IAAI,EAAE,CAEX;IAEM,KAAK,IAAI,OAAO;IAIvB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,OAAO;IAoBnD,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,eAAe,GAAG,SAAS,CAElD;IAED;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,gBAAgB,CAAC,UAAU,CAAC;IAI5E;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;;OAGG;IACH,WAAW,IAAI,IAAI;IAMnB;;;;OAIG;IACH,eAAe,IAAI,IAAI;IAOvB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAgB3B,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IAI3B,OAAO,CAAC,UAAU;CAiBnB"}
1
+ {"version":3,"file":"base-entity.d.ts","sourceRoot":"","sources":["../../../src/core/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EAGX,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAiB,gBAAgB,EAAE,EAAE,EAAe,MAAM,SAAS,CAAC;AAwC3E,8BAAsB,UAAU,CAC9B,CAAC,SAAS,SAAS,EACnB,cAAc,SAAS,MAAM,CAAC,GAAG,KAAK;IAEtC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,WAAW,CAAC,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAG7C,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,EAAE,CAAA;KAAE;IAsDlD;;OAEG;IACI,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIzE,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAmBtC;;OAEG;IACH,OAAO,CAAC,sCAAsC;IAY9C;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAwE7B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAkDtB,IAAI,EAAE,IAAI,EAAE,CAEX;IAEM,KAAK,IAAI,OAAO;IAIvB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,OAAO;IAoBnD,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,eAAe,GAAG,SAAS,CAElD;IAED;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,gBAAgB,CAAC,UAAU,CAAC;IAI5E;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;;OAGG;IACH,WAAW,IAAI,IAAI;IAMnB;;;;OAIG;IACH,eAAe,IAAI,IAAI;IAOvB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAgB3B,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IAI3B,OAAO,CAAC,UAAU;CAiBnB"}