@woltz/rich-domain 0.2.2 → 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 (109) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +37 -20
  3. package/dist/base-entity.d.ts +1 -1
  4. package/dist/base-entity.d.ts.map +1 -1
  5. package/dist/base-entity.js +21 -15
  6. package/dist/base-entity.js.map +1 -1
  7. package/dist/constants.js +4 -1
  8. package/dist/constants.js.map +1 -1
  9. package/dist/criteria.d.ts.map +1 -1
  10. package/dist/criteria.js +7 -3
  11. package/dist/criteria.js.map +1 -1
  12. package/dist/deep-proxy.d.ts +3 -1
  13. package/dist/deep-proxy.d.ts.map +1 -1
  14. package/dist/deep-proxy.js +110 -33
  15. package/dist/deep-proxy.js.map +1 -1
  16. package/dist/domain-event-bus.js +7 -2
  17. package/dist/domain-event-bus.js.map +1 -1
  18. package/dist/domain-event.js +7 -3
  19. package/dist/domain-event.js.map +1 -1
  20. package/dist/entity.js +8 -3
  21. package/dist/entity.js.map +1 -1
  22. package/dist/id.d.ts +3 -3
  23. package/dist/id.d.ts.map +1 -1
  24. package/dist/id.js +10 -6
  25. package/dist/id.js.map +1 -1
  26. package/dist/index.d.ts +0 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +39 -17
  29. package/dist/index.js.map +1 -1
  30. package/dist/mapper.js +5 -1
  31. package/dist/mapper.js.map +1 -1
  32. package/dist/paginated-result.js +7 -3
  33. package/dist/paginated-result.js.map +1 -1
  34. package/dist/repository/base-repository.js +11 -4
  35. package/dist/repository/base-repository.js.map +1 -1
  36. package/dist/repository/in-memory-repository.js +8 -4
  37. package/dist/repository/in-memory-repository.js.map +1 -1
  38. package/dist/repository/index.d.ts +1 -37
  39. package/dist/repository/index.d.ts.map +1 -1
  40. package/dist/repository/index.js +26 -40
  41. package/dist/repository/index.js.map +1 -1
  42. package/dist/repository/unit-of-work.js +9 -3
  43. package/dist/repository/unit-of-work.js.map +1 -1
  44. package/dist/types/criteria.d.ts +2 -2
  45. package/dist/types/criteria.d.ts.map +1 -1
  46. package/dist/types/criteria.js +4 -1
  47. package/dist/types/criteria.js.map +1 -1
  48. package/dist/types/domain.js +2 -1
  49. package/dist/types/history-tracker.js +2 -1
  50. package/dist/types/index.js +22 -6
  51. package/dist/types/index.js.map +1 -1
  52. package/dist/types/standard-schema.js +2 -1
  53. package/dist/types/unit-of-work.js +2 -1
  54. package/dist/types/utils.js +2 -1
  55. package/dist/validation-error.js +9 -3
  56. package/dist/validation-error.js.map +1 -1
  57. package/dist/value-object.js +9 -5
  58. package/dist/value-object.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/base-entity.ts +3 -2
  61. package/src/criteria.ts +2 -2
  62. package/src/deep-proxy.ts +435 -339
  63. package/src/id.ts +4 -4
  64. package/src/index.ts +1 -3
  65. package/src/repository/index.ts +1 -38
  66. package/src/types/criteria.ts +2 -2
  67. package/tests/entity-validation.test.ts +1 -1
  68. package/tests/history-tracker.spec.ts +57 -17
  69. package/tests/id.test.ts +341 -341
  70. package/tests/repository.test.ts +4 -2
  71. package/tests/to-json.test.ts +103 -91
  72. package/tests/value-objects.test.ts +52 -52
  73. package/tsconfig.json +2 -2
  74. package/dist/filtering.d.ts +0 -107
  75. package/dist/filtering.d.ts.map +0 -1
  76. package/dist/filtering.js +0 -202
  77. package/dist/filtering.js.map +0 -1
  78. package/dist/ordering.d.ts +0 -93
  79. package/dist/ordering.d.ts.map +0 -1
  80. package/dist/ordering.js +0 -154
  81. package/dist/ordering.js.map +0 -1
  82. package/dist/pagination.d.ts +0 -218
  83. package/dist/pagination.d.ts.map +0 -1
  84. package/dist/pagination.js +0 -281
  85. package/dist/pagination.js.map +0 -1
  86. package/dist/repository/mapper.d.ts +0 -56
  87. package/dist/repository/mapper.d.ts.map +0 -1
  88. package/dist/repository/mapper.js +0 -15
  89. package/dist/repository/mapper.js.map +0 -1
  90. package/dist/repository/types.d.ts +0 -87
  91. package/dist/repository/types.d.ts.map +0 -1
  92. package/dist/repository/types.js +0 -6
  93. package/dist/repository/types.js.map +0 -1
  94. package/dist/repository.d.ts +0 -2
  95. package/dist/repository.d.ts.map +0 -1
  96. package/dist/repository.js +0 -21
  97. package/dist/repository.js.map +0 -1
  98. package/dist/specification.d.ts +0 -102
  99. package/dist/specification.d.ts.map +0 -1
  100. package/dist/specification.js +0 -187
  101. package/dist/specification.js.map +0 -1
  102. package/dist/types/repository.d.ts +0 -43
  103. package/dist/types/repository.d.ts.map +0 -1
  104. package/dist/types/repository.js +0 -2
  105. package/dist/types/repository.js.map +0 -1
  106. package/dist/types.d.ts +0 -88
  107. package/dist/types.d.ts.map +0 -1
  108. package/dist/types.js +0 -12
  109. package/dist/types.js.map +0 -1
@@ -1,187 +0,0 @@
1
- "use strict";
2
- // ============================================================================
3
- // Specification Pattern
4
- // ============================================================================
5
- // Implements the Specification pattern from Domain-Driven Design
6
- // Allows encapsulating business rules and composing them with AND/OR/NOT logic
7
- // Primarily for in-memory validation, but can be extended for persistence queries
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.PropertyInSpecification = exports.PropertyEqualsSpecification = exports.PredicateSpecification = exports.FalseSpecification = exports.TrueSpecification = exports.BaseSpecification = void 0;
10
- // ============================================================================
11
- // BaseSpecification Class
12
- // ============================================================================
13
- /**
14
- * Abstract base class for Specification pattern
15
- * Specifications encapsulate business rules and can be composed together
16
- *
17
- * @example
18
- * ```typescript
19
- * class AdultSpecification extends BaseSpecification<User> {
20
- * isSatisfiedBy(user: User): boolean {
21
- * return user.age >= 18;
22
- * }
23
- * }
24
- *
25
- * const spec = new AdultSpecification();
26
- * const adults = users.filter(u => spec.isSatisfiedBy(u));
27
- * ```
28
- */
29
- class BaseSpecification {
30
- /**
31
- * Combines this specification with another using AND logic
32
- * Both specifications must be satisfied
33
- */
34
- and(other) {
35
- return new AndSpecification(this, other);
36
- }
37
- /**
38
- * Combines this specification with another using OR logic
39
- * At least one specification must be satisfied
40
- */
41
- or(other) {
42
- return new OrSpecification(this, other);
43
- }
44
- /**
45
- * Negates this specification
46
- * Returns true if this specification is NOT satisfied
47
- */
48
- not() {
49
- return new NotSpecification(this);
50
- }
51
- /**
52
- * Creates a predicate function for use with Array.filter()
53
- */
54
- asPredicate() {
55
- return (entity) => this.isSatisfiedBy(entity);
56
- }
57
- }
58
- exports.BaseSpecification = BaseSpecification;
59
- // ============================================================================
60
- // Composite Specifications (Internal)
61
- // ============================================================================
62
- // These are created automatically by and(), or(), not() methods
63
- // Users typically don't instantiate these directly
64
- /**
65
- * AND specification - both specifications must be satisfied
66
- * @internal
67
- */
68
- class AndSpecification extends BaseSpecification {
69
- constructor(left, right) {
70
- super();
71
- this.left = left;
72
- this.right = right;
73
- }
74
- isSatisfiedBy(entity) {
75
- return this.left.isSatisfiedBy(entity) && this.right.isSatisfiedBy(entity);
76
- }
77
- }
78
- /**
79
- * OR specification - at least one specification must be satisfied
80
- * @internal
81
- */
82
- class OrSpecification extends BaseSpecification {
83
- constructor(left, right) {
84
- super();
85
- this.left = left;
86
- this.right = right;
87
- }
88
- isSatisfiedBy(entity) {
89
- return this.left.isSatisfiedBy(entity) || this.right.isSatisfiedBy(entity);
90
- }
91
- }
92
- /**
93
- * NOT specification - specification must NOT be satisfied
94
- * @internal
95
- */
96
- class NotSpecification extends BaseSpecification {
97
- constructor(spec) {
98
- super();
99
- this.spec = spec;
100
- }
101
- isSatisfiedBy(entity) {
102
- return !this.spec.isSatisfiedBy(entity);
103
- }
104
- }
105
- // ============================================================================
106
- // Common Specification Implementations
107
- // ============================================================================
108
- /**
109
- * Specification that is always satisfied
110
- * Useful as a starting point for building complex specifications
111
- */
112
- class TrueSpecification extends BaseSpecification {
113
- isSatisfiedBy(_entity) {
114
- return true;
115
- }
116
- }
117
- exports.TrueSpecification = TrueSpecification;
118
- /**
119
- * Specification that is never satisfied
120
- * Useful for testing or as a placeholder
121
- */
122
- class FalseSpecification extends BaseSpecification {
123
- isSatisfiedBy(_entity) {
124
- return false;
125
- }
126
- }
127
- exports.FalseSpecification = FalseSpecification;
128
- /**
129
- * Specification based on a predicate function
130
- * Allows creating specifications from lambda expressions
131
- *
132
- * @example
133
- * ```typescript
134
- * const adultSpec = new PredicateSpecification<User>(
135
- * user => user.age >= 18
136
- * );
137
- * ```
138
- */
139
- class PredicateSpecification extends BaseSpecification {
140
- constructor(predicate) {
141
- super();
142
- this.predicate = predicate;
143
- }
144
- isSatisfiedBy(entity) {
145
- return this.predicate(entity);
146
- }
147
- }
148
- exports.PredicateSpecification = PredicateSpecification;
149
- /**
150
- * Specification that checks if a property equals a specific value
151
- *
152
- * @example
153
- * ```typescript
154
- * const activeSpec = new PropertyEqualsSpecification<User>('status', 'active');
155
- * ```
156
- */
157
- class PropertyEqualsSpecification extends BaseSpecification {
158
- constructor(property, value) {
159
- super();
160
- this.property = property;
161
- this.value = value;
162
- }
163
- isSatisfiedBy(entity) {
164
- return entity[this.property] === this.value;
165
- }
166
- }
167
- exports.PropertyEqualsSpecification = PropertyEqualsSpecification;
168
- /**
169
- * Specification that checks if a property is in a set of values
170
- *
171
- * @example
172
- * ```typescript
173
- * const validStatusSpec = new PropertyInSpecification<User>('status', ['active', 'pending']);
174
- * ```
175
- */
176
- class PropertyInSpecification extends BaseSpecification {
177
- constructor(property, values) {
178
- super();
179
- this.property = property;
180
- this.values = values;
181
- }
182
- isSatisfiedBy(entity) {
183
- return this.values.includes(entity[this.property]);
184
- }
185
- }
186
- exports.PropertyInSpecification = PropertyInSpecification;
187
- //# sourceMappingURL=specification.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"specification.js","sourceRoot":"","sources":["../src/specification.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import { Criteria } from "../criteria";
2
- import { Aggregate } from "../entity";
3
- import { Id } from "../id";
4
- import { PaginatedResult } from "../paginated-result";
5
- export interface IRepository<TDomain extends Aggregate<any>> {
6
- /**
7
- * Find by ID
8
- */
9
- findById(id: Id): Promise<TDomain | null>;
10
- /**
11
- * Find using criteria (filtering, ordering, pagination)
12
- */
13
- find(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>>;
14
- /**
15
- * Find all (with optional criteria)
16
- */
17
- findAll(criteria?: Criteria<TDomain>): Promise<TDomain[]>;
18
- /**
19
- * Find one (first matching criteria)
20
- */
21
- findOne(criteria: Criteria<TDomain>): Promise<TDomain | null>;
22
- /**
23
- * Save (insert or update based on aggregate.isNew)
24
- */
25
- save(aggregate: TDomain): Promise<void>;
26
- /**
27
- * Delete aggregate
28
- */
29
- delete(aggregate: TDomain): Promise<void>;
30
- /**
31
- * Delete by ID
32
- */
33
- deleteById(id: Id): Promise<void>;
34
- /**
35
- * Check if exists
36
- */
37
- exists(id: Id): Promise<boolean>;
38
- /**
39
- * Count matching criteria
40
- */
41
- count(criteria?: Criteria<TDomain>): Promise<number>;
42
- }
43
- //# sourceMappingURL=repository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/types/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,SAAS,CAAC,GAAG,CAAC;IACzD;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAErE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE1D;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE9D;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/types/repository.ts"],"names":[],"mappings":""}
package/dist/types.d.ts DELETED
@@ -1,88 +0,0 @@
1
- import { Id } from "./id";
2
- export type EntityId = string | number;
3
- export interface BaseProps {
4
- id: Id;
5
- }
6
- export interface ChangeEvent<T> {
7
- previous: T | undefined;
8
- current: T;
9
- path: string;
10
- }
11
- export interface ArrayChangeEvent<T> {
12
- toCreate: T[];
13
- toUpdate: T[];
14
- toDelete: T[];
15
- path: string;
16
- }
17
- export type PropertySubscriber<T> = (event: ChangeEvent<T>) => void;
18
- export type ArraySubscriber<T> = (event: ArrayChangeEvent<T>) => void;
19
- export interface PropertySubscription<T> {
20
- onChange: PropertySubscriber<T>;
21
- }
22
- export interface ArraySubscription<T> {
23
- onChange: ArraySubscriber<T>;
24
- }
25
- type UnwrapArray<T> = T extends Array<infer U> ? U : never;
26
- type IsArray<T> = T extends Array<any> ? true : false;
27
- type NonUndefined<T> = T extends undefined ? never : T;
28
- export type SubscriptionConfig<T extends BaseProps> = {
29
- [K in keyof T]?: IsArray<NonUndefined<T[K]>> extends true ? ArraySubscription<UnwrapArray<NonUndefined<T[K]>>> : PropertySubscription<NonUndefined<T[K]>>;
30
- };
31
- export interface ValidationConfig {
32
- onCreate?: boolean;
33
- onUpdate?: boolean;
34
- throwOnError?: boolean;
35
- }
36
- export declare const DEFAULT_VALIDATION_CONFIG: Required<ValidationConfig>;
37
- export interface StandardSchemaIssue {
38
- message: string;
39
- path?: ReadonlyArray<unknown>;
40
- }
41
- export interface StandardSchemaResult<T> {
42
- value?: T;
43
- issues?: ReadonlyArray<StandardSchemaIssue>;
44
- }
45
- export interface StandardSchemaProps<T> {
46
- validate: (value: unknown) => StandardSchemaResult<T> | Promise<StandardSchemaResult<T>>;
47
- }
48
- export interface StandardSchema<T = unknown> {
49
- "~standard": StandardSchemaProps<T>;
50
- }
51
- interface DomainValidation<T> {
52
- schema: StandardSchema<T>;
53
- config?: ValidationConfig;
54
- }
55
- export type EntityValidation<T> = DomainValidation<T>;
56
- export type VOValidation<T> = DomainValidation<T>;
57
- export interface VOHooks<T, E> {
58
- onBeforeUpdate?: (entity: E, snapshot: T) => boolean;
59
- onCreate?: (entity: E) => void;
60
- rules?: (entity: E) => void;
61
- defaultValues?: Partial<T>;
62
- }
63
- export interface EntityHooks<T extends BaseProps, E> {
64
- onBeforeUpdate?: (entity: E, snapshot: T) => boolean;
65
- onCreate?: (entity: E) => void;
66
- rules?: (entity: E) => void;
67
- defaultValues?: Partial<Omit<T, "id">>;
68
- }
69
- export interface HistoryEntry {
70
- path: string;
71
- previousValue: any;
72
- currentValue: any;
73
- timestamp: number;
74
- }
75
- export type DeepJsonResult<T> = {
76
- [K in keyof T]: T[K] extends Id ? string : T[K] extends {
77
- toJson(): infer U;
78
- } ? U : T[K] extends Array<infer U> ? U extends {
79
- toJson(): infer V;
80
- } ? V[] : U extends Id ? string[] : U[] : T[K];
81
- };
82
- export interface EntityConstructor<T extends BaseProps, E> {
83
- new (props: T): E;
84
- validation?: DomainValidation<T>;
85
- hooks?: EntityHooks<T, E>;
86
- }
87
- export {};
88
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js DELETED
@@ -1,12 +0,0 @@
1
- "use strict";
2
- // ============================================================================
3
- // Types & Interfaces for Validation
4
- // ============================================================================
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DEFAULT_VALIDATION_CONFIG = void 0;
7
- exports.DEFAULT_VALIDATION_CONFIG = {
8
- onCreate: true,
9
- onUpdate: true,
10
- throwOnError: true,
11
- };
12
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;;;AAkElE,QAAA,yBAAyB,GAA+B;IACnE,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;CACnB,CAAC"}