@woltz/rich-domain 0.2.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +23 -75
  2. package/LICENSE +20 -20
  3. package/README.md +37 -20
  4. package/dist/base-entity.d.ts +2 -2
  5. package/dist/base-entity.d.ts.map +1 -1
  6. package/dist/base-entity.js +6 -4
  7. package/dist/base-entity.js.map +1 -1
  8. package/dist/criteria.d.ts +5 -11
  9. package/dist/criteria.d.ts.map +1 -1
  10. package/dist/criteria.js +4 -3
  11. package/dist/criteria.js.map +1 -1
  12. package/dist/deep-proxy.d.ts +3 -1
  13. package/dist/deep-proxy.d.ts.map +1 -1
  14. package/dist/deep-proxy.js +116 -29
  15. package/dist/deep-proxy.js.map +1 -1
  16. package/dist/domain-event-bus.d.ts +5 -6
  17. package/dist/domain-event-bus.d.ts.map +1 -1
  18. package/dist/domain-event-bus.js +3 -11
  19. package/dist/domain-event-bus.js.map +1 -1
  20. package/dist/domain-event.d.ts +1 -31
  21. package/dist/domain-event.d.ts.map +1 -1
  22. package/dist/domain-event.js +2 -1
  23. package/dist/domain-event.js.map +1 -1
  24. package/dist/entity.d.ts +2 -2
  25. package/dist/entity.js +1 -1
  26. package/dist/exceptions.d.ts +251 -0
  27. package/dist/exceptions.d.ts.map +1 -0
  28. package/dist/exceptions.js +321 -0
  29. package/dist/exceptions.js.map +1 -0
  30. package/dist/id.d.ts +3 -3
  31. package/dist/id.d.ts.map +1 -1
  32. package/dist/id.js +15 -4
  33. package/dist/id.js.map +1 -1
  34. package/dist/index.d.ts +2 -5
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -8
  37. package/dist/index.js.map +1 -1
  38. package/dist/paginated-result.d.ts.map +1 -1
  39. package/dist/paginated-result.js +12 -1
  40. package/dist/paginated-result.js.map +1 -1
  41. package/dist/repository/index.d.ts +2 -39
  42. package/dist/repository/index.d.ts.map +1 -1
  43. package/dist/repository/index.js +2 -39
  44. package/dist/repository/index.js.map +1 -1
  45. package/dist/repository/unit-of-work.d.ts +0 -11
  46. package/dist/repository/unit-of-work.d.ts.map +1 -1
  47. package/dist/repository/unit-of-work.js +0 -35
  48. package/dist/repository/unit-of-work.js.map +1 -1
  49. package/dist/types/criteria.d.ts +6 -2
  50. package/dist/types/criteria.d.ts.map +1 -1
  51. package/dist/types/criteria.js +1 -1
  52. package/dist/types/criteria.js.map +1 -1
  53. package/dist/types/domain-event.d.ts +32 -0
  54. package/dist/types/domain-event.d.ts.map +1 -0
  55. package/dist/types/domain-event.js +2 -0
  56. package/dist/types/domain-event.js.map +1 -0
  57. package/dist/types/domain.d.ts +2 -2
  58. package/dist/types/domain.d.ts.map +1 -1
  59. package/dist/types/history-tracker.d.ts +1 -1
  60. package/dist/types/history-tracker.d.ts.map +1 -1
  61. package/dist/types/index.d.ts +1 -0
  62. package/dist/types/index.d.ts.map +1 -1
  63. package/dist/types/index.js +1 -0
  64. package/dist/types/index.js.map +1 -1
  65. package/dist/value-object.d.ts +1 -1
  66. package/dist/value-object.d.ts.map +1 -1
  67. package/dist/value-object.js +2 -5
  68. package/dist/value-object.js.map +1 -1
  69. package/eslint.config.js +3 -3
  70. package/jest.config.js +1 -1
  71. package/package.json +14 -20
  72. package/src/base-entity.ts +6 -5
  73. package/src/criteria.ts +11 -11
  74. package/src/deep-proxy.ts +447 -339
  75. package/src/domain-event-bus.ts +152 -166
  76. package/src/domain-event.ts +53 -90
  77. package/src/entity.ts +16 -16
  78. package/src/exceptions.ts +435 -0
  79. package/src/id.ts +107 -94
  80. package/src/index.ts +26 -9
  81. package/src/paginated-result.ts +14 -1
  82. package/src/repository/index.ts +2 -44
  83. package/src/repository/unit-of-work.ts +1 -44
  84. package/src/types/criteria.ts +7 -2
  85. package/src/types/domain-event.ts +38 -0
  86. package/src/types/domain.ts +2 -3
  87. package/src/types/history-tracker.ts +1 -1
  88. package/src/types/index.ts +1 -0
  89. package/src/validation-error.ts +97 -97
  90. package/src/value-object.ts +3 -6
  91. package/tests/criteria.test.ts +8 -0
  92. package/tests/domain-events.test.ts +431 -445
  93. package/tests/entity-validation.test.ts +2 -2
  94. package/tests/entity.test.ts +33 -33
  95. package/tests/history-tracker.spec.ts +57 -17
  96. package/tests/id.test.ts +341 -341
  97. package/tests/repository.test.ts +8 -4
  98. package/tests/to-json.test.ts +103 -91
  99. package/tests/utils.ts +254 -151
  100. package/tests/value-object-validation.test.ts +0 -9
  101. package/tests/value-objects.test.ts +52 -52
  102. package/tsconfig.json +2 -24
  103. package/.github/workflows/ci.yml +0 -40
  104. package/.husky/commit-msg +0 -1
  105. package/.husky/pre-commit +0 -1
  106. package/.vscode/settings.json +0 -3
  107. package/commitlint.config.js +0 -23
  108. package/dist/filtering.d.ts +0 -107
  109. package/dist/filtering.d.ts.map +0 -1
  110. package/dist/filtering.js +0 -202
  111. package/dist/filtering.js.map +0 -1
  112. package/dist/ordering.d.ts +0 -93
  113. package/dist/ordering.d.ts.map +0 -1
  114. package/dist/ordering.js +0 -154
  115. package/dist/ordering.js.map +0 -1
  116. package/dist/pagination.d.ts +0 -218
  117. package/dist/pagination.d.ts.map +0 -1
  118. package/dist/pagination.js +0 -281
  119. package/dist/pagination.js.map +0 -1
  120. package/dist/repository/in-memory-repository.d.ts +0 -50
  121. package/dist/repository/in-memory-repository.d.ts.map +0 -1
  122. package/dist/repository/in-memory-repository.js +0 -93
  123. package/dist/repository/in-memory-repository.js.map +0 -1
  124. package/dist/repository/mapper.d.ts +0 -56
  125. package/dist/repository/mapper.d.ts.map +0 -1
  126. package/dist/repository/mapper.js +0 -15
  127. package/dist/repository/mapper.js.map +0 -1
  128. package/dist/repository/types.d.ts +0 -87
  129. package/dist/repository/types.d.ts.map +0 -1
  130. package/dist/repository/types.js +0 -6
  131. package/dist/repository/types.js.map +0 -1
  132. package/dist/repository.d.ts +0 -2
  133. package/dist/repository.d.ts.map +0 -1
  134. package/dist/repository.js +0 -21
  135. package/dist/repository.js.map +0 -1
  136. package/dist/specification.d.ts +0 -102
  137. package/dist/specification.d.ts.map +0 -1
  138. package/dist/specification.js +0 -187
  139. package/dist/specification.js.map +0 -1
  140. package/dist/types/repository.d.ts +0 -43
  141. package/dist/types/repository.d.ts.map +0 -1
  142. package/dist/types/repository.js +0 -2
  143. package/dist/types/repository.js.map +0 -1
  144. package/dist/types.d.ts +0 -88
  145. package/dist/types.d.ts.map +0 -1
  146. package/dist/types.js +0 -12
  147. package/dist/types.js.map +0 -1
  148. package/src/repository/in-memory-repository.ts +0 -116
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Base exception class for all Rich Domain exceptions
3
+ */
4
+ declare abstract class DomainException extends Error {
5
+ readonly code: string;
6
+ readonly timestamp: Date;
7
+ readonly __isDomainException = true;
8
+ constructor(message: string, code?: string);
9
+ /**
10
+ * Check if an error is a DomainException
11
+ */
12
+ static isDomainException(error: unknown): error is DomainException;
13
+ /**
14
+ * Convert to JSON for serialization
15
+ */
16
+ toJSON(): {
17
+ name: string;
18
+ message: string;
19
+ code: string;
20
+ timestamp: string;
21
+ };
22
+ }
23
+ /**
24
+ * Thrown when a domain rule or business logic is violated
25
+ */
26
+ export declare class DomainError extends DomainException {
27
+ constructor(message: string, code?: string);
28
+ }
29
+ /**
30
+ * Thrown when an entity or aggregate is not found
31
+ */
32
+ export declare class EntityNotFoundError extends DomainException {
33
+ readonly entityType: string;
34
+ readonly entityId?: string;
35
+ constructor(entityType: string, entityId?: string, message?: string);
36
+ toJSON(): {
37
+ entityType: string;
38
+ entityId: string | undefined;
39
+ name: string;
40
+ message: string;
41
+ code: string;
42
+ timestamp: string;
43
+ };
44
+ }
45
+ /**
46
+ * Thrown when trying to create an entity that already exists
47
+ */
48
+ export declare class EntityAlreadyExistsError extends DomainException {
49
+ readonly entityType: string;
50
+ readonly entityId?: string;
51
+ constructor(entityType: string, entityId?: string, message?: string);
52
+ toJSON(): {
53
+ entityType: string;
54
+ entityId: string | undefined;
55
+ name: string;
56
+ message: string;
57
+ code: string;
58
+ timestamp: string;
59
+ };
60
+ }
61
+ /**
62
+ * Base exception for repository operations
63
+ */
64
+ export declare class RepositoryError extends DomainException {
65
+ constructor(message: string, code?: string);
66
+ }
67
+ /**
68
+ * Thrown when a persistence operation fails
69
+ */
70
+ export declare class PersistenceError extends RepositoryError {
71
+ readonly operation: string;
72
+ readonly cause?: Error;
73
+ constructor(operation: string, message?: string, cause?: Error);
74
+ toJSON(): {
75
+ operation: string;
76
+ cause: string | undefined;
77
+ name: string;
78
+ message: string;
79
+ code: string;
80
+ timestamp: string;
81
+ };
82
+ }
83
+ /**
84
+ * Thrown when a concurrency conflict occurs (optimistic locking)
85
+ */
86
+ export declare class ConcurrencyError extends RepositoryError {
87
+ readonly entityType: string;
88
+ readonly entityId: string;
89
+ constructor(entityType: string, entityId: string, message?: string);
90
+ toJSON(): {
91
+ entityType: string;
92
+ entityId: string;
93
+ name: string;
94
+ message: string;
95
+ code: string;
96
+ timestamp: string;
97
+ };
98
+ }
99
+ /**
100
+ * Thrown when a database constraint is violated
101
+ */
102
+ export declare class ConstraintViolationError extends RepositoryError {
103
+ readonly constraint: string;
104
+ constructor(constraint: string, message?: string);
105
+ toJSON(): {
106
+ constraint: string;
107
+ name: string;
108
+ message: string;
109
+ code: string;
110
+ timestamp: string;
111
+ };
112
+ }
113
+ /**
114
+ * Thrown when a value object has invalid data
115
+ */
116
+ export declare class InvalidValueObjectError extends DomainException {
117
+ readonly valueObjectType: string;
118
+ readonly invalidValue?: any;
119
+ constructor(valueObjectType: string, message: string, invalidValue?: any);
120
+ toJSON(): {
121
+ valueObjectType: string;
122
+ invalidValue: any;
123
+ name: string;
124
+ message: string;
125
+ code: string;
126
+ timestamp: string;
127
+ };
128
+ }
129
+ /**
130
+ * Thrown when a domain event operation fails
131
+ */
132
+ export declare class DomainEventError extends DomainException {
133
+ readonly eventType?: string;
134
+ constructor(message: string, eventType?: string);
135
+ toJSON(): {
136
+ eventType: string | undefined;
137
+ name: string;
138
+ message: string;
139
+ code: string;
140
+ timestamp: string;
141
+ };
142
+ }
143
+ /**
144
+ * Thrown when an event handler fails
145
+ */
146
+ export declare class EventHandlerError extends DomainEventError {
147
+ readonly handlerName: string;
148
+ readonly cause?: Error;
149
+ constructor(handlerName: string, eventType: string, cause?: Error);
150
+ toJSON(): {
151
+ handlerName: string;
152
+ cause: string | undefined;
153
+ eventType: string | undefined;
154
+ name: string;
155
+ message: string;
156
+ code: string;
157
+ timestamp: string;
158
+ };
159
+ }
160
+ /**
161
+ * Thrown when a criteria or query is invalid
162
+ */
163
+ export declare class InvalidCriteriaError extends DomainException {
164
+ readonly field?: string;
165
+ constructor(message: string, field?: string);
166
+ toJSON(): {
167
+ field: string | undefined;
168
+ name: string;
169
+ message: string;
170
+ code: string;
171
+ timestamp: string;
172
+ };
173
+ }
174
+ /**
175
+ * Thrown when a transaction operation fails
176
+ */
177
+ export declare class TransactionError extends DomainException {
178
+ readonly operation: string;
179
+ readonly cause?: Error;
180
+ constructor(operation: string, message?: string, cause?: Error);
181
+ toJSON(): {
182
+ operation: string;
183
+ cause: string | undefined;
184
+ name: string;
185
+ message: string;
186
+ code: string;
187
+ timestamp: string;
188
+ };
189
+ }
190
+ /**
191
+ * Thrown when an unexpected or unknown error occurs
192
+ */
193
+ export declare class UnknownError extends DomainException {
194
+ readonly originalError?: Error;
195
+ constructor(message?: string, originalError?: Error);
196
+ toJSON(): {
197
+ originalError: string | undefined;
198
+ name: string;
199
+ message: string;
200
+ code: string;
201
+ timestamp: string;
202
+ };
203
+ }
204
+ /**
205
+ * Thrown when a feature is not implemented yet
206
+ */
207
+ export declare class NotImplementedError extends DomainException {
208
+ readonly feature: string;
209
+ constructor(feature: string, message?: string);
210
+ toJSON(): {
211
+ feature: string;
212
+ name: string;
213
+ message: string;
214
+ code: string;
215
+ timestamp: string;
216
+ };
217
+ }
218
+ /**
219
+ * Thrown when a required configuration is missing
220
+ */
221
+ export declare class ConfigurationError extends DomainException {
222
+ readonly configKey?: string;
223
+ constructor(message: string, configKey?: string);
224
+ toJSON(): {
225
+ configKey: string | undefined;
226
+ name: string;
227
+ message: string;
228
+ code: string;
229
+ timestamp: string;
230
+ };
231
+ }
232
+ /**
233
+ * Thrown when mapping between domain and persistence fails
234
+ */
235
+ export declare class MapperError extends DomainException {
236
+ readonly direction: "toDomain" | "toPersistence";
237
+ readonly entityType: string;
238
+ readonly cause?: Error;
239
+ constructor(direction: "toDomain" | "toPersistence", entityType: string, message?: string, cause?: Error);
240
+ toJSON(): {
241
+ direction: "toDomain" | "toPersistence";
242
+ entityType: string;
243
+ cause: string | undefined;
244
+ name: string;
245
+ message: string;
246
+ code: string;
247
+ timestamp: string;
248
+ };
249
+ }
250
+ export {};
251
+ //# sourceMappingURL=exceptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../src/exceptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Base exception class for all Rich Domain exceptions
3
+ */
4
+ class DomainException extends Error {
5
+ constructor(message, code) {
6
+ super(message);
7
+ this.__isDomainException = true;
8
+ this.name = this.constructor.name;
9
+ this.code = code || this.constructor.name;
10
+ this.timestamp = new Date();
11
+ // Maintain proper stack trace
12
+ if (Error.captureStackTrace) {
13
+ Error.captureStackTrace(this, this.constructor);
14
+ }
15
+ }
16
+ /**
17
+ * Check if an error is a DomainException
18
+ */
19
+ static isDomainException(error) {
20
+ return (error instanceof DomainException ||
21
+ (error instanceof Error &&
22
+ "__isDomainException" in error &&
23
+ error.__isDomainException === true));
24
+ }
25
+ /**
26
+ * Convert to JSON for serialization
27
+ */
28
+ toJSON() {
29
+ return {
30
+ name: this.name,
31
+ message: this.message,
32
+ code: this.code,
33
+ timestamp: this.timestamp.toISOString(),
34
+ };
35
+ }
36
+ }
37
+ /**
38
+ * Thrown when a domain rule or business logic is violated
39
+ */
40
+ export class DomainError extends DomainException {
41
+ constructor(message, code) {
42
+ super(message, code || "DOMAIN_ERROR");
43
+ }
44
+ }
45
+ // ============================================================================
46
+ // Entity & Aggregate Exceptions
47
+ // ============================================================================
48
+ /**
49
+ * Thrown when an entity or aggregate is not found
50
+ */
51
+ export class EntityNotFoundError extends DomainException {
52
+ constructor(entityType, entityId, message) {
53
+ const defaultMessage = entityId
54
+ ? `${entityType} with id '${entityId}' not found`
55
+ : `${entityType} not found`;
56
+ super(message || defaultMessage, "ENTITY_NOT_FOUND");
57
+ this.entityType = entityType;
58
+ this.entityId = entityId;
59
+ }
60
+ toJSON() {
61
+ return {
62
+ ...super.toJSON(),
63
+ entityType: this.entityType,
64
+ entityId: this.entityId,
65
+ };
66
+ }
67
+ }
68
+ /**
69
+ * Thrown when trying to create an entity that already exists
70
+ */
71
+ export class EntityAlreadyExistsError extends DomainException {
72
+ constructor(entityType, entityId, message) {
73
+ const defaultMessage = entityId
74
+ ? `${entityType} with id '${entityId}' already exists`
75
+ : `${entityType} already exists`;
76
+ super(message || defaultMessage, "ENTITY_ALREADY_EXISTS");
77
+ this.entityType = entityType;
78
+ this.entityId = entityId;
79
+ }
80
+ toJSON() {
81
+ return {
82
+ ...super.toJSON(),
83
+ entityType: this.entityType,
84
+ entityId: this.entityId,
85
+ };
86
+ }
87
+ }
88
+ // ============================================================================
89
+ // Repository & Persistence Exceptions
90
+ // ============================================================================
91
+ /**
92
+ * Base exception for repository operations
93
+ */
94
+ export class RepositoryError extends DomainException {
95
+ constructor(message, code) {
96
+ super(message, code || "REPOSITORY_ERROR");
97
+ }
98
+ }
99
+ /**
100
+ * Thrown when a persistence operation fails
101
+ */
102
+ export class PersistenceError extends RepositoryError {
103
+ constructor(operation, message, cause) {
104
+ const defaultMessage = `Persistence operation '${operation}' failed${message ? `: ${message}` : ""}`;
105
+ super(defaultMessage, "PERSISTENCE_ERROR");
106
+ this.operation = operation;
107
+ this.cause = cause;
108
+ }
109
+ toJSON() {
110
+ return {
111
+ ...super.toJSON(),
112
+ operation: this.operation,
113
+ cause: this.cause?.message,
114
+ };
115
+ }
116
+ }
117
+ /**
118
+ * Thrown when a concurrency conflict occurs (optimistic locking)
119
+ */
120
+ export class ConcurrencyError extends RepositoryError {
121
+ constructor(entityType, entityId, message) {
122
+ const defaultMessage = message ||
123
+ `Concurrency conflict detected for ${entityType} with id '${entityId}'`;
124
+ super(defaultMessage, "CONCURRENCY_ERROR");
125
+ this.entityType = entityType;
126
+ this.entityId = entityId;
127
+ }
128
+ toJSON() {
129
+ return {
130
+ ...super.toJSON(),
131
+ entityType: this.entityType,
132
+ entityId: this.entityId,
133
+ };
134
+ }
135
+ }
136
+ /**
137
+ * Thrown when a database constraint is violated
138
+ */
139
+ export class ConstraintViolationError extends RepositoryError {
140
+ constructor(constraint, message) {
141
+ const defaultMessage = message || `Database constraint '${constraint}' violated`;
142
+ super(defaultMessage, "CONSTRAINT_VIOLATION");
143
+ this.constraint = constraint;
144
+ }
145
+ toJSON() {
146
+ return {
147
+ ...super.toJSON(),
148
+ constraint: this.constraint,
149
+ };
150
+ }
151
+ }
152
+ // ============================================================================
153
+ // Value Object Exceptions
154
+ // ============================================================================
155
+ /**
156
+ * Thrown when a value object has invalid data
157
+ */
158
+ export class InvalidValueObjectError extends DomainException {
159
+ constructor(valueObjectType, message, invalidValue) {
160
+ super(message, "INVALID_VALUE_OBJECT");
161
+ this.valueObjectType = valueObjectType;
162
+ this.invalidValue = invalidValue;
163
+ }
164
+ toJSON() {
165
+ return {
166
+ ...super.toJSON(),
167
+ valueObjectType: this.valueObjectType,
168
+ invalidValue: this.invalidValue,
169
+ };
170
+ }
171
+ }
172
+ // ============================================================================
173
+ // Domain Event Exceptions
174
+ // ============================================================================
175
+ /**
176
+ * Thrown when a domain event operation fails
177
+ */
178
+ export class DomainEventError extends DomainException {
179
+ constructor(message, eventType) {
180
+ super(message, "DOMAIN_EVENT_ERROR");
181
+ this.eventType = eventType;
182
+ }
183
+ toJSON() {
184
+ return {
185
+ ...super.toJSON(),
186
+ eventType: this.eventType,
187
+ };
188
+ }
189
+ }
190
+ /**
191
+ * Thrown when an event handler fails
192
+ */
193
+ export class EventHandlerError extends DomainEventError {
194
+ constructor(handlerName, eventType, cause) {
195
+ const message = `Event handler '${handlerName}' failed for event '${eventType}'${cause ? `: ${cause.message}` : ""}`;
196
+ super(message, eventType);
197
+ this.handlerName = handlerName;
198
+ this.cause = cause;
199
+ }
200
+ toJSON() {
201
+ return {
202
+ ...super.toJSON(),
203
+ handlerName: this.handlerName,
204
+ cause: this.cause?.message,
205
+ };
206
+ }
207
+ }
208
+ // ============================================================================
209
+ // Criteria & Query Exceptions
210
+ // ============================================================================
211
+ /**
212
+ * Thrown when a criteria or query is invalid
213
+ */
214
+ export class InvalidCriteriaError extends DomainException {
215
+ constructor(message, field) {
216
+ super(message, "INVALID_CRITERIA");
217
+ this.field = field;
218
+ }
219
+ toJSON() {
220
+ return {
221
+ ...super.toJSON(),
222
+ field: this.field,
223
+ };
224
+ }
225
+ }
226
+ // ============================================================================
227
+ // Unit of Work Exceptions
228
+ // ============================================================================
229
+ /**
230
+ * Thrown when a transaction operation fails
231
+ */
232
+ export class TransactionError extends DomainException {
233
+ constructor(operation, message, cause) {
234
+ const defaultMessage = `Transaction ${operation} failed${message ? `: ${message}` : ""}`;
235
+ super(defaultMessage, "TRANSACTION_ERROR");
236
+ this.operation = operation;
237
+ this.cause = cause;
238
+ }
239
+ toJSON() {
240
+ return {
241
+ ...super.toJSON(),
242
+ operation: this.operation,
243
+ cause: this.cause?.message,
244
+ };
245
+ }
246
+ }
247
+ // ============================================================================
248
+ // Generic/Unknown Exceptions
249
+ // ============================================================================
250
+ /**
251
+ * Thrown when an unexpected or unknown error occurs
252
+ */
253
+ export class UnknownError extends DomainException {
254
+ constructor(message, originalError) {
255
+ const defaultMessage = message || originalError?.message || "An unknown error occurred";
256
+ super(defaultMessage, "UNKNOWN_ERROR");
257
+ this.originalError = originalError;
258
+ }
259
+ toJSON() {
260
+ return {
261
+ ...super.toJSON(),
262
+ originalError: this.originalError?.message,
263
+ };
264
+ }
265
+ }
266
+ /**
267
+ * Thrown when a feature is not implemented yet
268
+ */
269
+ export class NotImplementedError extends DomainException {
270
+ constructor(feature, message) {
271
+ const defaultMessage = message || `Feature '${feature}' is not implemented`;
272
+ super(defaultMessage, "NOT_IMPLEMENTED");
273
+ this.feature = feature;
274
+ }
275
+ toJSON() {
276
+ return {
277
+ ...super.toJSON(),
278
+ feature: this.feature,
279
+ };
280
+ }
281
+ }
282
+ /**
283
+ * Thrown when a required configuration is missing
284
+ */
285
+ export class ConfigurationError extends DomainException {
286
+ constructor(message, configKey) {
287
+ super(message, "CONFIGURATION_ERROR");
288
+ this.configKey = configKey;
289
+ }
290
+ toJSON() {
291
+ return {
292
+ ...super.toJSON(),
293
+ configKey: this.configKey,
294
+ };
295
+ }
296
+ }
297
+ // ============================================================================
298
+ // Mapper Exceptions
299
+ // ============================================================================
300
+ /**
301
+ * Thrown when mapping between domain and persistence fails
302
+ */
303
+ export class MapperError extends DomainException {
304
+ constructor(direction, entityType, message, cause) {
305
+ const defaultMessage = message ||
306
+ `Failed to map ${entityType} ${direction === "toDomain" ? "to domain" : "to persistence"}`;
307
+ super(defaultMessage, "MAPPER_ERROR");
308
+ this.direction = direction;
309
+ this.entityType = entityType;
310
+ this.cause = cause;
311
+ }
312
+ toJSON() {
313
+ return {
314
+ ...super.toJSON(),
315
+ direction: this.direction,
316
+ entityType: this.entityType,
317
+ cause: this.cause?.message,
318
+ };
319
+ }
320
+ }
321
+ //# sourceMappingURL=exceptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../src/exceptions.ts"],"names":[],"mappings":"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"}
package/dist/id.d.ts CHANGED
@@ -8,11 +8,11 @@ export declare class Id {
8
8
  * @example
9
9
  * // New entity (generates UUID)
10
10
  * const newId = new Id();
11
- * newId.isNew // true
11
+ * newuser.isNew() // true
12
12
  *
13
13
  * // Existing entity (uses provided ID)
14
14
  * const existingId = new Id("550e8400-e29b-41d4-a716-446655440000");
15
- * existingId.isNew // false
15
+ * existinguser.isNew() // false
16
16
  */
17
17
  constructor(value?: string);
18
18
  /**
@@ -22,7 +22,7 @@ export declare class Id {
22
22
  /**
23
23
  * Check if this ID represents a new entity
24
24
  */
25
- get isNew(): boolean;
25
+ isNew(): boolean;
26
26
  /**
27
27
  * Convert to string (for JSON serialization and comparisons)
28
28
  */
package/dist/id.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAKA,qBAAa,EAAE;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC;;;;;;;;;;;;OAYG;gBACS,KAAK,CAAC,EAAE,MAAM;IAY1B;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO;IAOnC;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,EAAE;IAInB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE;CAG/B"}
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAkBA,qBAAa,EAAE;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC;;;;;;;;;;;;OAYG;gBACS,KAAK,CAAC,EAAE,MAAM;IAY1B;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACI,KAAK,IAAI,OAAO;IAIvB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO;IAOnC;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,EAAE;IAInB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE;CAG/B"}
package/dist/id.js CHANGED
@@ -1,7 +1,18 @@
1
- import { randomUUID } from 'crypto';
2
1
  // ============================================================================
3
2
  // Id Class - Smart Identity Management
4
3
  // ============================================================================
4
+ function randomUUID() {
5
+ // If we are in the browser, use the browser's crypto API
6
+ // @ts-expect-error - window.crypto is not defined in the browser
7
+ if (typeof window !== "undefined" && window.crypto) {
8
+ // @ts-expect-error - window.crypto is not defined in the browser
9
+ return window.crypto.randomUUID();
10
+ }
11
+ // If we are in the server, use the crypto library
12
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
13
+ const crypto = require("crypto");
14
+ return crypto.randomUUID();
15
+ }
5
16
  export class Id {
6
17
  /**
7
18
  * Create a new Id
@@ -10,11 +21,11 @@ export class Id {
10
21
  * @example
11
22
  * // New entity (generates UUID)
12
23
  * const newId = new Id();
13
- * newId.isNew // true
24
+ * newuser.isNew() // true
14
25
  *
15
26
  * // Existing entity (uses provided ID)
16
27
  * const existingId = new Id("550e8400-e29b-41d4-a716-446655440000");
17
- * existingId.isNew // false
28
+ * existinguser.isNew() // false
18
29
  */
19
30
  constructor(value) {
20
31
  if (value !== undefined) {
@@ -37,7 +48,7 @@ export class Id {
37
48
  /**
38
49
  * Check if this ID represents a new entity
39
50
  */
40
- get isNew() {
51
+ isNew() {
41
52
  return this._isNew;
42
53
  }
43
54
  /**
package/dist/id.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E,MAAM,OAAO,EAAE;IAIb;;;;;;;;;;;;OAYG;IACH,YAAY,KAAc;QACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,+CAA+C;YAC/C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAkB;QACvB,IAAI,KAAK,YAAY,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,gCAAgC;QAChC,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,EAAE,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAa;QACvB,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E,SAAS,UAAU;IACjB,yDAAyD;IACzD,iEAAiE;IACjE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnD,iEAAiE;QACjE,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IACD,kDAAkD;IAClD,iEAAiE;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,OAAO,EAAE;IAIb;;;;;;;;;;;;OAYG;IACH,YAAY,KAAc;QACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,+CAA+C;YAC/C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,KAAK;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAkB;QACvB,IAAI,KAAK,YAAY,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,gCAAgC;QAChC,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,EAAE,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAa;QACvB,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;CACF"}