@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
|
@@ -1,554 +0,0 @@
|
|
|
1
|
-
import { Entity } from "../../src/entity";
|
|
2
|
-
import { Id } from "../../src/id";
|
|
3
|
-
|
|
4
|
-
interface Level10Props {
|
|
5
|
-
id: Id;
|
|
6
|
-
value: string;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
class Level10 extends Entity<Level10Props> {}
|
|
10
|
-
|
|
11
|
-
interface Level9Props {
|
|
12
|
-
id: Id;
|
|
13
|
-
value: string;
|
|
14
|
-
child?: Level10;
|
|
15
|
-
children: Level10[];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
class Level9 extends Entity<Level9Props> {}
|
|
19
|
-
|
|
20
|
-
interface Level8Props {
|
|
21
|
-
id: Id;
|
|
22
|
-
value: string;
|
|
23
|
-
child?: Level9;
|
|
24
|
-
children: Level9[];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
class Level8 extends Entity<Level8Props> {}
|
|
28
|
-
|
|
29
|
-
interface Level7Props {
|
|
30
|
-
id: Id;
|
|
31
|
-
value: string;
|
|
32
|
-
child?: Level8;
|
|
33
|
-
children: Level8[];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
class Level7 extends Entity<Level7Props> {}
|
|
37
|
-
|
|
38
|
-
interface Level6Props {
|
|
39
|
-
id: Id;
|
|
40
|
-
value: string;
|
|
41
|
-
child?: Level7;
|
|
42
|
-
children: Level7[];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
class Level6 extends Entity<Level6Props> {}
|
|
46
|
-
|
|
47
|
-
interface Level5Props {
|
|
48
|
-
id: Id;
|
|
49
|
-
value: string;
|
|
50
|
-
child?: Level6;
|
|
51
|
-
children: Level6[];
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
class Level5 extends Entity<Level5Props> {}
|
|
55
|
-
|
|
56
|
-
interface Level4Props {
|
|
57
|
-
id: Id;
|
|
58
|
-
value: string;
|
|
59
|
-
child?: Level5;
|
|
60
|
-
children: Level5[];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
class Level4 extends Entity<Level4Props> {}
|
|
64
|
-
|
|
65
|
-
interface Level3Props {
|
|
66
|
-
id: Id;
|
|
67
|
-
value: string;
|
|
68
|
-
child?: Level4;
|
|
69
|
-
children: Level4[];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
class Level3 extends Entity<Level3Props> {}
|
|
73
|
-
|
|
74
|
-
interface Level2Props {
|
|
75
|
-
id: Id;
|
|
76
|
-
value: string;
|
|
77
|
-
child?: Level3;
|
|
78
|
-
children: Level3[];
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
class Level2 extends Entity<Level2Props> {}
|
|
82
|
-
|
|
83
|
-
interface Level1Props {
|
|
84
|
-
id: Id;
|
|
85
|
-
value: string;
|
|
86
|
-
child?: Level2;
|
|
87
|
-
children: Level2[];
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
class Level1 extends Entity<Level1Props> {}
|
|
91
|
-
|
|
92
|
-
interface RootProps {
|
|
93
|
-
id: Id;
|
|
94
|
-
name: string;
|
|
95
|
-
child?: Level1;
|
|
96
|
-
children: Level1[];
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
class Root extends Entity<RootProps> {}
|
|
100
|
-
|
|
101
|
-
describe("Deep Change Tracking", () => {
|
|
102
|
-
describe("Depth Level 1 - Direct child entity", () => {
|
|
103
|
-
it("should track changes in child entity itself", () => {
|
|
104
|
-
const level1 = new Level1({ value: "level1", children: [] });
|
|
105
|
-
const root = new Root({
|
|
106
|
-
name: "root",
|
|
107
|
-
child: level1,
|
|
108
|
-
children: [],
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
level1.props.value = "level1-changed";
|
|
112
|
-
|
|
113
|
-
const level1History = level1.getHistory();
|
|
114
|
-
expect(level1History.length).toBeGreaterThan(0);
|
|
115
|
-
expect(level1History.some((h) => h.path === "value")).toBe(true);
|
|
116
|
-
expect(
|
|
117
|
-
level1History.some((h) => h.currentValue === "level1-changed")
|
|
118
|
-
).toBe(true);
|
|
119
|
-
|
|
120
|
-
const rootHistory = root.getHistory();
|
|
121
|
-
expect(rootHistory.every((h) => !h.path.includes("child.value"))).toBe(
|
|
122
|
-
true
|
|
123
|
-
);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it("should track child replacement in parent", () => {
|
|
127
|
-
const level1 = new Level1({ value: "level1", children: [] });
|
|
128
|
-
const root = new Root({
|
|
129
|
-
name: "root",
|
|
130
|
-
child: level1,
|
|
131
|
-
children: [],
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
root.props.child = new Level1({ value: "new-level1", children: [] });
|
|
135
|
-
|
|
136
|
-
const rootHistory = root.getHistory();
|
|
137
|
-
expect(rootHistory.length).toBeGreaterThan(0);
|
|
138
|
-
expect(rootHistory.some((h) => h.path === "child")).toBe(true);
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
describe("Depth Level 3 - Triple nesting", () => {
|
|
143
|
-
it("should track changes at each level independently", () => {
|
|
144
|
-
const level3 = new Level3({ value: "level3", children: [] });
|
|
145
|
-
const level2 = new Level2({
|
|
146
|
-
value: "level2",
|
|
147
|
-
child: level3,
|
|
148
|
-
children: [],
|
|
149
|
-
});
|
|
150
|
-
const level1 = new Level1({
|
|
151
|
-
value: "level1",
|
|
152
|
-
child: level2,
|
|
153
|
-
children: [],
|
|
154
|
-
});
|
|
155
|
-
const root = new Root({
|
|
156
|
-
name: "root",
|
|
157
|
-
child: level1,
|
|
158
|
-
children: [],
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
// Change at each level
|
|
162
|
-
root.props.name = "root-changed";
|
|
163
|
-
level1.props.value = "level1-changed";
|
|
164
|
-
level2.props.value = "level2-changed";
|
|
165
|
-
level3.props.value = "level3-changed";
|
|
166
|
-
|
|
167
|
-
expect(
|
|
168
|
-
root.getHistory().some((h) => h.currentValue === "root-changed")
|
|
169
|
-
).toBe(true);
|
|
170
|
-
expect(
|
|
171
|
-
level1.getHistory().some((h) => h.currentValue === "level1-changed")
|
|
172
|
-
).toBe(true);
|
|
173
|
-
expect(
|
|
174
|
-
level2.getHistory().some((h) => h.currentValue === "level2-changed")
|
|
175
|
-
).toBe(true);
|
|
176
|
-
expect(
|
|
177
|
-
level3.getHistory().some((h) => h.currentValue === "level3-changed")
|
|
178
|
-
).toBe(true);
|
|
179
|
-
|
|
180
|
-
expect(root.getChanges().hasChanges()).toBe(true);
|
|
181
|
-
expect(level1.getChanges().hasChanges()).toBe(true);
|
|
182
|
-
expect(level2.getChanges().hasChanges()).toBe(true);
|
|
183
|
-
expect(level3.getChanges().hasChanges()).toBe(true);
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
describe("Depth Level 5 - Five levels deep", () => {
|
|
188
|
-
it("should support 5 levels of nesting with independent tracking", () => {
|
|
189
|
-
const level5 = new Level5({ value: "level5", children: [] });
|
|
190
|
-
const level4 = new Level4({
|
|
191
|
-
value: "level4",
|
|
192
|
-
child: level5,
|
|
193
|
-
children: [],
|
|
194
|
-
});
|
|
195
|
-
const level3 = new Level3({
|
|
196
|
-
value: "level3",
|
|
197
|
-
child: level4,
|
|
198
|
-
children: [],
|
|
199
|
-
});
|
|
200
|
-
const level2 = new Level2({
|
|
201
|
-
value: "level2",
|
|
202
|
-
child: level3,
|
|
203
|
-
children: [],
|
|
204
|
-
});
|
|
205
|
-
const level1 = new Level1({
|
|
206
|
-
value: "level1",
|
|
207
|
-
child: level2,
|
|
208
|
-
children: [],
|
|
209
|
-
});
|
|
210
|
-
const root = new Root({
|
|
211
|
-
name: "root",
|
|
212
|
-
child: level1,
|
|
213
|
-
children: [],
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
level5.props.value = "level5-changed";
|
|
217
|
-
|
|
218
|
-
const level5History = level5.getHistory();
|
|
219
|
-
expect(level5History.length).toBeGreaterThan(0);
|
|
220
|
-
expect(
|
|
221
|
-
level5History.some((h) => h.currentValue === "level5-changed")
|
|
222
|
-
).toBe(true);
|
|
223
|
-
|
|
224
|
-
const level5Changes = level5.getChanges();
|
|
225
|
-
expect(level5Changes.hasUpdates()).toBe(true);
|
|
226
|
-
expect(level5Changes.updates()[0].changedFields.value).toBe(
|
|
227
|
-
"level5-changed"
|
|
228
|
-
);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
describe("Depth Level 10 - Ten levels deep", () => {
|
|
233
|
-
it("should support 10 levels of nesting", () => {
|
|
234
|
-
const level10 = new Level10({ value: "level10" });
|
|
235
|
-
const level9 = new Level9({
|
|
236
|
-
value: "level9",
|
|
237
|
-
child: level10,
|
|
238
|
-
children: [],
|
|
239
|
-
});
|
|
240
|
-
const level8 = new Level8({
|
|
241
|
-
value: "level8",
|
|
242
|
-
child: level9,
|
|
243
|
-
children: [],
|
|
244
|
-
});
|
|
245
|
-
const level7 = new Level7({
|
|
246
|
-
value: "level7",
|
|
247
|
-
child: level8,
|
|
248
|
-
children: [],
|
|
249
|
-
});
|
|
250
|
-
const level6 = new Level6({
|
|
251
|
-
value: "level6",
|
|
252
|
-
child: level7,
|
|
253
|
-
children: [],
|
|
254
|
-
});
|
|
255
|
-
const level5 = new Level5({
|
|
256
|
-
value: "level5",
|
|
257
|
-
child: level6,
|
|
258
|
-
children: [],
|
|
259
|
-
});
|
|
260
|
-
const level4 = new Level4({
|
|
261
|
-
value: "level4",
|
|
262
|
-
child: level5,
|
|
263
|
-
children: [],
|
|
264
|
-
});
|
|
265
|
-
const level3 = new Level3({
|
|
266
|
-
value: "level3",
|
|
267
|
-
child: level4,
|
|
268
|
-
children: [],
|
|
269
|
-
});
|
|
270
|
-
const level2 = new Level2({
|
|
271
|
-
value: "level2",
|
|
272
|
-
child: level3,
|
|
273
|
-
children: [],
|
|
274
|
-
});
|
|
275
|
-
const level1 = new Level1({
|
|
276
|
-
value: "level1",
|
|
277
|
-
child: level2,
|
|
278
|
-
children: [],
|
|
279
|
-
});
|
|
280
|
-
const root = new Root({
|
|
281
|
-
name: "root",
|
|
282
|
-
child: level1,
|
|
283
|
-
children: [],
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
expect(root).toBeDefined();
|
|
287
|
-
expect(root.props.child).toBeDefined();
|
|
288
|
-
expect(root.props.child!.props.child).toBeDefined();
|
|
289
|
-
expect(root.props.child!.props.child!.props.child).toBeDefined();
|
|
290
|
-
expect(
|
|
291
|
-
root.props.child!.props.child!.props.child!.props.child
|
|
292
|
-
).toBeDefined();
|
|
293
|
-
expect(
|
|
294
|
-
root.props.child!.props.child!.props.child!.props.child!.props.child
|
|
295
|
-
).toBeDefined();
|
|
296
|
-
|
|
297
|
-
level10.props.value = "level10-changed";
|
|
298
|
-
|
|
299
|
-
const level10History = level10.getHistory();
|
|
300
|
-
expect(level10History.length).toBeGreaterThan(0);
|
|
301
|
-
expect(
|
|
302
|
-
level10History.some((h) => h.currentValue === "level10-changed")
|
|
303
|
-
).toBe(true);
|
|
304
|
-
|
|
305
|
-
const level10Changes = level10.getChanges();
|
|
306
|
-
expect(level10Changes.hasUpdates()).toBe(true);
|
|
307
|
-
});
|
|
308
|
-
|
|
309
|
-
it("should track array changes at deep levels", () => {
|
|
310
|
-
const level10Item1 = new Level10({ value: "level10-item1" });
|
|
311
|
-
const level10Item2 = new Level10({ value: "level10-item2" });
|
|
312
|
-
|
|
313
|
-
const level9 = new Level9({
|
|
314
|
-
value: "level9",
|
|
315
|
-
children: [level10Item1, level10Item2],
|
|
316
|
-
});
|
|
317
|
-
const level8 = new Level8({
|
|
318
|
-
value: "level8",
|
|
319
|
-
child: level9,
|
|
320
|
-
children: [],
|
|
321
|
-
});
|
|
322
|
-
const level7 = new Level7({
|
|
323
|
-
value: "level7",
|
|
324
|
-
child: level8,
|
|
325
|
-
children: [],
|
|
326
|
-
});
|
|
327
|
-
const level6 = new Level6({
|
|
328
|
-
value: "level6",
|
|
329
|
-
child: level7,
|
|
330
|
-
children: [],
|
|
331
|
-
});
|
|
332
|
-
const level5 = new Level5({
|
|
333
|
-
value: "level5",
|
|
334
|
-
child: level6,
|
|
335
|
-
children: [],
|
|
336
|
-
});
|
|
337
|
-
const level4 = new Level4({
|
|
338
|
-
value: "level4",
|
|
339
|
-
child: level5,
|
|
340
|
-
children: [],
|
|
341
|
-
});
|
|
342
|
-
const level3 = new Level3({
|
|
343
|
-
value: "level3",
|
|
344
|
-
child: level4,
|
|
345
|
-
children: [],
|
|
346
|
-
});
|
|
347
|
-
const level2 = new Level2({
|
|
348
|
-
value: "level2",
|
|
349
|
-
child: level3,
|
|
350
|
-
children: [],
|
|
351
|
-
});
|
|
352
|
-
const level1 = new Level1({
|
|
353
|
-
value: "level1",
|
|
354
|
-
child: level2,
|
|
355
|
-
children: [],
|
|
356
|
-
});
|
|
357
|
-
const root = new Root({
|
|
358
|
-
name: "root",
|
|
359
|
-
child: level1,
|
|
360
|
-
children: [],
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
level10Item1.props.value = "level10-item1-changed";
|
|
364
|
-
|
|
365
|
-
const itemHistory = level10Item1.getHistory();
|
|
366
|
-
expect(itemHistory.length).toBeGreaterThan(0);
|
|
367
|
-
expect(
|
|
368
|
-
itemHistory.some((h) => h.currentValue === "level10-item1-changed")
|
|
369
|
-
).toBe(true);
|
|
370
|
-
|
|
371
|
-
const newItem = new Level10({ value: "new-level10" });
|
|
372
|
-
level9.props.children = [...level9.props.children, newItem];
|
|
373
|
-
|
|
374
|
-
const level9Changes = level9.getChanges();
|
|
375
|
-
expect(level9Changes.hasChanges()).toBe(true);
|
|
376
|
-
expect(level9Changes.hasCreates()).toBe(true);
|
|
377
|
-
});
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
describe("Mixed depth - Arrays at various levels", () => {
|
|
381
|
-
it("should handle complex nested structures with arrays", () => {
|
|
382
|
-
const level3Item = new Level3({
|
|
383
|
-
value: "level3-array-item",
|
|
384
|
-
children: [],
|
|
385
|
-
});
|
|
386
|
-
const level2WithArray = new Level2({
|
|
387
|
-
value: "level2",
|
|
388
|
-
children: [level3Item],
|
|
389
|
-
});
|
|
390
|
-
const level1 = new Level1({
|
|
391
|
-
value: "level1",
|
|
392
|
-
child: level2WithArray,
|
|
393
|
-
children: [],
|
|
394
|
-
});
|
|
395
|
-
const root = new Root({
|
|
396
|
-
name: "root",
|
|
397
|
-
child: level1,
|
|
398
|
-
children: [],
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
level3Item.props.value = "level3-array-changed";
|
|
402
|
-
|
|
403
|
-
const itemHistory = level3Item.getHistory();
|
|
404
|
-
expect(itemHistory.length).toBeGreaterThan(0);
|
|
405
|
-
expect(
|
|
406
|
-
itemHistory.some((h) => h.currentValue === "level3-array-changed")
|
|
407
|
-
).toBe(true);
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
|
|
411
|
-
describe("Depth Capability Report", () => {
|
|
412
|
-
it("should verify tracking works at all depth levels (1-10)", () => {
|
|
413
|
-
const results: { depth: number; works: boolean; entityName: string }[] =
|
|
414
|
-
[];
|
|
415
|
-
|
|
416
|
-
{
|
|
417
|
-
const level1 = new Level1({ value: "level1", children: [] });
|
|
418
|
-
level1.props.value = "changed-1";
|
|
419
|
-
const works = level1
|
|
420
|
-
.getHistory()
|
|
421
|
-
.some((h) => h.currentValue === "changed-1");
|
|
422
|
-
results.push({ depth: 1, works, entityName: "Level1" });
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
{
|
|
426
|
-
const level2 = new Level2({ value: "level2", children: [] });
|
|
427
|
-
level2.props.value = "changed-2";
|
|
428
|
-
const works = level2
|
|
429
|
-
.getHistory()
|
|
430
|
-
.some((h) => h.currentValue === "changed-2");
|
|
431
|
-
results.push({ depth: 2, works, entityName: "Level2" });
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
{
|
|
435
|
-
const level3 = new Level3({ value: "level3", children: [] });
|
|
436
|
-
level3.props.value = "changed-3";
|
|
437
|
-
const works = level3
|
|
438
|
-
.getHistory()
|
|
439
|
-
.some((h) => h.currentValue === "changed-3");
|
|
440
|
-
results.push({ depth: 3, works, entityName: "Level3" });
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
{
|
|
444
|
-
const level5 = new Level5({ value: "level5", children: [] });
|
|
445
|
-
level5.props.value = "changed-5";
|
|
446
|
-
const works = level5
|
|
447
|
-
.getHistory()
|
|
448
|
-
.some((h) => h.currentValue === "changed-5");
|
|
449
|
-
results.push({ depth: 5, works, entityName: "Level5" });
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
{
|
|
453
|
-
const level10 = new Level10({ value: "level10" });
|
|
454
|
-
level10.props.value = "changed-10";
|
|
455
|
-
const works = level10
|
|
456
|
-
.getHistory()
|
|
457
|
-
.some((h) => h.currentValue === "changed-10");
|
|
458
|
-
results.push({ depth: 10, works, entityName: "Level10" });
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
results.forEach((r) => {
|
|
462
|
-
const status = r.works ? "✓" : "✗";
|
|
463
|
-
console.log(
|
|
464
|
-
` ${r.depth.toString().padStart(2)} | ${status} | ${
|
|
465
|
-
r.entityName
|
|
466
|
-
}`
|
|
467
|
-
);
|
|
468
|
-
});
|
|
469
|
-
|
|
470
|
-
expect(results.every((r) => r.works)).toBe(true);
|
|
471
|
-
});
|
|
472
|
-
|
|
473
|
-
it("should confirm no depth limit for nested structures", () => {
|
|
474
|
-
const level10 = new Level10({ value: "level10" });
|
|
475
|
-
const level9 = new Level9({
|
|
476
|
-
value: "level9",
|
|
477
|
-
child: level10,
|
|
478
|
-
children: [],
|
|
479
|
-
});
|
|
480
|
-
const level8 = new Level8({
|
|
481
|
-
value: "level8",
|
|
482
|
-
child: level9,
|
|
483
|
-
children: [],
|
|
484
|
-
});
|
|
485
|
-
const level7 = new Level7({
|
|
486
|
-
value: "level7",
|
|
487
|
-
child: level8,
|
|
488
|
-
children: [],
|
|
489
|
-
});
|
|
490
|
-
const level6 = new Level6({
|
|
491
|
-
value: "level6",
|
|
492
|
-
child: level7,
|
|
493
|
-
children: [],
|
|
494
|
-
});
|
|
495
|
-
const level5 = new Level5({
|
|
496
|
-
value: "level5",
|
|
497
|
-
child: level6,
|
|
498
|
-
children: [],
|
|
499
|
-
});
|
|
500
|
-
const level4 = new Level4({
|
|
501
|
-
value: "level4",
|
|
502
|
-
child: level5,
|
|
503
|
-
children: [],
|
|
504
|
-
});
|
|
505
|
-
const level3 = new Level3({
|
|
506
|
-
value: "level3",
|
|
507
|
-
child: level4,
|
|
508
|
-
children: [],
|
|
509
|
-
});
|
|
510
|
-
const level2 = new Level2({
|
|
511
|
-
value: "level2",
|
|
512
|
-
child: level3,
|
|
513
|
-
children: [],
|
|
514
|
-
});
|
|
515
|
-
const level1 = new Level1({
|
|
516
|
-
value: "level1",
|
|
517
|
-
child: level2,
|
|
518
|
-
children: [],
|
|
519
|
-
});
|
|
520
|
-
const root = new Root({ name: "root", child: level1, children: [] });
|
|
521
|
-
|
|
522
|
-
// Modify all levels
|
|
523
|
-
const entities = [
|
|
524
|
-
root,
|
|
525
|
-
level1,
|
|
526
|
-
level2,
|
|
527
|
-
level3,
|
|
528
|
-
level4,
|
|
529
|
-
level5,
|
|
530
|
-
level6,
|
|
531
|
-
level7,
|
|
532
|
-
level8,
|
|
533
|
-
level9,
|
|
534
|
-
level10,
|
|
535
|
-
] as const;
|
|
536
|
-
|
|
537
|
-
entities.forEach((entity, index) => {
|
|
538
|
-
const propToChange = index === 0 ? "name" : "value";
|
|
539
|
-
(entity.props as any)[propToChange] = `changed-${index}`;
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
const allTracked = entities.every(
|
|
543
|
-
(entity) => entity.getHistory().length > 0
|
|
544
|
-
);
|
|
545
|
-
expect(allTracked).toBe(true);
|
|
546
|
-
|
|
547
|
-
const batchOperations = root.getChanges().toBatchOperations();
|
|
548
|
-
|
|
549
|
-
expect(batchOperations.updates.length).toBe(11);
|
|
550
|
-
expect(batchOperations.deletes.length).toBe(0);
|
|
551
|
-
expect(batchOperations.creates.length).toBe(0);
|
|
552
|
-
});
|
|
553
|
-
});
|
|
554
|
-
});
|