@woltz/rich-domain 1.8.1 → 1.8.2

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 (175) hide show
  1. package/README.md +106 -47
  2. package/dist/cjs/core/base-aggregate.d.ts +39 -0
  3. package/dist/cjs/core/base-aggregate.d.ts.map +1 -0
  4. package/dist/cjs/core/base-aggregate.js +57 -0
  5. package/dist/cjs/core/base-aggregate.js.map +1 -0
  6. package/dist/cjs/core/base-entity.d.ts +3 -32
  7. package/dist/cjs/core/base-entity.d.ts.map +1 -1
  8. package/dist/cjs/core/base-entity.js +0 -44
  9. package/dist/cjs/core/base-entity.js.map +1 -1
  10. package/dist/cjs/core/entity.d.ts +3 -2
  11. package/dist/cjs/core/entity.d.ts.map +1 -1
  12. package/dist/cjs/core/entity.js +2 -1
  13. package/dist/cjs/core/entity.js.map +1 -1
  14. package/dist/cjs/core/index.d.ts +1 -0
  15. package/dist/cjs/core/index.d.ts.map +1 -1
  16. package/dist/cjs/core/index.js +1 -0
  17. package/dist/cjs/core/index.js.map +1 -1
  18. package/dist/cjs/core/value-object.d.ts +0 -18
  19. package/dist/cjs/core/value-object.d.ts.map +1 -1
  20. package/dist/cjs/core/value-object.js +0 -25
  21. package/dist/cjs/core/value-object.js.map +1 -1
  22. package/dist/esm/core/base-aggregate.d.ts +39 -0
  23. package/dist/esm/core/base-aggregate.d.ts.map +1 -0
  24. package/dist/esm/core/base-aggregate.js +53 -0
  25. package/dist/esm/core/base-aggregate.js.map +1 -0
  26. package/dist/esm/core/base-entity.d.ts +3 -32
  27. package/dist/esm/core/base-entity.d.ts.map +1 -1
  28. package/dist/esm/core/base-entity.js +0 -44
  29. package/dist/esm/core/base-entity.js.map +1 -1
  30. package/dist/esm/core/entity.d.ts +3 -2
  31. package/dist/esm/core/entity.d.ts.map +1 -1
  32. package/dist/esm/core/entity.js +2 -1
  33. package/dist/esm/core/entity.js.map +1 -1
  34. package/dist/esm/core/index.d.ts +1 -0
  35. package/dist/esm/core/index.d.ts.map +1 -1
  36. package/dist/esm/core/index.js +1 -0
  37. package/dist/esm/core/index.js.map +1 -1
  38. package/dist/esm/core/value-object.d.ts +0 -18
  39. package/dist/esm/core/value-object.d.ts.map +1 -1
  40. package/dist/esm/core/value-object.js +0 -25
  41. package/dist/esm/core/value-object.js.map +1 -1
  42. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  43. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  44. package/dist/tsconfig.types.tsbuildinfo +1 -1
  45. package/dist/types/core/base-aggregate.d.ts +39 -0
  46. package/dist/types/core/base-aggregate.d.ts.map +1 -0
  47. package/dist/types/core/base-entity.d.ts +3 -32
  48. package/dist/types/core/base-entity.d.ts.map +1 -1
  49. package/dist/types/core/entity.d.ts +3 -2
  50. package/dist/types/core/entity.d.ts.map +1 -1
  51. package/dist/types/core/index.d.ts +1 -0
  52. package/dist/types/core/index.d.ts.map +1 -1
  53. package/dist/types/core/value-object.d.ts +0 -18
  54. package/dist/types/core/value-object.d.ts.map +1 -1
  55. package/package.json +1 -1
  56. package/dist/cjs/aggregate-changes.d.ts +0 -206
  57. package/dist/cjs/aggregate-changes.d.ts.map +0 -1
  58. package/dist/cjs/aggregate-changes.js +0 -365
  59. package/dist/cjs/aggregate-changes.js.map +0 -1
  60. package/dist/cjs/base-entity.d.ts +0 -90
  61. package/dist/cjs/base-entity.d.ts.map +0 -1
  62. package/dist/cjs/base-entity.js +0 -331
  63. package/dist/cjs/base-entity.js.map +0 -1
  64. package/dist/cjs/change-tracker.d.ts +0 -96
  65. package/dist/cjs/change-tracker.d.ts.map +0 -1
  66. package/dist/cjs/change-tracker.js +0 -789
  67. package/dist/cjs/change-tracker.js.map +0 -1
  68. package/dist/cjs/crypto.d.ts +0 -3
  69. package/dist/cjs/crypto.d.ts.map +0 -1
  70. package/dist/cjs/crypto.js +0 -32
  71. package/dist/cjs/crypto.js.map +0 -1
  72. package/dist/cjs/domain-event.d.ts +0 -23
  73. package/dist/cjs/domain-event.d.ts.map +0 -1
  74. package/dist/cjs/domain-event.js +0 -36
  75. package/dist/cjs/domain-event.js.map +0 -1
  76. package/dist/cjs/entity-changes.d.ts +0 -84
  77. package/dist/cjs/entity-changes.d.ts.map +0 -1
  78. package/dist/cjs/entity-changes.js +0 -136
  79. package/dist/cjs/entity-changes.js.map +0 -1
  80. package/dist/cjs/entity-schema-registry.d.ts +0 -282
  81. package/dist/cjs/entity-schema-registry.d.ts.map +0 -1
  82. package/dist/cjs/entity-schema-registry.js +0 -372
  83. package/dist/cjs/entity-schema-registry.js.map +0 -1
  84. package/dist/cjs/entity.d.ts +0 -7
  85. package/dist/cjs/entity.d.ts.map +0 -1
  86. package/dist/cjs/entity.js +0 -11
  87. package/dist/cjs/entity.js.map +0 -1
  88. package/dist/cjs/id.d.ts +0 -59
  89. package/dist/cjs/id.d.ts.map +0 -1
  90. package/dist/cjs/id.js +0 -92
  91. package/dist/cjs/id.js.map +0 -1
  92. package/dist/cjs/mapper.d.ts +0 -4
  93. package/dist/cjs/mapper.d.ts.map +0 -1
  94. package/dist/cjs/mapper.js +0 -7
  95. package/dist/cjs/mapper.js.map +0 -1
  96. package/dist/cjs/paginated-result.d.ts +0 -54
  97. package/dist/cjs/paginated-result.d.ts.map +0 -1
  98. package/dist/cjs/paginated-result.js +0 -197
  99. package/dist/cjs/paginated-result.js.map +0 -1
  100. package/dist/cjs/value-object.d.ts +0 -49
  101. package/dist/cjs/value-object.d.ts.map +0 -1
  102. package/dist/cjs/value-object.js +0 -129
  103. package/dist/cjs/value-object.js.map +0 -1
  104. package/dist/esm/aggregate-changes.d.ts +0 -206
  105. package/dist/esm/aggregate-changes.d.ts.map +0 -1
  106. package/dist/esm/aggregate-changes.js +0 -361
  107. package/dist/esm/aggregate-changes.js.map +0 -1
  108. package/dist/esm/base-entity.d.ts +0 -90
  109. package/dist/esm/base-entity.d.ts.map +0 -1
  110. package/dist/esm/base-entity.js +0 -327
  111. package/dist/esm/base-entity.js.map +0 -1
  112. package/dist/esm/change-tracker.d.ts +0 -96
  113. package/dist/esm/change-tracker.d.ts.map +0 -1
  114. package/dist/esm/change-tracker.js +0 -785
  115. package/dist/esm/change-tracker.js.map +0 -1
  116. package/dist/esm/crypto.d.ts +0 -3
  117. package/dist/esm/crypto.d.ts.map +0 -1
  118. package/dist/esm/crypto.js +0 -29
  119. package/dist/esm/crypto.js.map +0 -1
  120. package/dist/esm/domain-event.d.ts +0 -23
  121. package/dist/esm/domain-event.d.ts.map +0 -1
  122. package/dist/esm/domain-event.js +0 -32
  123. package/dist/esm/domain-event.js.map +0 -1
  124. package/dist/esm/entity-changes.d.ts +0 -84
  125. package/dist/esm/entity-changes.d.ts.map +0 -1
  126. package/dist/esm/entity-changes.js +0 -132
  127. package/dist/esm/entity-changes.js.map +0 -1
  128. package/dist/esm/entity-schema-registry.d.ts +0 -282
  129. package/dist/esm/entity-schema-registry.d.ts.map +0 -1
  130. package/dist/esm/entity-schema-registry.js +0 -368
  131. package/dist/esm/entity-schema-registry.js.map +0 -1
  132. package/dist/esm/entity.d.ts +0 -7
  133. package/dist/esm/entity.d.ts.map +0 -1
  134. package/dist/esm/entity.js +0 -6
  135. package/dist/esm/entity.js.map +0 -1
  136. package/dist/esm/id.d.ts +0 -59
  137. package/dist/esm/id.d.ts.map +0 -1
  138. package/dist/esm/id.js +0 -85
  139. package/dist/esm/id.js.map +0 -1
  140. package/dist/esm/mapper.d.ts +0 -4
  141. package/dist/esm/mapper.d.ts.map +0 -1
  142. package/dist/esm/mapper.js +0 -3
  143. package/dist/esm/mapper.js.map +0 -1
  144. package/dist/esm/paginated-result.d.ts +0 -54
  145. package/dist/esm/paginated-result.d.ts.map +0 -1
  146. package/dist/esm/paginated-result.js +0 -193
  147. package/dist/esm/paginated-result.js.map +0 -1
  148. package/dist/esm/value-object.d.ts +0 -49
  149. package/dist/esm/value-object.d.ts.map +0 -1
  150. package/dist/esm/value-object.js +0 -125
  151. package/dist/esm/value-object.js.map +0 -1
  152. package/dist/types/aggregate-changes.d.ts +0 -206
  153. package/dist/types/aggregate-changes.d.ts.map +0 -1
  154. package/dist/types/base-entity.d.ts +0 -90
  155. package/dist/types/base-entity.d.ts.map +0 -1
  156. package/dist/types/change-tracker.d.ts +0 -96
  157. package/dist/types/change-tracker.d.ts.map +0 -1
  158. package/dist/types/crypto.d.ts +0 -3
  159. package/dist/types/crypto.d.ts.map +0 -1
  160. package/dist/types/domain-event.d.ts +0 -23
  161. package/dist/types/domain-event.d.ts.map +0 -1
  162. package/dist/types/entity-changes.d.ts +0 -84
  163. package/dist/types/entity-changes.d.ts.map +0 -1
  164. package/dist/types/entity-schema-registry.d.ts +0 -282
  165. package/dist/types/entity-schema-registry.d.ts.map +0 -1
  166. package/dist/types/entity.d.ts +0 -7
  167. package/dist/types/entity.d.ts.map +0 -1
  168. package/dist/types/id.d.ts +0 -59
  169. package/dist/types/id.d.ts.map +0 -1
  170. package/dist/types/mapper.d.ts +0 -4
  171. package/dist/types/mapper.d.ts.map +0 -1
  172. package/dist/types/paginated-result.d.ts +0 -62
  173. package/dist/types/paginated-result.d.ts.map +0 -1
  174. package/dist/types/value-object.d.ts +0 -49
  175. package/dist/types/value-object.d.ts.map +0 -1
@@ -1,331 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseEntity = void 0;
4
- const id_js_1 = require("./id.js");
5
- const validation_error_js_1 = require("./validation-error.js");
6
- const _1 = require(".");
7
- const constants_js_1 = require("./constants.js");
8
- const exceptions_js_1 = require("./exceptions.js");
9
- const change_tracker_js_1 = require("./change-tracker.js");
10
- function getStaticProperty(instance, propertyName) {
11
- return instance.constructor[propertyName];
12
- }
13
- class BaseEntity {
14
- _props;
15
- tracker;
16
- proxiedProps;
17
- snapshot = null;
18
- validationConfig;
19
- entityHooks;
20
- entitySchema;
21
- domainEvents = [];
22
- static validation;
23
- static hooks;
24
- constructor(props) {
25
- const validation = getStaticProperty(this, "validation");
26
- const hooks = getStaticProperty(this, "hooks");
27
- if (!props.id) {
28
- props.id = new id_js_1.Id();
29
- }
30
- if (hooks?.onBeforeCreate) {
31
- hooks.onBeforeCreate(props);
32
- }
33
- this.entityHooks = hooks;
34
- if (validation?.schema) {
35
- this.entitySchema = validation.schema;
36
- }
37
- this.validationConfig = {
38
- ...constants_js_1.DEFAULT_VALIDATION_CONFIG,
39
- ...validation?.config,
40
- };
41
- let finalProps = { ...props };
42
- if (this.entitySchema && this.validationConfig.onCreate) {
43
- this.validateProps(finalProps);
44
- }
45
- this._props = finalProps;
46
- this.tracker = new change_tracker_js_1.ChangeTracker(this._props, this.constructor.name);
47
- if (this.validationConfig.onUpdate) {
48
- this.setupUpdateValidation();
49
- }
50
- this.proxiedProps = this.tracker.createProxy();
51
- if (hooks?.rules) {
52
- hooks.rules(this);
53
- }
54
- if (hooks?.onCreate) {
55
- hooks.onCreate(this);
56
- }
57
- this.takeSnapshot();
58
- }
59
- validateProps(props) {
60
- if (!this.entitySchema)
61
- return;
62
- const result = this.entitySchema["~standard"].validate(props);
63
- if (result instanceof Promise) {
64
- throw new exceptions_js_1.DomainError("Async validation not supported in constructor. Use sync validation schema.");
65
- }
66
- if (result.issues && result.issues.length > 0) {
67
- const validationError = new validation_error_js_1.ValidationError(result.issues.map((issue) => ({
68
- path: issue.path?.map((p) => this.extractPathKey(p)) || [],
69
- message: issue.message,
70
- })), {
71
- entityName: this.constructor.name,
72
- });
73
- if (this.validationConfig.throwOnError) {
74
- throw validationError;
75
- }
76
- this._validationError = validationError;
77
- }
78
- }
79
- extractPathKey(pathSegment) {
80
- if (pathSegment === null || pathSegment === undefined) {
81
- return "";
82
- }
83
- if (typeof pathSegment === "string" || typeof pathSegment === "number") {
84
- return String(pathSegment);
85
- }
86
- if (typeof pathSegment === "symbol") {
87
- return pathSegment.toString();
88
- }
89
- if (typeof pathSegment === "object" && "key" in pathSegment) {
90
- return String(pathSegment.key);
91
- }
92
- return String(pathSegment);
93
- }
94
- /**
95
- * Setup validation that runs on every property change.
96
- * Uses the ChangeTracker's onChangeValidator callback.
97
- */
98
- setupUpdateValidation() {
99
- const self = this;
100
- this.tracker.setOnChangeValidator((path, newValue) => {
101
- const originalValue = self._props[path];
102
- self._props[path] = newValue;
103
- try {
104
- if (self.entityHooks?.onBeforeUpdate && self.snapshot) {
105
- const shouldContinue = self.entityHooks.onBeforeUpdate(self, self.snapshot);
106
- if (!shouldContinue) {
107
- self._props[path] = originalValue;
108
- return false;
109
- }
110
- }
111
- if (self.entitySchema) {
112
- const result = self.entitySchema["~standard"].validate(self._props);
113
- if (result instanceof Promise) {
114
- console.warn("Async validation on update not supported. Consider using sync validation.");
115
- self._props[path] = originalValue;
116
- return true;
117
- }
118
- if (result.issues && result.issues.length > 0) {
119
- const validationError = new validation_error_js_1.ValidationError(result.issues.map((issue) => ({
120
- path: issue.path?.map((p) => self.extractPathKey(p)) || [],
121
- message: issue.message,
122
- })), {
123
- entityName: self.constructor.name,
124
- });
125
- self._props[path] = originalValue;
126
- if (self.validationConfig.throwOnError) {
127
- throw validationError;
128
- }
129
- console.error("Validation failed on update:", validationError);
130
- return false;
131
- }
132
- }
133
- if (self.entityHooks?.rules) {
134
- try {
135
- self.entityHooks.rules(self);
136
- }
137
- catch (error) {
138
- self._props[path] = originalValue;
139
- if (self.validationConfig.throwOnError) {
140
- throw error;
141
- }
142
- console.error("Rules validation failed on update:", error);
143
- return false;
144
- }
145
- }
146
- self._props[path] = originalValue;
147
- return true;
148
- }
149
- catch (error) {
150
- self._props[path] = originalValue;
151
- throw error;
152
- }
153
- });
154
- }
155
- takeSnapshot() {
156
- this.snapshot = this.deepCloneProps(this._props);
157
- }
158
- deepCloneProps(obj, seen = new WeakSet()) {
159
- if (obj === null || obj === undefined)
160
- return obj;
161
- if (typeof obj !== "object")
162
- return obj;
163
- if (obj instanceof id_js_1.Id)
164
- return obj;
165
- if (obj instanceof Date)
166
- return new Date(obj.getTime());
167
- if (seen.has(obj)) {
168
- return obj;
169
- }
170
- if (obj instanceof BaseEntity) {
171
- return obj;
172
- }
173
- if (obj.constructor &&
174
- obj.constructor.name !== "Object" &&
175
- obj.constructor.name !== "Array") {
176
- if (typeof obj.toJSON === "function" &&
177
- typeof obj.equals === "function") {
178
- return obj;
179
- }
180
- }
181
- seen.add(obj);
182
- if (Array.isArray(obj)) {
183
- return obj.map((item) => this.deepCloneProps(item, seen));
184
- }
185
- if (obj.constructor === Object) {
186
- try {
187
- return structuredClone(obj);
188
- }
189
- catch {
190
- const cloned = {};
191
- for (const key in obj) {
192
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
193
- cloned[key] = this.deepCloneProps(obj[key], seen);
194
- }
195
- }
196
- return cloned;
197
- }
198
- }
199
- return obj;
200
- }
201
- get id() {
202
- return this._props.id;
203
- }
204
- isNew() {
205
- return this._props.id.isNew();
206
- }
207
- /**
208
- * Check equality with another entity by comparing IDs
209
- */
210
- equals(other) {
211
- if (!other) {
212
- return false;
213
- }
214
- if (other instanceof BaseEntity) {
215
- return this.id.equals(other.id);
216
- }
217
- if (other instanceof id_js_1.Id) {
218
- return this.id.equals(other);
219
- }
220
- if (typeof other === "string") {
221
- return this.id.equals(other);
222
- }
223
- return false;
224
- }
225
- get props() {
226
- return this.proxiedProps;
227
- }
228
- /**
229
- * Check if entity has validation errors (when throwOnError is false)
230
- */
231
- get hasValidationErrors() {
232
- return !!this._validationError;
233
- }
234
- /**
235
- * Get validation errors (when throwOnError is false)
236
- */
237
- get validationErrors() {
238
- return this._validationError;
239
- }
240
- /**
241
- * Returns all detected changes as AggregateChanges.
242
- *
243
- * @example
244
- * ```typescript
245
- * const changes = user.getChanges();
246
- * const batch = changes.toBatchOperations();
247
- *
248
- * for (const del of batch.deletes) { ... }
249
- * for (const create of batch.creates) { ... }
250
- * for (const upd of batch.updates) { ... }
251
- * ```
252
- */
253
- getChanges() {
254
- return this.tracker.getChanges();
255
- }
256
- /**
257
- * Returns the change history (for debugging).
258
- */
259
- getHistory() {
260
- return this.tracker.getHistory();
261
- }
262
- /**
263
- * Clears history and marks entity as "clean".
264
- * Call this after successfully persisting to the database.
265
- */
266
- markAsClean() {
267
- this.tracker.markAsClean();
268
- this.takeSnapshot();
269
- }
270
- /**
271
- * Add a domain event to this entity
272
- */
273
- addDomainEvent(event) {
274
- this.domainEvents.push(event);
275
- }
276
- /**
277
- * Dispatch all events through the event bus
278
- */
279
- async dispatchAll(bus) {
280
- await bus.publishAll(this.getUncommittedEvents());
281
- this.clearEvents();
282
- }
283
- /**
284
- * Get all uncommitted domain events
285
- */
286
- getUncommittedEvents() {
287
- return [...this.domainEvents];
288
- }
289
- /**
290
- * Clear all domain events (call after publishing)
291
- */
292
- clearEvents() {
293
- this.domainEvents = [];
294
- }
295
- /**
296
- * Check if entity has uncommitted events
297
- */
298
- hasUncommittedEvents() {
299
- return this.domainEvents.length > 0;
300
- }
301
- toJSON() {
302
- return this.deepToJson(this._props);
303
- }
304
- deepToJson(obj) {
305
- if (obj === null || obj === undefined)
306
- return obj;
307
- if (obj instanceof id_js_1.Id)
308
- return obj.value;
309
- if (obj instanceof _1.ValueObject)
310
- return obj.value;
311
- if (obj instanceof Date)
312
- return obj.toISOString();
313
- if (Array.isArray(obj))
314
- return obj.map((item) => this.deepToJson(item));
315
- if (obj instanceof BaseEntity)
316
- return obj.toJSON();
317
- if (obj && typeof obj.toJSON === "function")
318
- return obj.toJSON();
319
- if (typeof obj === "object") {
320
- const result = {};
321
- for (const key in obj) {
322
- if (obj.hasOwnProperty(key))
323
- result[key] = this.deepToJson(obj[key]);
324
- }
325
- return result;
326
- }
327
- return obj;
328
- }
329
- }
330
- exports.BaseEntity = BaseEntity;
331
- //# sourceMappingURL=base-entity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-entity.js","sourceRoot":"","sources":["../../src/base-entity.ts"],"names":[],"mappings":"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"}
@@ -1,96 +0,0 @@
1
- import { HistoryEntry } from "./types/index.js";
2
- import { AggregateChanges } from "./aggregate-changes.js";
3
- /**
4
- * Callback for validation on property change.
5
- * Return false to reject the change, or throw an error.
6
- */
7
- export type OnChangeValidator = (path: string, newValue: any) => boolean | void;
8
- /**
9
- * Tracks changes in Aggregates using Proxy.
10
- *
11
- * Features:
12
- * - Tracks changes in primitive properties
13
- * - Tracks changes in nested entities (1:1)
14
- * - Tracks changes in collections (1:N)
15
- * - Calculates depth automatically
16
- * - Generates AggregateChanges for persistence
17
- * - Supports validation on change via onChangeValidator
18
- */
19
- export declare class ChangeTracker {
20
- private target;
21
- private rootEntityName;
22
- private path;
23
- private depth;
24
- private parentId?;
25
- private parentEntity?;
26
- private rootTracker?;
27
- private history;
28
- private originalValues;
29
- private trackedArrays;
30
- private trackedEntities;
31
- private onChangeValidator?;
32
- constructor(target: any, rootEntityName: string, path?: string, depth?: number, parentId?: string | undefined, parentEntity?: string | undefined, rootTracker?: ChangeTracker | undefined);
33
- /**
34
- * Sets a validator callback that will be called on every property change.
35
- * The validator can:
36
- * - Return false to reject the change (value will be reverted)
37
- * - Throw an error to reject the change with an error
38
- * - Return true/undefined to accept the change
39
- */
40
- setOnChangeValidator(validator: OnChangeValidator): void;
41
- private captureInitialState;
42
- private captureEntityState;
43
- private captureArrayState;
44
- createProxy(): any;
45
- private createArrayProxy;
46
- /**
47
- * Returns all detected changes as AggregateChanges.
48
- */
49
- getChanges<TEntityMap = Record<string, any>>(): AggregateChanges<TEntityMap>;
50
- private analyzeRootChanges;
51
- private analyzeCollectionChanges;
52
- /**
53
- * Recursively marks all nested items as created when a parent is created.
54
- */
55
- private markNestedItemsAsCreated;
56
- /**
57
- * Recursively marks all nested items as deleted when a parent is deleted.
58
- * Uses the original captured state to find nested items.
59
- */
60
- private markNestedItemsAsDeleted;
61
- /**
62
- * Recursively marks nested items as deleted from a JSON object.
63
- * This is used when processing cloned (JSON) state.
64
- */
65
- private markNestedJsonItemAsDeleted;
66
- /**
67
- * Extracts identity key from a JSON object by looking at the original Entity instances.
68
- */
69
- private extractIdentityKeyFromJson;
70
- private collectNestedArrays;
71
- private analyzeEntityChanges;
72
- private detectEntityChangeState;
73
- private detectArrayChanges;
74
- private detectChangedFields;
75
- private handleArrayAssignment;
76
- private handleEntityChange;
77
- private getRootTracker;
78
- private buildPath;
79
- private shouldSkipProperty;
80
- private getValueAtPath;
81
- private extractRelationField;
82
- private getItemKey;
83
- private getEntityId;
84
- private getEntityName;
85
- private isEqual;
86
- private deepEqual;
87
- private hasChanged;
88
- private cloneArray;
89
- private deepClone;
90
- private normalizeAndStringify;
91
- getHistory(): HistoryEntry[];
92
- clearHistory(): void;
93
- markAsClean(): void;
94
- getTarget(): any;
95
- }
96
- //# sourceMappingURL=change-tracker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"change-tracker.d.ts","sourceRoot":"","sources":["../../src/change-tracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,IAAI,CAAC;AAEhF;;;;;;;;;;GAUG;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;IAmC1B,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;IA8B3B,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;IAOlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,SAAS;IA4CjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAsCjB,OAAO,CAAC,qBAAqB;IAkB7B,UAAU,IAAI,YAAY,EAAE;IAI5B,YAAY,IAAI,IAAI;IASpB,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,GAAG;CAGjB"}