@woltz/rich-domain 1.1.0 → 1.2.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.
Files changed (121) hide show
  1. package/CHANGELOG.md +87 -21
  2. package/dist/aggregate-changes.d.ts +164 -0
  3. package/dist/aggregate-changes.d.ts.map +1 -0
  4. package/dist/aggregate-changes.js +281 -0
  5. package/dist/aggregate-changes.js.map +1 -0
  6. package/dist/base-entity.d.ts +32 -8
  7. package/dist/base-entity.d.ts.map +1 -1
  8. package/dist/base-entity.js +117 -86
  9. package/dist/base-entity.js.map +1 -1
  10. package/dist/criteria.d.ts +31 -15
  11. package/dist/criteria.d.ts.map +1 -1
  12. package/dist/criteria.js +151 -61
  13. package/dist/criteria.js.map +1 -1
  14. package/dist/crypto.d.ts +3 -0
  15. package/dist/crypto.d.ts.map +1 -0
  16. package/dist/crypto.js +29 -0
  17. package/dist/crypto.js.map +1 -0
  18. package/dist/entity-changes.d.ts +84 -0
  19. package/dist/entity-changes.d.ts.map +1 -0
  20. package/dist/entity-changes.js +135 -0
  21. package/dist/entity-changes.js.map +1 -0
  22. package/dist/entity-schema-registry.d.ts +148 -0
  23. package/dist/entity-schema-registry.d.ts.map +1 -0
  24. package/dist/entity-schema-registry.js +219 -0
  25. package/dist/entity-schema-registry.js.map +1 -0
  26. package/dist/history-tracker.d.ts +97 -0
  27. package/dist/history-tracker.d.ts.map +1 -0
  28. package/dist/history-tracker.js +805 -0
  29. package/dist/history-tracker.js.map +1 -0
  30. package/dist/id.d.ts +11 -10
  31. package/dist/id.d.ts.map +1 -1
  32. package/dist/id.js +4 -28
  33. package/dist/id.js.map +1 -1
  34. package/dist/index.d.ts +2 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/mapper.d.ts +1 -1
  39. package/dist/mapper.d.ts.map +1 -1
  40. package/dist/mapper.js.map +1 -1
  41. package/dist/paginated-result.d.ts.map +1 -1
  42. package/dist/paginated-result.js +7 -6
  43. package/dist/paginated-result.js.map +1 -1
  44. package/dist/repository/base-repository.d.ts +6 -32
  45. package/dist/repository/base-repository.d.ts.map +1 -1
  46. package/dist/repository/base-repository.js +0 -27
  47. package/dist/repository/base-repository.js.map +1 -1
  48. package/dist/repository/unit-of-work.d.ts +0 -25
  49. package/dist/repository/unit-of-work.d.ts.map +1 -1
  50. package/dist/repository/unit-of-work.js +0 -25
  51. package/dist/repository/unit-of-work.js.map +1 -1
  52. package/dist/types/change-tracker.d.ts +186 -0
  53. package/dist/types/change-tracker.d.ts.map +1 -0
  54. package/dist/types/change-tracker.js +2 -0
  55. package/dist/types/change-tracker.js.map +1 -0
  56. package/dist/types/criteria.d.ts +31 -7
  57. package/dist/types/criteria.d.ts.map +1 -1
  58. package/dist/types/history-tracker.d.ts +11 -0
  59. package/dist/types/history-tracker.d.ts.map +1 -1
  60. package/dist/types/utils.d.ts +0 -1
  61. package/dist/types/utils.d.ts.map +1 -1
  62. package/dist/utils/criteria-operator-validation.d.ts +5 -0
  63. package/dist/utils/criteria-operator-validation.d.ts.map +1 -0
  64. package/dist/utils/criteria-operator-validation.js +143 -0
  65. package/dist/utils/criteria-operator-validation.js.map +1 -0
  66. package/dist/utils/helpers.d.ts +2 -0
  67. package/dist/utils/helpers.d.ts.map +1 -0
  68. package/dist/utils/helpers.js +10 -0
  69. package/dist/utils/helpers.js.map +1 -0
  70. package/dist/validation-error.d.ts.map +1 -1
  71. package/dist/validation-error.js +0 -3
  72. package/dist/validation-error.js.map +1 -1
  73. package/dist/value-object.d.ts +57 -8
  74. package/dist/value-object.d.ts.map +1 -1
  75. package/dist/value-object.js +49 -21
  76. package/dist/value-object.js.map +1 -1
  77. package/eslint.config.js +6 -0
  78. package/package.json +2 -1
  79. package/src/aggregate-changes.ts +335 -0
  80. package/src/base-entity.ts +140 -100
  81. package/src/criteria.ts +264 -82
  82. package/src/crypto.ts +31 -0
  83. package/src/entity-changes.ts +151 -0
  84. package/src/entity-schema-registry.ts +275 -0
  85. package/src/history-tracker.ts +1114 -0
  86. package/src/id.ts +17 -26
  87. package/src/index.ts +8 -2
  88. package/src/mapper.ts +4 -1
  89. package/src/paginated-result.ts +7 -8
  90. package/src/repository/base-repository.ts +6 -37
  91. package/src/repository/unit-of-work.ts +0 -25
  92. package/src/types/change-tracker.ts +221 -0
  93. package/src/types/criteria.ts +95 -17
  94. package/src/types/history-tracker.ts +13 -0
  95. package/src/types/utils.ts +0 -9
  96. package/src/utils/criteria-operator-validation.ts +171 -0
  97. package/src/utils/helpers.ts +6 -0
  98. package/src/validation-error.ts +0 -4
  99. package/src/value-object.ts +84 -23
  100. package/tests/aggregate-changes.test.ts +284 -0
  101. package/tests/criteria.test.ts +366 -90
  102. package/tests/entity-equality.test.ts +38 -61
  103. package/tests/entity-schema-registry.test.ts +382 -0
  104. package/tests/entity-validation.test.ts +7 -94
  105. package/tests/history-tracker.spec.ts +349 -617
  106. package/tests/id.test.ts +41 -44
  107. package/tests/load-test/data.json +346041 -0
  108. package/tests/load-test/entities.ts +97 -0
  109. package/tests/load-test/generate-data.ts +81 -0
  110. package/tests/load-test/lead-to-domain.mapper.ts +24 -0
  111. package/tests/load-test/load.test.ts +38 -0
  112. package/tests/repository.test.ts +30 -54
  113. package/tests/to-json.test.ts +14 -18
  114. package/tests/utils.ts +138 -102
  115. package/tests/value-objects.test.ts +57 -29
  116. package/dist/deep-proxy.d.ts +0 -36
  117. package/dist/deep-proxy.d.ts.map +0 -1
  118. package/dist/deep-proxy.js +0 -384
  119. package/dist/deep-proxy.js.map +0 -1
  120. package/src/deep-proxy.ts +0 -447
  121. package/tests/entity.test.ts +0 -33
package/dist/criteria.js CHANGED
@@ -1,32 +1,32 @@
1
1
  import { InvalidCriteriaError } from "./exceptions";
2
- import { FILTER_OPERATORS, } from "./types";
3
- // ============================================================================
4
- // Filter Types
5
- // ============================================================================
2
+ import { isValidOperatorForType, getValidOperatorsForType, isOperator, } from "./utils/criteria-operator-validation";
3
+ import { parseQueryValue } from "./utils/helpers";
6
4
  export class Criteria {
7
5
  constructor() {
8
6
  this._filters = [];
9
7
  this._orders = [];
10
8
  this._pagination = { page: 1, limit: 20, offset: 0 };
11
9
  }
12
- /**
13
- * Create a new Criteria instance
14
- */
15
10
  static create() {
16
11
  return new Criteria();
17
12
  }
18
- /**
19
- * Add a filter condition
20
- */
21
- where(field, operator, value) {
13
+ useAdapter(map) {
14
+ this._adapter = map;
15
+ return this;
16
+ }
17
+ getAdapter() {
18
+ return this._adapter;
19
+ }
20
+ where(field, operator, value, options) {
21
+ this.validateOperator(operator, value);
22
22
  this._filters.push({
23
- field,
23
+ field: this.resolveFieldPath(field),
24
24
  operator,
25
25
  value,
26
+ options,
26
27
  });
27
28
  return this;
28
29
  }
29
- // === Shorthand methods (tipados) ===
30
30
  whereEquals(field, value) {
31
31
  return this.where(field, "equals", value);
32
32
  }
@@ -45,10 +45,18 @@ export class Criteria {
45
45
  whereNotNull(field) {
46
46
  return this.where(field, "isNotNull");
47
47
  }
48
- // === OrderBy ===
48
+ whereSome(field, operator, value) {
49
+ return this.where(field, operator, value, { quantifier: "some" });
50
+ }
51
+ whereEvery(field, operator, value) {
52
+ return this.where(field, operator, value, { quantifier: "every" });
53
+ }
54
+ whereNone(field, operator, value) {
55
+ return this.where(field, operator, value, { quantifier: "none" });
56
+ }
49
57
  orderBy(field, direction = "asc") {
50
58
  this._orders.push({
51
- field: String(field),
59
+ field: this.resolveFieldPath(field),
52
60
  direction,
53
61
  });
54
62
  return this;
@@ -59,12 +67,9 @@ export class Criteria {
59
67
  orderByDesc(field) {
60
68
  return this.orderBy(field, "desc");
61
69
  }
62
- // --------------------------------------------------------------------------
63
- // Search (tipado)
64
- // --------------------------------------------------------------------------
65
70
  search(fields, value) {
66
71
  this._search = {
67
- fields,
72
+ fields: fields.map(this.resolveFieldPath),
68
73
  value,
69
74
  };
70
75
  return this;
@@ -73,9 +78,13 @@ export class Criteria {
73
78
  return !!this._search;
74
79
  }
75
80
  getSearch() {
76
- return this._search;
81
+ return this._search
82
+ ? {
83
+ fields: this._search.fields.map(this.resolveFieldPath),
84
+ value: this._search.value,
85
+ }
86
+ : undefined;
77
87
  }
78
- // === Pagination ===
79
88
  paginate(page, limit) {
80
89
  if (page < 1)
81
90
  page = 1;
@@ -91,12 +100,19 @@ export class Criteria {
91
100
  limit(limit) {
92
101
  return this.paginate(1, limit);
93
102
  }
94
- // === Getters ===
95
103
  getFilters() {
96
- return this._filters;
104
+ return this._filters.map((filter) => ({
105
+ field: this.resolveFieldPath(filter.field),
106
+ operator: filter.operator,
107
+ value: filter.value,
108
+ options: filter.options,
109
+ }));
97
110
  }
98
111
  getOrders() {
99
- return this._orders;
112
+ return this._orders.map((order) => ({
113
+ field: this.resolveFieldPath(order.field),
114
+ direction: order.direction,
115
+ }));
100
116
  }
101
117
  getPagination() {
102
118
  return this._pagination;
@@ -110,40 +126,109 @@ export class Criteria {
110
126
  hasPagination() {
111
127
  return this._pagination !== undefined;
112
128
  }
113
- // === Utilities ===
114
129
  clone() {
115
130
  const cloned = Criteria.create();
116
- cloned._filters = [...this._filters];
117
- cloned._orders = [...this._orders];
131
+ cloned._filters = [
132
+ ...this._filters.map((filter) => ({
133
+ field: this.resolveFieldPath(filter.field),
134
+ operator: filter.operator,
135
+ value: filter.value,
136
+ options: filter.options,
137
+ })),
138
+ ];
139
+ cloned._orders = [
140
+ ...this._orders.map((order) => ({
141
+ field: this.resolveFieldPath(order.field),
142
+ direction: order.direction,
143
+ })),
144
+ ];
118
145
  cloned._pagination = { ...this._pagination };
146
+ cloned._search = this._search
147
+ ? {
148
+ fields: this._search.fields.map(this.resolveFieldPath),
149
+ value: this._search.value,
150
+ }
151
+ : undefined;
152
+ if (this._adapter) {
153
+ cloned.useAdapter(this._adapter);
154
+ }
119
155
  return cloned;
120
156
  }
121
157
  toJSON() {
122
158
  return {
123
- filters: this._filters,
124
- orders: this._orders,
159
+ filters: this._filters.map((filter) => ({
160
+ field: this.resolveFieldPath(filter.field),
161
+ operator: filter.operator,
162
+ value: filter.value,
163
+ options: filter.options,
164
+ })),
165
+ orders: this._orders.map((order) => ({
166
+ field: this.resolveFieldPath(order.field),
167
+ direction: order.direction,
168
+ })),
125
169
  pagination: this._pagination,
126
- search: this._search,
170
+ search: this._search
171
+ ? {
172
+ fields: this._search.fields.map(this.resolveFieldPath),
173
+ value: this._search.value,
174
+ }
175
+ : undefined,
127
176
  };
128
177
  }
129
- static fromObject(obj) {
178
+ static fromObject(obj, adapter) {
130
179
  const criteria = Criteria.create();
131
- if (obj.filters)
180
+ if (adapter) {
181
+ criteria.useAdapter(adapter);
182
+ }
183
+ if (obj.filters) {
184
+ for (const filter of obj.filters) {
185
+ filter.field = criteria.resolveFieldPath(filter.field);
186
+ criteria.validateOperator(filter.operator, filter.value);
187
+ }
132
188
  criteria._filters = [...obj.filters];
189
+ }
133
190
  if (obj.orders)
134
- criteria._orders = [...obj.orders];
191
+ criteria._orders = [
192
+ ...obj.orders.map((order) => ({
193
+ field: criteria.resolveFieldPath(order.field),
194
+ direction: order.direction,
195
+ })),
196
+ ];
135
197
  if (obj.pagination)
136
198
  criteria._pagination = { ...obj.pagination };
137
199
  if (obj.search)
138
- criteria._search = { ...obj.search };
200
+ criteria._search = {
201
+ ...obj.search,
202
+ fields: obj.search.fields.map(criteria.resolveFieldPath),
203
+ };
139
204
  return criteria;
140
205
  }
141
- static fromQueryParams(query) {
206
+ resolveFieldPath(field) {
207
+ if (!this?._adapter)
208
+ return field;
209
+ if (this._adapter[field]) {
210
+ return this._adapter[field];
211
+ }
212
+ const parts = field.split(".");
213
+ for (let i = parts.length; i > 0; i--) {
214
+ const prefix = parts.slice(0, i).join(".");
215
+ if (this._adapter[prefix]) {
216
+ const rest = parts.slice(i).join(".");
217
+ return rest
218
+ ? `${this._adapter[prefix]}.${rest}`
219
+ : this._adapter[prefix];
220
+ }
221
+ }
222
+ return field;
223
+ }
224
+ static fromQueryParams(query, adapter) {
142
225
  const criteria = Criteria.create();
226
+ if (adapter) {
227
+ criteria.useAdapter(adapter);
228
+ }
143
229
  for (const [key, value] of Object.entries(query)) {
144
- // Pagination
145
230
  if (key === "page") {
146
- continue; // We'll handle pagination after
231
+ continue;
147
232
  }
148
233
  if (key === "limit") {
149
234
  continue;
@@ -151,36 +236,49 @@ export class Criteria {
151
236
  if (key === "sort") {
152
237
  continue;
153
238
  }
154
- const [field, operatorRaw] = key.split(":");
155
- if (!operatorRaw || !field)
239
+ const [field, operatorWithQuantifier] = key.split(":");
240
+ if (!operatorWithQuantifier || !field)
156
241
  continue;
242
+ const [operatorRaw, quantifierRaw] = operatorWithQuantifier.split("@");
157
243
  const operator = isOperator(operatorRaw) ? operatorRaw : null;
158
- if (!operator)
244
+ if (!operator) {
159
245
  throw new InvalidCriteriaError(`Invalid filter operator`, operatorRaw);
246
+ }
247
+ const validQuantifiers = ["some", "every", "none"];
248
+ const quantifier = quantifierRaw && validQuantifiers.includes(quantifierRaw)
249
+ ? quantifierRaw
250
+ : undefined;
251
+ if (quantifierRaw && !quantifier) {
252
+ throw new InvalidCriteriaError(`Invalid quantifier. Valid values: ${validQuantifiers.join(", ")}`, quantifierRaw);
253
+ }
254
+ const options = quantifier
255
+ ? { quantifier }
256
+ : undefined;
160
257
  let parsedValue = value;
258
+ const resolvedField = criteria.resolveFieldPath(field);
161
259
  if (operator === "between") {
162
260
  parsedValue = value
163
261
  .split(",")
164
262
  .map((v) => parseQueryValue(v.trim()));
165
263
  if (parsedValue.length === 2) {
166
- criteria.whereBetween(field, parsedValue[0], parsedValue[1]);
264
+ criteria.where(resolvedField, "between", [parsedValue[0], parsedValue[1]], options);
167
265
  }
168
266
  continue;
169
267
  }
170
268
  if (operator === "in" || operator === "notIn") {
171
269
  parsedValue = value.split(",").map(parseQueryValue);
172
- criteria.where(field, operator, parsedValue);
270
+ criteria.where(field, operator, parsedValue, options);
173
271
  continue;
174
272
  }
175
- criteria.where(field, operator, parseQueryValue(value));
273
+ const parsedFinalValue = parseQueryValue(value);
274
+ criteria.validateOperator(operator, parsedFinalValue);
275
+ criteria.where(field, operator, parsedFinalValue, options);
176
276
  }
177
- // Pagination
178
277
  const page = query.page ? parseInt(query.page) : undefined;
179
278
  const limit = query.limit ? parseInt(query.limit) : undefined;
180
279
  if (page && limit) {
181
280
  criteria.paginate(page, limit);
182
281
  }
183
- // Sorting
184
282
  if (query.orderBy) {
185
283
  const sortParts = query.orderBy.split(",");
186
284
  sortParts.forEach((part) => {
@@ -192,24 +290,16 @@ export class Criteria {
192
290
  const fields = query.searchFields
193
291
  .split(",")
194
292
  .filter(Boolean);
195
- criteria.search(fields, query.search);
293
+ const resolvedFields = fields.map(criteria.resolveFieldPath);
294
+ criteria.search(resolvedFields, query.search);
196
295
  }
197
296
  return criteria;
198
297
  }
199
- }
200
- // ============================================================================
201
- // Helper Functions
202
- // ============================================================================
203
- function parseQueryValue(value) {
204
- if (!isNaN(Number(value)))
205
- return Number(value); // number
206
- if (value === "true" || value === "false")
207
- return value === "true"; // boolean
208
- if (!isNaN(Date.parse(value)))
209
- return new Date(value); // Date
210
- return value; // string
211
- }
212
- function isOperator(value) {
213
- return FILTER_OPERATORS.includes(value);
298
+ validateOperator(operator, value) {
299
+ if (value !== undefined && !isValidOperatorForType(value, operator)) {
300
+ const validOps = getValidOperatorsForType(value);
301
+ throw new InvalidCriteriaError(`Operator "${operator}" is not valid for type "${typeof value}". Valid operators: ${validOps.join(", ")}`, operator);
302
+ }
303
+ }
214
304
  }
215
305
  //# sourceMappingURL=criteria.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"criteria.js","sourceRoot":"","sources":["../src/criteria.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"criteria.js","sourceRoot":"","sources":["../src/criteria.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const UUID: () => string;
2
+ export default UUID;
3
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,IAAI,cAA0B,CAAC;AAC5C,eAAe,IAAI,CAAC"}
package/dist/crypto.js ADDED
@@ -0,0 +1,29 @@
1
+ const customCrypto = {
2
+ randomUUID: () => {
3
+ if (typeof globalThis !== "undefined" &&
4
+ globalThis?.crypto &&
5
+ typeof globalThis.crypto.randomUUID === "function") {
6
+ return globalThis.crypto.randomUUID();
7
+ }
8
+ const hexChars = "0123456789abcdef";
9
+ let uuid = "";
10
+ for (let i = 0; i < 36; i++) {
11
+ if (i === 8 || i === 13 || i === 18 || i === 23) {
12
+ uuid += "-";
13
+ }
14
+ else if (i === 14) {
15
+ uuid += "4";
16
+ }
17
+ else if (i === 19) {
18
+ uuid += hexChars.charAt(Math.floor(Math.random() * 4) + 8);
19
+ }
20
+ else {
21
+ uuid += hexChars.charAt(Math.floor(Math.random() * 16));
22
+ }
23
+ }
24
+ return uuid;
25
+ },
26
+ };
27
+ export const UUID = customCrypto.randomUUID;
28
+ export default UUID;
29
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG;IACnB,UAAU,EAAE,GAAG,EAAE;QACf,IACE,OAAO,UAAU,KAAK,WAAW;YACjC,UAAU,EAAE,MAAM;YAClB,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,EAClD,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QACpC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBAChD,IAAI,IAAI,GAAG,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,IAAI,IAAI,GAAG,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;AAC5C,eAAe,IAAI,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { Operation } from "./types/change-tracker";
2
+ /**
3
+ * Represents the changes filtered for a specific entity.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * const changes = user.getChanges();
8
+ * const postChanges = changes.for('Post');
9
+ *
10
+ * if (postChanges.hasCreates()) {
11
+ * console.log('Created posts:', postChanges.creates);
12
+ * }
13
+ *
14
+ * if (postChanges.hasUpdates()) {
15
+ * postChanges.updates.forEach(({ entity, changed }) => {
16
+ * console.log(`Post ${entity.id} has changed:`, changed);
17
+ * });
18
+ * }
19
+ * ```
20
+ */
21
+ export declare class EntityChanges<T = any> {
22
+ private readonly operations;
23
+ constructor(operations: Operation<T>[]);
24
+ /**
25
+ * Returns all created entities
26
+ */
27
+ get creates(): T[];
28
+ /**
29
+ * Returns all updated entities with their changed fields
30
+ */
31
+ get updates(): Array<{
32
+ entity: T;
33
+ changed: Record<string, any>;
34
+ }>;
35
+ /**
36
+ * Returns all deleted entities
37
+ */
38
+ get deletes(): T[];
39
+ /**
40
+ * Returns the IDs of the created entities
41
+ */
42
+ get createIds(): string[];
43
+ /**
44
+ * Returns the IDs of the updated entities
45
+ */
46
+ get updateIds(): string[];
47
+ /**
48
+ * Returns the IDs of the deleted entities
49
+ */
50
+ get deleteIds(): string[];
51
+ /**
52
+ * Checks if there are any creates
53
+ */
54
+ hasCreates(): boolean;
55
+ /**
56
+ * Checks if there are any updates
57
+ */
58
+ hasUpdates(): boolean;
59
+ /**
60
+ * Checks if there are any deletes
61
+ */
62
+ hasDeletes(): boolean;
63
+ /**
64
+ * Checks if there is any change
65
+ */
66
+ hasChanges(): boolean;
67
+ /**
68
+ * Checks if it is empty (no changes)
69
+ */
70
+ isEmpty(): boolean;
71
+ /**
72
+ * Returns the total number of operations
73
+ */
74
+ get count(): number;
75
+ /**
76
+ * Returns the raw operations (for advanced use cases)
77
+ */
78
+ get rawOperations(): Operation<T>[];
79
+ /**
80
+ * Extracts the ID from an entity
81
+ */
82
+ private extractId;
83
+ }
84
+ //# sourceMappingURL=entity-changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-changes.d.ts","sourceRoot":"","sources":["../src/entity-changes.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,SAAS,EAIV,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE;IAEvD;;OAEG;IACH,IAAI,OAAO,IAAI,CAAC,EAAE,CAIjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,KAAK,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,CAOhE;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,CAAC,EAAE,CAIjB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,EAAE,CAKxB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,EAAE,CAIxB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,EAAE,CAIxB;IAED;;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,CAAC,CAAC,CAAC,EAAE,CAElC;IAED;;OAEG;IACH,OAAO,CAAC,SAAS;CAMlB"}
@@ -0,0 +1,135 @@
1
+ // ============================================================================
2
+ // Entity Changes
3
+ // Changes filtered by entity type
4
+ // ============================================================================
5
+ /**
6
+ * Represents the changes filtered for a specific entity.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const changes = user.getChanges();
11
+ * const postChanges = changes.for('Post');
12
+ *
13
+ * if (postChanges.hasCreates()) {
14
+ * console.log('Created posts:', postChanges.creates);
15
+ * }
16
+ *
17
+ * if (postChanges.hasUpdates()) {
18
+ * postChanges.updates.forEach(({ entity, changed }) => {
19
+ * console.log(`Post ${entity.id} has changed:`, changed);
20
+ * });
21
+ * }
22
+ * ```
23
+ */
24
+ export class EntityChanges {
25
+ constructor(operations) {
26
+ this.operations = operations;
27
+ }
28
+ /**
29
+ * Returns all created entities
30
+ */
31
+ get creates() {
32
+ return this.operations
33
+ .filter((op) => op.type === "create")
34
+ .map((op) => op.data);
35
+ }
36
+ /**
37
+ * Returns all updated entities with their changed fields
38
+ */
39
+ get updates() {
40
+ return this.operations
41
+ .filter((op) => op.type === "update")
42
+ .map((op) => ({
43
+ entity: op.data,
44
+ changed: op.changedFields,
45
+ }));
46
+ }
47
+ /**
48
+ * Returns all deleted entities
49
+ */
50
+ get deletes() {
51
+ return this.operations
52
+ .filter((op) => op.type === "delete")
53
+ .map((op) => op.data);
54
+ }
55
+ /**
56
+ * Returns the IDs of the created entities
57
+ */
58
+ get createIds() {
59
+ return this.operations
60
+ .filter((op) => op.type === "create")
61
+ .map((op) => this.extractId(op.data))
62
+ .filter((id) => id !== undefined);
63
+ }
64
+ /**
65
+ * Returns the IDs of the updated entities
66
+ */
67
+ get updateIds() {
68
+ return this.operations
69
+ .filter((op) => op.type === "update")
70
+ .map((op) => op.id);
71
+ }
72
+ /**
73
+ * Returns the IDs of the deleted entities
74
+ */
75
+ get deleteIds() {
76
+ return this.operations
77
+ .filter((op) => op.type === "delete")
78
+ .map((op) => op.id);
79
+ }
80
+ /**
81
+ * Checks if there are any creates
82
+ */
83
+ hasCreates() {
84
+ return this.creates.length > 0;
85
+ }
86
+ /**
87
+ * Checks if there are any updates
88
+ */
89
+ hasUpdates() {
90
+ return this.updates.length > 0;
91
+ }
92
+ /**
93
+ * Checks if there are any deletes
94
+ */
95
+ hasDeletes() {
96
+ return this.deletes.length > 0;
97
+ }
98
+ /**
99
+ * Checks if there is any change
100
+ */
101
+ hasChanges() {
102
+ return this.operations.length > 0;
103
+ }
104
+ /**
105
+ * Checks if it is empty (no changes)
106
+ */
107
+ isEmpty() {
108
+ return this.operations.length === 0;
109
+ }
110
+ /**
111
+ * Returns the total number of operations
112
+ */
113
+ get count() {
114
+ return this.operations.length;
115
+ }
116
+ /**
117
+ * Returns the raw operations (for advanced use cases)
118
+ */
119
+ get rawOperations() {
120
+ return [...this.operations];
121
+ }
122
+ /**
123
+ * Extracts the ID from an entity
124
+ */
125
+ extractId(entity) {
126
+ if (!entity)
127
+ return undefined;
128
+ if (entity.id?.value)
129
+ return entity.id.value;
130
+ if (typeof entity.id === "string")
131
+ return entity.id;
132
+ return undefined;
133
+ }
134
+ }
135
+ //# sourceMappingURL=entity-changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-changes.js","sourceRoot":"","sources":["../src/entity-changes.ts"],"names":[],"mappings":"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"}