@woltz/rich-domain 1.2.4 → 1.3.1
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/dist/aggregate-changes.d.ts +56 -14
- package/dist/aggregate-changes.d.ts.map +1 -1
- package/dist/aggregate-changes.js +103 -23
- package/dist/aggregate-changes.js.map +1 -1
- package/dist/base-entity.d.ts +1 -1
- package/dist/base-entity.d.ts.map +1 -1
- package/dist/base-entity.js +28 -13
- package/dist/base-entity.js.map +1 -1
- package/dist/change-tracker.d.ts +2 -1
- package/dist/change-tracker.d.ts.map +1 -1
- package/dist/change-tracker.js +61 -35
- package/dist/change-tracker.js.map +1 -1
- package/dist/criteria.d.ts +7 -15
- package/dist/criteria.d.ts.map +1 -1
- package/dist/criteria.js +105 -81
- package/dist/criteria.js.map +1 -1
- package/dist/domain-event-bus.js +4 -4
- package/dist/domain-event-bus.js.map +1 -1
- package/dist/domain-event.js +3 -0
- package/dist/domain-event.js.map +1 -1
- package/dist/entity-changes.js +1 -0
- package/dist/entity-changes.js.map +1 -1
- package/dist/entity-schema-registry.d.ts +137 -3
- package/dist/entity-schema-registry.d.ts.map +1 -1
- package/dist/entity-schema-registry.js +160 -7
- package/dist/entity-schema-registry.js.map +1 -1
- package/dist/exceptions.js +26 -1
- package/dist/exceptions.js.map +1 -1
- package/dist/id.js +2 -0
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/paginated-result.d.ts +4 -4
- package/dist/paginated-result.d.ts.map +1 -1
- package/dist/paginated-result.js +14 -19
- package/dist/paginated-result.js.map +1 -1
- package/dist/repository/unit-of-work.js +3 -7
- package/dist/repository/unit-of-work.js.map +1 -1
- package/dist/types/change-tracker.d.ts +30 -0
- package/dist/types/change-tracker.d.ts.map +1 -1
- package/dist/types/criteria.d.ts +1 -4
- package/dist/types/criteria.d.ts.map +1 -1
- package/dist/types/domain.d.ts +2 -1
- package/dist/types/domain.d.ts.map +1 -1
- package/dist/types/utils.d.ts +2 -2
- package/dist/utils/helpers.d.ts +1 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +23 -0
- package/dist/utils/helpers.js.map +1 -1
- package/dist/validation-error.d.ts +15 -1
- package/dist/validation-error.d.ts.map +1 -1
- package/dist/validation-error.js +46 -3
- package/dist/validation-error.js.map +1 -1
- package/dist/value-object.d.ts +1 -1
- package/dist/value-object.d.ts.map +1 -1
- package/dist/value-object.js +30 -2
- package/dist/value-object.js.map +1 -1
- package/package.json +17 -3
- package/src/aggregate-changes.ts +133 -24
- package/src/base-entity.ts +22 -11
- package/src/change-tracker.ts +113 -54
- package/src/criteria.ts +151 -109
- package/src/entity-schema-registry.ts +256 -6
- package/src/index.ts +1 -1
- package/src/paginated-result.ts +21 -29
- package/src/types/change-tracker.ts +31 -0
- package/src/types/criteria.ts +1 -4
- package/src/types/domain.ts +2 -1
- package/src/types/utils.ts +2 -2
- package/src/utils/helpers.ts +28 -0
- package/src/validation-error.ts +54 -4
- package/src/value-object.ts +6 -1
- package/.versionrc.json +0 -21
- package/CHANGELOG.md +0 -163
- package/tests/aggregate-changes.test.ts +0 -284
- package/tests/criteria.test.ts +0 -716
- package/tests/depth/deep-tracking.test.ts +0 -554
- package/tests/domain-events.test.ts +0 -431
- package/tests/entity-equality.test.ts +0 -464
- package/tests/entity-schema-registry.test.ts +0 -382
- package/tests/entity-validation.test.ts +0 -252
- package/tests/history-tracker.spec.ts +0 -439
- package/tests/id.test.ts +0 -338
- package/tests/load-test/data.json +0 -347211
- package/tests/load-test/entities.ts +0 -97
- package/tests/load-test/generate-data.ts +0 -81
- package/tests/load-test/lead-to-domain.mapper.ts +0 -24
- package/tests/load-test/load.test.ts +0 -38
- package/tests/repository.test.ts +0 -635
- package/tests/to-json.test.ts +0 -99
- package/tests/utils.ts +0 -290
- package/tests/value-object-validation.test.ts +0 -219
- package/tests/value-objects.test.ts +0 -80
- package/tsconfig.json +0 -9
|
@@ -8,6 +8,7 @@ import { EntityChanges } from "./entity-changes";
|
|
|
8
8
|
* - Orders operations respecting FK dependencies
|
|
9
9
|
* - Groups operations by entity for batch execution
|
|
10
10
|
* - Provides query and iteration methods
|
|
11
|
+
* - Includes relationField, parentId, parentEntity for N:N support
|
|
11
12
|
*
|
|
12
13
|
* @example
|
|
13
14
|
* ```typescript
|
|
@@ -22,9 +23,9 @@ import { EntityChanges } from "./entity-changes";
|
|
|
22
23
|
* const changes = user.getChanges<UserEntities>();
|
|
23
24
|
*
|
|
24
25
|
* // Filtering by entity with autocompletion
|
|
25
|
-
* const postChanges = changes.for('Post');
|
|
26
|
+
* const postChanges = changes.for('Post');
|
|
26
27
|
* postChanges.creates.forEach(post => {
|
|
27
|
-
* console.log(post.title);
|
|
28
|
+
* console.log(post.title);
|
|
28
29
|
* });
|
|
29
30
|
* ```
|
|
30
31
|
*/
|
|
@@ -33,16 +34,31 @@ export declare class AggregateChanges<TEntityMap = Record<string, any>> {
|
|
|
33
34
|
constructor(operations?: Operation[]);
|
|
34
35
|
/**
|
|
35
36
|
* Adds a create operation.
|
|
37
|
+
*
|
|
38
|
+
* @param entity - Entity name
|
|
39
|
+
* @param data - Entity data
|
|
40
|
+
* @param depth - Depth in the aggregate tree
|
|
41
|
+
* @param parentId - Parent entity ID (for FK)
|
|
42
|
+
* @param parentEntity - Parent entity name
|
|
43
|
+
* @param relationField - Name of the relation field in parent (e.g., 'tags', 'comments')
|
|
36
44
|
*/
|
|
37
|
-
addCreate<T>(entity: string, data: T, depth: number, parentId?: string, parentEntity?: string): void;
|
|
45
|
+
addCreate<T>(entity: string, data: T, depth: number, parentId?: string, parentEntity?: string, relationField?: string): void;
|
|
38
46
|
/**
|
|
39
47
|
* Adds an update operation.
|
|
40
48
|
*/
|
|
41
49
|
addUpdate<T>(entity: string, id: string, data: T, changedFields: Record<string, any>, depth: number): void;
|
|
42
50
|
/**
|
|
43
51
|
* Adds a delete operation.
|
|
52
|
+
*
|
|
53
|
+
* @param entity - Entity name
|
|
54
|
+
* @param id - Entity ID
|
|
55
|
+
* @param data - Entity data (for reference)
|
|
56
|
+
* @param depth - Depth in the aggregate tree
|
|
57
|
+
* @param relationField - Name of the relation field in parent (e.g., 'tags', 'comments')
|
|
58
|
+
* @param parentId - Parent entity ID (for N:N disconnect)
|
|
59
|
+
* @param parentEntity - Parent entity name (for N:N disconnect)
|
|
44
60
|
*/
|
|
45
|
-
addDelete<T>(entity: string, id: string, data: T, depth: number): void;
|
|
61
|
+
addDelete<T>(entity: string, id: string, data: T, depth: number, relationField?: string, parentId?: string, parentEntity?: string): void;
|
|
46
62
|
/**
|
|
47
63
|
* Returns all create operations, sorted by ascending depth (root → leaf).
|
|
48
64
|
*/
|
|
@@ -70,8 +86,8 @@ export declare class AggregateChanges<TEntityMap = Record<string, any>> {
|
|
|
70
86
|
* Converts the changes into BatchOperations for optimized execution.
|
|
71
87
|
*
|
|
72
88
|
* Groups operations by entity and sorts by depth:
|
|
73
|
-
* - Deletes: depth DESC (leaf → root)
|
|
74
|
-
* - Creates: depth ASC (root → leaf)
|
|
89
|
+
* - Deletes: depth DESC (leaf → root), grouped by entity + relationField + parentId
|
|
90
|
+
* - Creates: depth ASC (root → leaf), grouped by entity + relationField
|
|
75
91
|
* - Updates: grouped by entity
|
|
76
92
|
*
|
|
77
93
|
* @example
|
|
@@ -80,22 +96,31 @@ export declare class AggregateChanges<TEntityMap = Record<string, any>> {
|
|
|
80
96
|
*
|
|
81
97
|
* // Run deletes
|
|
82
98
|
* for (const del of batch.deletes) {
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
99
|
+
* if (registry.isReferenceCollection(del.parentEntity, del.relationField)) {
|
|
100
|
+
* // N:N - disconnect only
|
|
101
|
+
* await prisma[del.parentEntity].update({
|
|
102
|
+
* where: { id: del.parentId },
|
|
103
|
+
* data: { [del.relationField]: { disconnect: del.ids.map(id => ({ id })) } }
|
|
104
|
+
* });
|
|
105
|
+
* } else {
|
|
106
|
+
* // 1:N - delete entities
|
|
107
|
+
* await prisma[del.entity].deleteMany({ where: { id: { in: del.ids } } });
|
|
108
|
+
* }
|
|
89
109
|
* }
|
|
90
110
|
* ```
|
|
91
111
|
*/
|
|
92
112
|
toBatchOperations(): BatchOperations;
|
|
93
113
|
/**
|
|
94
|
-
* Groups deletes by entity, sorted by descending depth.
|
|
114
|
+
* Groups deletes by entity + relationField + parentId, sorted by descending depth.
|
|
115
|
+
*
|
|
116
|
+
* For N:N relations, we need to group by parentId because disconnect
|
|
117
|
+
* operations are performed on the parent entity.
|
|
95
118
|
*/
|
|
96
119
|
private groupDeletes;
|
|
97
120
|
/**
|
|
98
|
-
* Groups creates by entity, sorted by ascending depth.
|
|
121
|
+
* Groups creates by entity + relationField, sorted by ascending depth.
|
|
122
|
+
*
|
|
123
|
+
* Preserves parentEntity for N:N connect operations.
|
|
99
124
|
*/
|
|
100
125
|
private groupCreates;
|
|
101
126
|
/**
|
|
@@ -120,6 +145,19 @@ export declare class AggregateChanges<TEntityMap = Record<string, any>> {
|
|
|
120
145
|
* ```
|
|
121
146
|
*/
|
|
122
147
|
for<K extends keyof TEntityMap>(entityName: K): EntityChanges<TEntityMap[K]>;
|
|
148
|
+
/**
|
|
149
|
+
* Filters changes by relation field.
|
|
150
|
+
*
|
|
151
|
+
* @param relationField - Name of the relation field (e.g., 'tags', 'comments')
|
|
152
|
+
* @returns New AggregateChanges containing only operations for this relation
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* const tagChanges = changes.forRelation('tags');
|
|
157
|
+
* // Contains only creates/deletes for the 'tags' relation
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
forRelation(relationField: string): AggregateChanges<TEntityMap>;
|
|
123
161
|
/**
|
|
124
162
|
* Checks if there are create operations.
|
|
125
163
|
*/
|
|
@@ -152,6 +190,10 @@ export declare class AggregateChanges<TEntityMap = Record<string, any>> {
|
|
|
152
190
|
* Lists all entities that have changes.
|
|
153
191
|
*/
|
|
154
192
|
getAffectedEntities(): string[];
|
|
193
|
+
/**
|
|
194
|
+
* Lists all relation fields that have changes.
|
|
195
|
+
*/
|
|
196
|
+
getAffectedRelations(): string[];
|
|
155
197
|
/**
|
|
156
198
|
* Clears all operations.
|
|
157
199
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-changes.d.ts","sourceRoot":"","sources":["../src/aggregate-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD
|
|
1
|
+
{"version":3,"file":"aggregate-changes.d.ts","sourceRoot":"","sources":["../src/aggregate-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,gBAAgB,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAmB;gBAElB,UAAU,GAAE,SAAS,EAAO;IAIxC;;;;;;;;;OASG;IACH,SAAS,CAAC,CAAC,EACT,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI;IAYP;;OAEG;IACH,SAAS,CAAC,CAAC,EACT,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,CAAC,EACP,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,KAAK,EAAE,MAAM,GACZ,IAAI;IAWP;;;;;;;;;;OAUG;IACH,SAAS,CAAC,CAAC,EACT,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI;IAaP;;OAEG;IACH,OAAO,IAAI,eAAe,EAAE;IAM5B;;OAEG;IACH,OAAO,IAAI,eAAe,EAAE;IAI5B;;OAEG;IACH,OAAO,IAAI,eAAe,EAAE;IAM5B;;;;;OAKG;IACF,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC;IAMnC;;OAEG;IACH,OAAO,IAAI,SAAS,EAAE;IAItB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,iBAAiB,IAAI,eAAe;IAQpC;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAsCpB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAuCpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAK5E;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC;IAOhE;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,SAAS,EAAE,CAE/B;IAED;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAM/B;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAUhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI,gBAAgB,CAAC,UAAU,CAAC;CAGtC"}
|
|
@@ -7,6 +7,7 @@ import { EntityChanges } from "./entity-changes";
|
|
|
7
7
|
* - Orders operations respecting FK dependencies
|
|
8
8
|
* - Groups operations by entity for batch execution
|
|
9
9
|
* - Provides query and iteration methods
|
|
10
|
+
* - Includes relationField, parentId, parentEntity for N:N support
|
|
10
11
|
*
|
|
11
12
|
* @example
|
|
12
13
|
* ```typescript
|
|
@@ -21,21 +22,28 @@ import { EntityChanges } from "./entity-changes";
|
|
|
21
22
|
* const changes = user.getChanges<UserEntities>();
|
|
22
23
|
*
|
|
23
24
|
* // Filtering by entity with autocompletion
|
|
24
|
-
* const postChanges = changes.for('Post');
|
|
25
|
+
* const postChanges = changes.for('Post');
|
|
25
26
|
* postChanges.creates.forEach(post => {
|
|
26
|
-
* console.log(post.title);
|
|
27
|
+
* console.log(post.title);
|
|
27
28
|
* });
|
|
28
29
|
* ```
|
|
29
30
|
*/
|
|
30
31
|
export class AggregateChanges {
|
|
32
|
+
ops = [];
|
|
31
33
|
constructor(operations = []) {
|
|
32
|
-
this.ops = [];
|
|
33
34
|
this.ops = [...operations];
|
|
34
35
|
}
|
|
35
36
|
/**
|
|
36
37
|
* Adds a create operation.
|
|
38
|
+
*
|
|
39
|
+
* @param entity - Entity name
|
|
40
|
+
* @param data - Entity data
|
|
41
|
+
* @param depth - Depth in the aggregate tree
|
|
42
|
+
* @param parentId - Parent entity ID (for FK)
|
|
43
|
+
* @param parentEntity - Parent entity name
|
|
44
|
+
* @param relationField - Name of the relation field in parent (e.g., 'tags', 'comments')
|
|
37
45
|
*/
|
|
38
|
-
addCreate(entity, data, depth, parentId, parentEntity) {
|
|
46
|
+
addCreate(entity, data, depth, parentId, parentEntity, relationField) {
|
|
39
47
|
this.ops.push({
|
|
40
48
|
type: "create",
|
|
41
49
|
entity,
|
|
@@ -43,6 +51,7 @@ export class AggregateChanges {
|
|
|
43
51
|
depth,
|
|
44
52
|
parentId,
|
|
45
53
|
parentEntity,
|
|
54
|
+
relationField,
|
|
46
55
|
});
|
|
47
56
|
}
|
|
48
57
|
/**
|
|
@@ -60,14 +69,25 @@ export class AggregateChanges {
|
|
|
60
69
|
}
|
|
61
70
|
/**
|
|
62
71
|
* Adds a delete operation.
|
|
72
|
+
*
|
|
73
|
+
* @param entity - Entity name
|
|
74
|
+
* @param id - Entity ID
|
|
75
|
+
* @param data - Entity data (for reference)
|
|
76
|
+
* @param depth - Depth in the aggregate tree
|
|
77
|
+
* @param relationField - Name of the relation field in parent (e.g., 'tags', 'comments')
|
|
78
|
+
* @param parentId - Parent entity ID (for N:N disconnect)
|
|
79
|
+
* @param parentEntity - Parent entity name (for N:N disconnect)
|
|
63
80
|
*/
|
|
64
|
-
addDelete(entity, id, data, depth) {
|
|
81
|
+
addDelete(entity, id, data, depth, relationField, parentId, parentEntity) {
|
|
65
82
|
this.ops.push({
|
|
66
83
|
type: "delete",
|
|
67
84
|
entity,
|
|
68
85
|
id,
|
|
69
86
|
data,
|
|
70
87
|
depth,
|
|
88
|
+
relationField,
|
|
89
|
+
parentId,
|
|
90
|
+
parentEntity,
|
|
71
91
|
});
|
|
72
92
|
}
|
|
73
93
|
/**
|
|
@@ -113,8 +133,8 @@ export class AggregateChanges {
|
|
|
113
133
|
* Converts the changes into BatchOperations for optimized execution.
|
|
114
134
|
*
|
|
115
135
|
* Groups operations by entity and sorts by depth:
|
|
116
|
-
* - Deletes: depth DESC (leaf → root)
|
|
117
|
-
* - Creates: depth ASC (root → leaf)
|
|
136
|
+
* - Deletes: depth DESC (leaf → root), grouped by entity + relationField + parentId
|
|
137
|
+
* - Creates: depth ASC (root → leaf), grouped by entity + relationField
|
|
118
138
|
* - Updates: grouped by entity
|
|
119
139
|
*
|
|
120
140
|
* @example
|
|
@@ -123,12 +143,16 @@ export class AggregateChanges {
|
|
|
123
143
|
*
|
|
124
144
|
* // Run deletes
|
|
125
145
|
* for (const del of batch.deletes) {
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
146
|
+
* if (registry.isReferenceCollection(del.parentEntity, del.relationField)) {
|
|
147
|
+
* // N:N - disconnect only
|
|
148
|
+
* await prisma[del.parentEntity].update({
|
|
149
|
+
* where: { id: del.parentId },
|
|
150
|
+
* data: { [del.relationField]: { disconnect: del.ids.map(id => ({ id })) } }
|
|
151
|
+
* });
|
|
152
|
+
* } else {
|
|
153
|
+
* // 1:N - delete entities
|
|
154
|
+
* await prisma[del.entity].deleteMany({ where: { id: { in: del.ids } } });
|
|
155
|
+
* }
|
|
132
156
|
* }
|
|
133
157
|
* ```
|
|
134
158
|
*/
|
|
@@ -140,38 +164,66 @@ export class AggregateChanges {
|
|
|
140
164
|
};
|
|
141
165
|
}
|
|
142
166
|
/**
|
|
143
|
-
* Groups deletes by entity, sorted by descending depth.
|
|
167
|
+
* Groups deletes by entity + relationField + parentId, sorted by descending depth.
|
|
168
|
+
*
|
|
169
|
+
* For N:N relations, we need to group by parentId because disconnect
|
|
170
|
+
* operations are performed on the parent entity.
|
|
144
171
|
*/
|
|
145
172
|
groupDeletes() {
|
|
146
173
|
const deleteOps = this.deletes();
|
|
147
174
|
const grouped = new Map();
|
|
148
175
|
for (const op of deleteOps) {
|
|
149
|
-
|
|
150
|
-
|
|
176
|
+
// Group by entity + relationField + parentId
|
|
177
|
+
// This ensures N:N disconnects are grouped per parent
|
|
178
|
+
const key = `${op.entity}:${op.relationField ?? ""}:${op.parentId ?? ""}`;
|
|
179
|
+
if (!grouped.has(key)) {
|
|
180
|
+
grouped.set(key, {
|
|
181
|
+
depth: op.depth,
|
|
182
|
+
ids: [],
|
|
183
|
+
relationField: op.relationField,
|
|
184
|
+
parentEntity: op.parentEntity,
|
|
185
|
+
parentId: op.parentId,
|
|
186
|
+
});
|
|
151
187
|
}
|
|
152
|
-
grouped.get(
|
|
188
|
+
grouped.get(key).ids.push(op.id);
|
|
153
189
|
}
|
|
154
190
|
return Array.from(grouped.entries())
|
|
155
|
-
.map(([
|
|
191
|
+
.map(([key, { depth, ids, relationField, parentEntity, parentId }]) => {
|
|
192
|
+
const entity = key.split(":")[0];
|
|
193
|
+
return { entity, depth, ids, parentId, relationField, parentEntity };
|
|
194
|
+
})
|
|
156
195
|
.sort((a, b) => b.depth - a.depth);
|
|
157
196
|
}
|
|
158
197
|
/**
|
|
159
|
-
* Groups creates by entity, sorted by ascending depth.
|
|
198
|
+
* Groups creates by entity + relationField, sorted by ascending depth.
|
|
199
|
+
*
|
|
200
|
+
* Preserves parentEntity for N:N connect operations.
|
|
160
201
|
*/
|
|
161
202
|
groupCreates() {
|
|
162
203
|
const createOps = this.creates();
|
|
163
204
|
const grouped = new Map();
|
|
164
205
|
for (const op of createOps) {
|
|
165
|
-
|
|
166
|
-
|
|
206
|
+
const key = `${op.entity}:${op.relationField ?? ""}`;
|
|
207
|
+
if (!grouped.has(key)) {
|
|
208
|
+
grouped.set(key, {
|
|
209
|
+
depth: op.depth,
|
|
210
|
+
items: [],
|
|
211
|
+
relationField: op.relationField,
|
|
212
|
+
parentEntity: op.parentEntity,
|
|
213
|
+
});
|
|
167
214
|
}
|
|
168
|
-
grouped.get(
|
|
215
|
+
grouped.get(key).items.push({
|
|
169
216
|
data: op.data,
|
|
170
217
|
parentId: op.parentId,
|
|
218
|
+
parentEntity: op.parentEntity,
|
|
219
|
+
relationField: op.relationField,
|
|
171
220
|
});
|
|
172
221
|
}
|
|
173
222
|
return Array.from(grouped.entries())
|
|
174
|
-
.map(([
|
|
223
|
+
.map(([key, { depth, items, relationField, parentEntity }]) => {
|
|
224
|
+
const entity = key.split(":")[0];
|
|
225
|
+
return { entity, depth, items, relationField, parentEntity };
|
|
226
|
+
})
|
|
175
227
|
.sort((a, b) => a.depth - b.depth);
|
|
176
228
|
}
|
|
177
229
|
/**
|
|
@@ -215,6 +267,22 @@ export class AggregateChanges {
|
|
|
215
267
|
const filtered = this.ops.filter((op) => op.entity === entityName);
|
|
216
268
|
return new EntityChanges(filtered);
|
|
217
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Filters changes by relation field.
|
|
272
|
+
*
|
|
273
|
+
* @param relationField - Name of the relation field (e.g., 'tags', 'comments')
|
|
274
|
+
* @returns New AggregateChanges containing only operations for this relation
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* ```typescript
|
|
278
|
+
* const tagChanges = changes.forRelation('tags');
|
|
279
|
+
* // Contains only creates/deletes for the 'tags' relation
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
forRelation(relationField) {
|
|
283
|
+
const filtered = this.ops.filter((op) => op.relationField === relationField);
|
|
284
|
+
return new AggregateChanges(filtered);
|
|
285
|
+
}
|
|
218
286
|
/**
|
|
219
287
|
* Checks if there are create operations.
|
|
220
288
|
*/
|
|
@@ -265,6 +333,18 @@ export class AggregateChanges {
|
|
|
265
333
|
this.ops.forEach((op) => entities.add(op.entity));
|
|
266
334
|
return Array.from(entities);
|
|
267
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
* Lists all relation fields that have changes.
|
|
338
|
+
*/
|
|
339
|
+
getAffectedRelations() {
|
|
340
|
+
const relations = new Set();
|
|
341
|
+
this.ops.forEach((op) => {
|
|
342
|
+
if (op.relationField) {
|
|
343
|
+
relations.add(op.relationField);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
return Array.from(relations);
|
|
347
|
+
}
|
|
268
348
|
/**
|
|
269
349
|
* Clears all operations.
|
|
270
350
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-changes.js","sourceRoot":"","sources":["../src/aggregate-changes.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD
|
|
1
|
+
{"version":3,"file":"aggregate-changes.js","sourceRoot":"","sources":["../src/aggregate-changes.ts"],"names":[],"mappings":"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"}
|
package/dist/base-entity.d.ts
CHANGED
|
@@ -85,7 +85,7 @@ export declare abstract class BaseEntity<T extends BaseProps> {
|
|
|
85
85
|
* Check if entity has uncommitted events
|
|
86
86
|
*/
|
|
87
87
|
hasUncommittedEvents(): boolean;
|
|
88
|
-
|
|
88
|
+
toJSON(): DeepJsonResult<T>;
|
|
89
89
|
private deepToJson;
|
|
90
90
|
}
|
|
91
91
|
//# sourceMappingURL=base-entity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-entity.d.ts","sourceRoot":"","sources":["../src/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AACjC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EAGX,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AASvD,8BAAsB,UAAU,CAAC,CAAC,SAAS,SAAS;IAClD,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,YAAY,CAAsB;IAE1C,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;gBAEnC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,EAAE,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"base-entity.d.ts","sourceRoot":"","sources":["../src/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AACjC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EAGX,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AASvD,8BAAsB,UAAU,CAAC,CAAC,SAAS,SAAS;IAClD,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,YAAY,CAAsB;IAE1C,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;gBAEnC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,EAAE,CAAA;KAAE;IAqD9C,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;IAKnB;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAInD;;OAEG;IACU,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;OAEG;IACH,oBAAoB,IAAI,YAAY,EAAE;IAItC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IAI3B,OAAO,CAAC,UAAU;CAgBnB"}
|
package/dist/base-entity.js
CHANGED
|
@@ -7,11 +7,25 @@ function getStaticProperty(instance, propertyName) {
|
|
|
7
7
|
return instance.constructor[propertyName];
|
|
8
8
|
}
|
|
9
9
|
export class BaseEntity {
|
|
10
|
+
_props;
|
|
11
|
+
tracker;
|
|
12
|
+
proxiedProps;
|
|
13
|
+
snapshot = null;
|
|
14
|
+
validationConfig;
|
|
15
|
+
entityHooks;
|
|
16
|
+
entitySchema;
|
|
17
|
+
domainEvents = [];
|
|
18
|
+
static validation;
|
|
19
|
+
static hooks;
|
|
10
20
|
constructor(props) {
|
|
11
|
-
this.snapshot = null;
|
|
12
|
-
this.domainEvents = [];
|
|
13
21
|
const validation = getStaticProperty(this, "validation");
|
|
14
22
|
const hooks = getStaticProperty(this, "hooks");
|
|
23
|
+
if (!props.id) {
|
|
24
|
+
props.id = new Id();
|
|
25
|
+
}
|
|
26
|
+
if (hooks?.onBeforeCreate) {
|
|
27
|
+
hooks.onBeforeCreate(props);
|
|
28
|
+
}
|
|
15
29
|
this.entityHooks = hooks;
|
|
16
30
|
if (validation?.schema) {
|
|
17
31
|
this.entitySchema = validation.schema;
|
|
@@ -21,9 +35,6 @@ export class BaseEntity {
|
|
|
21
35
|
...validation?.config,
|
|
22
36
|
};
|
|
23
37
|
let finalProps = { ...props };
|
|
24
|
-
if (!finalProps.id) {
|
|
25
|
-
finalProps.id = new Id();
|
|
26
|
-
}
|
|
27
38
|
if (this.entitySchema && this.validationConfig.onCreate) {
|
|
28
39
|
this.validateProps(finalProps);
|
|
29
40
|
}
|
|
@@ -52,7 +63,9 @@ export class BaseEntity {
|
|
|
52
63
|
const validationError = new ValidationError(result.issues.map((issue) => ({
|
|
53
64
|
path: issue.path?.map((p) => this.extractPathKey(p)) || [],
|
|
54
65
|
message: issue.message,
|
|
55
|
-
}))
|
|
66
|
+
})), {
|
|
67
|
+
entityName: this.constructor.name,
|
|
68
|
+
});
|
|
56
69
|
if (this.validationConfig.throwOnError) {
|
|
57
70
|
throw validationError;
|
|
58
71
|
}
|
|
@@ -80,7 +93,7 @@ export class BaseEntity {
|
|
|
80
93
|
*/
|
|
81
94
|
setupUpdateValidation() {
|
|
82
95
|
const self = this;
|
|
83
|
-
this.tracker.setOnChangeValidator((path,
|
|
96
|
+
this.tracker.setOnChangeValidator((path, newValue) => {
|
|
84
97
|
const originalValue = self._props[path];
|
|
85
98
|
self._props[path] = newValue;
|
|
86
99
|
try {
|
|
@@ -102,7 +115,9 @@ export class BaseEntity {
|
|
|
102
115
|
const validationError = new ValidationError(result.issues.map((issue) => ({
|
|
103
116
|
path: issue.path?.map((p) => self.extractPathKey(p)) || [],
|
|
104
117
|
message: issue.message,
|
|
105
|
-
}))
|
|
118
|
+
})), {
|
|
119
|
+
entityName: self.constructor.name,
|
|
120
|
+
});
|
|
106
121
|
self._props[path] = originalValue;
|
|
107
122
|
if (self.validationConfig.throwOnError) {
|
|
108
123
|
throw validationError;
|
|
@@ -154,7 +169,7 @@ export class BaseEntity {
|
|
|
154
169
|
if (obj.constructor &&
|
|
155
170
|
obj.constructor.name !== "Object" &&
|
|
156
171
|
obj.constructor.name !== "Array") {
|
|
157
|
-
if (typeof obj.
|
|
172
|
+
if (typeof obj.toJSON === "function" &&
|
|
158
173
|
typeof obj.equals === "function") {
|
|
159
174
|
return obj;
|
|
160
175
|
}
|
|
@@ -279,7 +294,7 @@ export class BaseEntity {
|
|
|
279
294
|
hasUncommittedEvents() {
|
|
280
295
|
return this.domainEvents.length > 0;
|
|
281
296
|
}
|
|
282
|
-
|
|
297
|
+
toJSON() {
|
|
283
298
|
return this.deepToJson(this._props);
|
|
284
299
|
}
|
|
285
300
|
deepToJson(obj) {
|
|
@@ -292,9 +307,9 @@ export class BaseEntity {
|
|
|
292
307
|
if (Array.isArray(obj))
|
|
293
308
|
return obj.map((item) => this.deepToJson(item));
|
|
294
309
|
if (obj instanceof BaseEntity)
|
|
295
|
-
return obj.
|
|
296
|
-
if (obj && typeof obj.
|
|
297
|
-
return obj.
|
|
310
|
+
return obj.toJSON();
|
|
311
|
+
if (obj && typeof obj.toJSON === "function")
|
|
312
|
+
return obj.toJSON();
|
|
298
313
|
if (typeof obj === "object") {
|
|
299
314
|
const result = {};
|
|
300
315
|
for (const key in obj) {
|
package/dist/base-entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-entity.js","sourceRoot":"","sources":["../src/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAYrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,SAAS,iBAAiB,CACxB,QAAa,EACb,YAAoB;IAEpB,OAAO,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,OAAgB,UAAU;
|
|
1
|
+
{"version":3,"file":"base-entity.js","sourceRoot":"","sources":["../src/base-entity.ts"],"names":[],"mappings":"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"}
|
package/dist/change-tracker.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { AggregateChanges } from "./aggregate-changes";
|
|
|
4
4
|
* Callback for validation on property change.
|
|
5
5
|
* Return false to reject the change, or throw an error.
|
|
6
6
|
*/
|
|
7
|
-
export type OnChangeValidator = (path: string,
|
|
7
|
+
export type OnChangeValidator = (path: string, newValue: any) => boolean | void;
|
|
8
8
|
/**
|
|
9
9
|
* Tracks changes in Aggregates using Proxy.
|
|
10
10
|
*
|
|
@@ -79,6 +79,7 @@ export declare class ChangeTracker {
|
|
|
79
79
|
private buildPath;
|
|
80
80
|
private shouldSkipProperty;
|
|
81
81
|
private getValueAtPath;
|
|
82
|
+
private extractRelationField;
|
|
82
83
|
private getItemKey;
|
|
83
84
|
private getEntityId;
|
|
84
85
|
private getEntityName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-tracker.d.ts","sourceRoot":"","sources":["../src/change-tracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,YAAY,EAAe,MAAM,SAAS,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"change-tracker.d.ts","sourceRoot":"","sources":["../src/change-tracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,YAAY,EAAe,MAAM,SAAS,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,IAAI,CAAC;AAEhF;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IAQtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,QAAQ,CAAC;IAEjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,WAAW,CAAC;IAftB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,iBAAiB,CAAC,CAAoB;gBAGpC,MAAM,EAAE,GAAG,EACX,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,MAAW,EACjB,KAAK,GAAE,MAAU,EAEjB,QAAQ,CAAC,EAAE,MAAM,YAAA,EAEjB,YAAY,CAAC,EAAE,MAAM,YAAA,EACrB,WAAW,CAAC,EAAE,aAAa,YAAA;IAQrC;;;;;;OAMG;IACH,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIxD,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;IAgD1B,OAAO,CAAC,iBAAiB;IAoCzB,WAAW,IAAI,GAAG;IAmFlB,OAAO,CAAC,gBAAgB;IA+GxB;;OAEG;IACH,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,gBAAgB,CAAC,UAAU,CAAC;IAW5E,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,wBAAwB;IAsFhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8ChC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA8ChC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IA0DnC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,oBAAoB;IA0F5B,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,SAAS;IA4CjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAkCjB,OAAO,CAAC,qBAAqB;IAkB7B,UAAU,IAAI,YAAY,EAAE;IAI5B,YAAY,IAAI,IAAI;IASpB,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,GAAG;CAGjB"}
|