@cosmneo/onion-lasagna 0.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 (97) hide show
  1. package/dist/backend/core/global.cjs +283 -0
  2. package/dist/backend/core/global.cjs.map +1 -0
  3. package/dist/backend/core/global.d.cts +294 -0
  4. package/dist/backend/core/global.d.ts +294 -0
  5. package/dist/backend/core/global.js +39 -0
  6. package/dist/backend/core/global.js.map +1 -0
  7. package/dist/backend/core/onion-layers.cjs +2302 -0
  8. package/dist/backend/core/onion-layers.cjs.map +1 -0
  9. package/dist/backend/core/onion-layers.d.cts +1675 -0
  10. package/dist/backend/core/onion-layers.d.ts +1675 -0
  11. package/dist/backend/core/onion-layers.js +1158 -0
  12. package/dist/backend/core/onion-layers.js.map +1 -0
  13. package/dist/backend/core/presentation.cjs +573 -0
  14. package/dist/backend/core/presentation.cjs.map +1 -0
  15. package/dist/backend/core/presentation.d.cts +5 -0
  16. package/dist/backend/core/presentation.d.ts +5 -0
  17. package/dist/backend/core/presentation.js +28 -0
  18. package/dist/backend/core/presentation.js.map +1 -0
  19. package/dist/backend/core/validators/arktype.cjs +947 -0
  20. package/dist/backend/core/validators/arktype.cjs.map +1 -0
  21. package/dist/backend/core/validators/arktype.d.cts +188 -0
  22. package/dist/backend/core/validators/arktype.d.ts +188 -0
  23. package/dist/backend/core/validators/arktype.js +287 -0
  24. package/dist/backend/core/validators/arktype.js.map +1 -0
  25. package/dist/backend/core/validators/typebox.cjs +939 -0
  26. package/dist/backend/core/validators/typebox.cjs.map +1 -0
  27. package/dist/backend/core/validators/typebox.d.cts +189 -0
  28. package/dist/backend/core/validators/typebox.d.ts +189 -0
  29. package/dist/backend/core/validators/typebox.js +281 -0
  30. package/dist/backend/core/validators/typebox.js.map +1 -0
  31. package/dist/backend/core/validators/valibot.cjs +942 -0
  32. package/dist/backend/core/validators/valibot.cjs.map +1 -0
  33. package/dist/backend/core/validators/valibot.d.cts +160 -0
  34. package/dist/backend/core/validators/valibot.d.ts +160 -0
  35. package/dist/backend/core/validators/valibot.js +294 -0
  36. package/dist/backend/core/validators/valibot.js.map +1 -0
  37. package/dist/backend/core/validators/zod.cjs +934 -0
  38. package/dist/backend/core/validators/zod.cjs.map +1 -0
  39. package/dist/backend/core/validators/zod.d.cts +188 -0
  40. package/dist/backend/core/validators/zod.d.ts +188 -0
  41. package/dist/backend/core/validators/zod.js +278 -0
  42. package/dist/backend/core/validators/zod.js.map +1 -0
  43. package/dist/backend/frameworks/elysia.cjs +715 -0
  44. package/dist/backend/frameworks/elysia.cjs.map +1 -0
  45. package/dist/backend/frameworks/elysia.d.cts +208 -0
  46. package/dist/backend/frameworks/elysia.d.ts +208 -0
  47. package/dist/backend/frameworks/elysia.js +251 -0
  48. package/dist/backend/frameworks/elysia.js.map +1 -0
  49. package/dist/backend/frameworks/fastify.cjs +677 -0
  50. package/dist/backend/frameworks/fastify.cjs.map +1 -0
  51. package/dist/backend/frameworks/fastify.d.cts +201 -0
  52. package/dist/backend/frameworks/fastify.d.ts +201 -0
  53. package/dist/backend/frameworks/fastify.js +213 -0
  54. package/dist/backend/frameworks/fastify.js.map +1 -0
  55. package/dist/backend/frameworks/hono.cjs +715 -0
  56. package/dist/backend/frameworks/hono.cjs.map +1 -0
  57. package/dist/backend/frameworks/hono.d.cts +163 -0
  58. package/dist/backend/frameworks/hono.d.ts +163 -0
  59. package/dist/backend/frameworks/hono.js +249 -0
  60. package/dist/backend/frameworks/hono.js.map +1 -0
  61. package/dist/backend/frameworks/nestjs.cjs +260 -0
  62. package/dist/backend/frameworks/nestjs.cjs.map +1 -0
  63. package/dist/backend/frameworks/nestjs.d.cts +168 -0
  64. package/dist/backend/frameworks/nestjs.d.ts +168 -0
  65. package/dist/backend/frameworks/nestjs.js +193 -0
  66. package/dist/backend/frameworks/nestjs.js.map +1 -0
  67. package/dist/base-dto.class-D7W9iqoU.d.cts +146 -0
  68. package/dist/base-dto.class-D7W9iqoU.d.ts +146 -0
  69. package/dist/base-uuid-v7.vo-BPGEIWLM.d.ts +799 -0
  70. package/dist/base-uuid-v7.vo-BjqKX44G.d.cts +799 -0
  71. package/dist/chunk-74IKUOSE.js +116 -0
  72. package/dist/chunk-74IKUOSE.js.map +1 -0
  73. package/dist/chunk-BKZOLGQW.js +29 -0
  74. package/dist/chunk-BKZOLGQW.js.map +1 -0
  75. package/dist/chunk-CGZBV6BD.js +54 -0
  76. package/dist/chunk-CGZBV6BD.js.map +1 -0
  77. package/dist/chunk-DDAHJZVK.js +258 -0
  78. package/dist/chunk-DDAHJZVK.js.map +1 -0
  79. package/dist/chunk-MQD5GXMT.js +171 -0
  80. package/dist/chunk-MQD5GXMT.js.map +1 -0
  81. package/dist/chunk-OKFXZHBC.js +43 -0
  82. package/dist/chunk-OKFXZHBC.js.map +1 -0
  83. package/dist/chunk-RLLWYFPI.js +168 -0
  84. package/dist/chunk-RLLWYFPI.js.map +1 -0
  85. package/dist/chunk-VCHFXT5W.js +425 -0
  86. package/dist/chunk-VCHFXT5W.js.map +1 -0
  87. package/dist/chunk-ZWLYNGO3.js +40 -0
  88. package/dist/chunk-ZWLYNGO3.js.map +1 -0
  89. package/dist/http-response-BAhi8lF4.d.cts +124 -0
  90. package/dist/http-response-BAhi8lF4.d.ts +124 -0
  91. package/dist/index-DingXh7B.d.cts +1187 -0
  92. package/dist/index-tOH7XBa3.d.ts +1187 -0
  93. package/dist/routing.type-DB4pt-d9.d.ts +184 -0
  94. package/dist/routing.type-DF2BIL7x.d.cts +184 -0
  95. package/dist/validation-error.type-kD4_qNZ9.d.cts +199 -0
  96. package/dist/validation-error.type-kD4_qNZ9.d.ts +199 -0
  97. package/package.json +191 -0
@@ -0,0 +1,934 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/backend/core/validators/zod/index.ts
21
+ var zod_exports = {};
22
+ __export(zod_exports, {
23
+ AuditByVo: () => AuditByVo,
24
+ AuditInfoVo: () => AuditInfoVo,
25
+ AuditOnVo: () => AuditOnVo,
26
+ Dto: () => Dto,
27
+ EmailVo: () => EmailVo,
28
+ LongTextVo: () => LongTextVo,
29
+ MediumTextVo: () => MediumTextVo,
30
+ PaginationVo: () => PaginationVo,
31
+ ShortTextVo: () => ShortTextVo,
32
+ UuidV4Vo: () => UuidV4Vo,
33
+ UuidV7Vo: () => UuidV7Vo,
34
+ ZodObjectValidator: () => ZodObjectValidator,
35
+ createZodValidator: () => createZodValidator,
36
+ zodObjectValidator: () => zodObjectValidator
37
+ });
38
+ module.exports = __toCommonJS(zod_exports);
39
+
40
+ // src/backend/core/global/exceptions/coded-error.error.ts
41
+ var CodedError = class extends Error {
42
+ /** Machine-readable error code for programmatic handling. */
43
+ code;
44
+ /**
45
+ * Creates a new CodedError instance.
46
+ *
47
+ * @param options - Error configuration
48
+ * @param options.message - Human-readable error message
49
+ * @param options.code - Machine-readable error code from ErrorCodes registry or custom string
50
+ * @param options.cause - Optional underlying error that caused this error
51
+ */
52
+ constructor({
53
+ message,
54
+ code,
55
+ cause
56
+ }) {
57
+ super(message);
58
+ this.name = this.constructor.name;
59
+ this.code = code;
60
+ if (cause !== void 0) {
61
+ Object.defineProperty(this, "cause", {
62
+ value: cause,
63
+ writable: false,
64
+ enumerable: false,
65
+ configurable: true
66
+ });
67
+ }
68
+ }
69
+ /**
70
+ * Factory method to create a typed error from a caught error.
71
+ *
72
+ * Subclasses should override this to provide proper error transformation.
73
+ * Designed for use with {@link wrapErrorAsync} and {@link wrapError}.
74
+ *
75
+ * @param _cause - The original caught error
76
+ * @returns A new CodedError instance
77
+ * @throws {Error} If not overridden by subclass
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * class NotFoundError extends UseCaseError {
82
+ * static override fromError(cause: unknown): NotFoundError {
83
+ * return new NotFoundError({
84
+ * message: 'Resource not found',
85
+ * cause,
86
+ * });
87
+ * }
88
+ * }
89
+ * ```
90
+ */
91
+ static fromError(_cause) {
92
+ throw new Error(`${this.name}.fromError() must be implemented by subclass`);
93
+ }
94
+ };
95
+
96
+ // src/backend/core/global/exceptions/error-codes.const.ts
97
+ var ErrorCodes = {
98
+ /**
99
+ * Domain layer error codes.
100
+ * Used for business rule violations and invariant failures.
101
+ */
102
+ Domain: {
103
+ /** Generic domain error */
104
+ DOMAIN_ERROR: "DOMAIN_ERROR",
105
+ /** Business invariant was violated */
106
+ INVARIANT_VIOLATION: "INVARIANT_VIOLATION",
107
+ /** Aggregate was partially loaded (missing required relations) */
108
+ PARTIAL_LOAD: "PARTIAL_LOAD"
109
+ },
110
+ /**
111
+ * Application layer (use case) error codes.
112
+ * Used for orchestration failures and business operation errors.
113
+ */
114
+ App: {
115
+ /** Generic use case error */
116
+ USE_CASE_ERROR: "USE_CASE_ERROR",
117
+ /** Requested resource was not found */
118
+ NOT_FOUND: "NOT_FOUND",
119
+ /** Resource state conflict (e.g., duplicate, already exists) */
120
+ CONFLICT: "CONFLICT",
121
+ /** Request is valid but cannot be processed due to business rules */
122
+ UNPROCESSABLE: "UNPROCESSABLE"
123
+ },
124
+ /**
125
+ * Infrastructure layer error codes.
126
+ * Used for data access, external services, and I/O failures.
127
+ */
128
+ Infra: {
129
+ /** Generic infrastructure error */
130
+ INFRA_ERROR: "INFRA_ERROR",
131
+ /** Database operation failed */
132
+ DB_ERROR: "DB_ERROR",
133
+ /** Network connectivity or communication error */
134
+ NETWORK_ERROR: "NETWORK_ERROR",
135
+ /** Operation timed out */
136
+ TIMEOUT_ERROR: "TIMEOUT_ERROR",
137
+ /** External/third-party service error */
138
+ EXTERNAL_SERVICE_ERROR: "EXTERNAL_SERVICE_ERROR"
139
+ },
140
+ /**
141
+ * Presentation layer error codes.
142
+ * Used for controller, request handling, and authorization errors.
143
+ */
144
+ Presentation: {
145
+ /** Generic controller error */
146
+ CONTROLLER_ERROR: "CONTROLLER_ERROR",
147
+ /** Request denied due to authorization failure */
148
+ ACCESS_DENIED: "ACCESS_DENIED",
149
+ /** Request validation failed (malformed input) */
150
+ INVALID_REQUEST: "INVALID_REQUEST"
151
+ },
152
+ /**
153
+ * Global/cross-cutting error codes.
154
+ * Used for validation and other cross-layer concerns.
155
+ */
156
+ Global: {
157
+ /** Object/schema validation failed */
158
+ OBJECT_VALIDATION_ERROR: "OBJECT_VALIDATION_ERROR"
159
+ }
160
+ };
161
+
162
+ // src/backend/core/global/exceptions/object-validation.error.ts
163
+ var ObjectValidationError = class _ObjectValidationError extends CodedError {
164
+ /**
165
+ * Array of field-level validation errors.
166
+ *
167
+ * Each entry contains:
168
+ * - `field`: Dot-notation path to the invalid field (e.g., 'user.email')
169
+ * - `message`: Human-readable validation failure message
170
+ */
171
+ validationErrors;
172
+ /**
173
+ * Creates a new ObjectValidationError instance.
174
+ *
175
+ * @param options - Error configuration
176
+ * @param options.message - Human-readable summary message
177
+ * @param options.code - Machine-readable error code (default: 'OBJECT_VALIDATION_ERROR')
178
+ * @param options.cause - Optional underlying error from validation library
179
+ * @param options.validationErrors - Array of field-level validation errors
180
+ */
181
+ constructor({
182
+ message,
183
+ code = ErrorCodes.Global.OBJECT_VALIDATION_ERROR,
184
+ cause,
185
+ validationErrors
186
+ }) {
187
+ super({ message, code, cause });
188
+ this.validationErrors = validationErrors;
189
+ }
190
+ /**
191
+ * Creates an ObjectValidationError from a caught error.
192
+ *
193
+ * @param cause - The original caught error
194
+ * @returns A new ObjectValidationError instance with the cause attached
195
+ */
196
+ static fromError(cause) {
197
+ return new _ObjectValidationError({
198
+ message: cause instanceof Error ? cause.message : "Validation failed",
199
+ cause,
200
+ validationErrors: []
201
+ });
202
+ }
203
+ };
204
+
205
+ // src/backend/core/validators/zod/object-validator.zod.ts
206
+ var formatPath = (path) => {
207
+ if (!path.length) return "root";
208
+ return path.map((segment, index) => {
209
+ if (typeof segment === "number") return `[${segment}]`;
210
+ if (typeof segment === "symbol") return segment.description ?? String(segment);
211
+ return index === 0 ? segment : `.${segment}`;
212
+ }).join("");
213
+ };
214
+ var toValidationErrors = (issues) => issues.map((issue) => ({
215
+ field: formatPath(issue?.path ?? []),
216
+ message: issue?.message ?? "Validation failed"
217
+ }));
218
+ var ZodObjectValidator = class {
219
+ validateObject(schema11, value) {
220
+ const result = schema11.safeParse(value);
221
+ if (result.success) {
222
+ return result.data;
223
+ }
224
+ throw new ObjectValidationError({
225
+ message: "Object validation failed",
226
+ cause: result.error,
227
+ validationErrors: toValidationErrors(result.error.issues)
228
+ });
229
+ }
230
+ withSchema(schema11) {
231
+ return {
232
+ validate: (value) => this.validateObject(schema11, value)
233
+ };
234
+ }
235
+ };
236
+
237
+ // src/backend/core/validators/zod/bootstrap.ts
238
+ var zodObjectValidator = new ZodObjectValidator();
239
+ var createZodValidator = (schema11) => zodObjectValidator.withSchema(schema11);
240
+
241
+ // src/backend/core/global/classes/base-dto.class.ts
242
+ var SKIP_DTO_VALIDATION = "skip dto validation";
243
+ var BaseDto = class {
244
+ _data;
245
+ /**
246
+ * Creates a new DTO instance.
247
+ *
248
+ * @param data - The raw data to validate and wrap
249
+ * @param validator - A bound validator or SKIP_DTO_VALIDATION to bypass
250
+ * @throws {ObjectValidationError} When validation fails
251
+ */
252
+ constructor(data, validator) {
253
+ this._data = validator === SKIP_DTO_VALIDATION ? data : validator.validate(data);
254
+ }
255
+ /**
256
+ * The validated data payload.
257
+ *
258
+ * @returns The validated data of type T
259
+ */
260
+ get data() {
261
+ return this._data;
262
+ }
263
+ };
264
+
265
+ // src/backend/core/validators/zod/wrappers/dto.ts
266
+ var Dto = class extends BaseDto {
267
+ constructor(schema11, value) {
268
+ super(value, createZodValidator(schema11));
269
+ }
270
+ };
271
+
272
+ // src/backend/core/validators/zod/wrappers/value-objects/audit-by.vo.ts
273
+ var import_zod2 = require("zod");
274
+
275
+ // src/backend/core/onion-layers/domain/classes/base-value-object.class.ts
276
+ var SKIP_VALUE_OBJECT_VALIDATION = "skip value object validation";
277
+ function deepEquals(a, b) {
278
+ if (a === b) return true;
279
+ if (a === null || a === void 0 || b === null || b === void 0) {
280
+ return a === b;
281
+ }
282
+ if (a instanceof Date && b instanceof Date) {
283
+ return a.getTime() === b.getTime();
284
+ }
285
+ if (Array.isArray(a) && Array.isArray(b)) {
286
+ if (a.length !== b.length) return false;
287
+ return a.every((item, index) => deepEquals(item, b[index]));
288
+ }
289
+ if (typeof a === "object" && typeof b === "object") {
290
+ const aObj = a;
291
+ const bObj = b;
292
+ const aKeys = Object.keys(aObj);
293
+ const bKeys = Object.keys(bObj);
294
+ if (aKeys.length !== bKeys.length) return false;
295
+ return aKeys.every((key) => deepEquals(aObj[key], bObj[key]));
296
+ }
297
+ return false;
298
+ }
299
+ var BaseValueObject = class {
300
+ _value;
301
+ /**
302
+ * Creates a new Value Object instance.
303
+ *
304
+ * @param value - The raw value to wrap
305
+ * @param validator - A bound validator or SKIP_VALUE_OBJECT_VALIDATION to bypass
306
+ * @throws {ObjectValidationError} When validation fails
307
+ */
308
+ constructor(value, validator) {
309
+ this._value = validator === SKIP_VALUE_OBJECT_VALIDATION ? value : validator.validate(value);
310
+ }
311
+ /**
312
+ * Compares this Value Object with another for equality.
313
+ *
314
+ * Uses deep equality comparison to handle nested objects, arrays, and dates.
315
+ * Two Value Objects are equal if their underlying values are deeply equal.
316
+ *
317
+ * @param other - The Value Object to compare with
318
+ * @returns `true` if the values are deeply equal, `false` otherwise
319
+ */
320
+ equals(other) {
321
+ if (this === other) return true;
322
+ return deepEquals(this.value, other.value);
323
+ }
324
+ /**
325
+ * The underlying immutable value.
326
+ *
327
+ * @returns The wrapped value of type T
328
+ */
329
+ get value() {
330
+ return this._value;
331
+ }
332
+ };
333
+
334
+ // src/backend/core/onion-layers/domain/value-objects/base-audit-by.vo.ts
335
+ var BaseAuditByVo = class extends BaseValueObject {
336
+ /**
337
+ * Creates a new BaseAuditByVo instance.
338
+ *
339
+ * @param value - The user tracking values
340
+ * @param value.createdBy - User who created the entity (optional for system ops)
341
+ * @param value.updatedBy - User who last updated the entity (optional)
342
+ * @param validator - Bound validator or skip validation symbol
343
+ */
344
+ constructor(value, validator) {
345
+ super(value, validator);
346
+ }
347
+ /**
348
+ * The user ID who created the entity.
349
+ * Returns `undefined` for system-created entities.
350
+ */
351
+ get createdBy() {
352
+ return this.value.createdBy;
353
+ }
354
+ /**
355
+ * The user ID who last updated the entity.
356
+ * Returns `undefined` for system-updated entities.
357
+ */
358
+ get updatedBy() {
359
+ return this.value.updatedBy;
360
+ }
361
+ };
362
+
363
+ // src/backend/core/validators/zod/wrappers/value-objects/uuid-v4.vo.ts
364
+ var import_zod = require("zod");
365
+
366
+ // src/backend/core/onion-layers/domain/value-objects/base-uuid-v4.vo.ts
367
+ var import_uuid = require("uuid");
368
+ var BaseUuidV4Vo = class extends BaseValueObject {
369
+ /**
370
+ * Creates a new BaseUuidV4Vo instance.
371
+ *
372
+ * @param value - The UUID v4 string value
373
+ * @param validator - Bound validator or skip validation symbol
374
+ */
375
+ constructor(value, validator) {
376
+ super(value, validator);
377
+ }
378
+ /**
379
+ * Generates a new UUID v4 value object.
380
+ *
381
+ * Creates a random UUID, skipping validation since the
382
+ * `uuid` library guarantees format.
383
+ *
384
+ * @returns A new BaseUuidV4Vo with a freshly generated UUID
385
+ */
386
+ static generate() {
387
+ return new this((0, import_uuid.v4)(), SKIP_VALUE_OBJECT_VALIDATION);
388
+ }
389
+ /**
390
+ * Creates a UUID v4 value object from an existing string.
391
+ *
392
+ * **Important:** This base implementation skips validation and accepts
393
+ * any string value. Subclasses should override this method with a
394
+ * validator to ensure UUID format correctness.
395
+ *
396
+ * @param value - The UUID v4 string value (not validated at base level)
397
+ * @returns A new BaseUuidV4Vo with the provided value
398
+ *
399
+ * @example Subclass with validation (recommended)
400
+ * ```typescript
401
+ * class UserId extends BaseUuidV4Vo {
402
+ * static override create(value: string): UserId {
403
+ * return new UserId(value, uuidV4Validator);
404
+ * }
405
+ * }
406
+ * ```
407
+ *
408
+ * @see generate - For creating new UUIDs (always valid)
409
+ */
410
+ static create(value) {
411
+ return new this(value, SKIP_VALUE_OBJECT_VALIDATION);
412
+ }
413
+ };
414
+
415
+ // src/backend/core/validators/zod/wrappers/value-objects/uuid-v4.vo.ts
416
+ var schema = import_zod.z.uuidv4();
417
+ var UuidV4Vo = class _UuidV4Vo extends BaseUuidV4Vo {
418
+ constructor(value) {
419
+ super(value, createZodValidator(schema));
420
+ }
421
+ static create(value) {
422
+ return new _UuidV4Vo(value);
423
+ }
424
+ };
425
+
426
+ // src/backend/core/validators/zod/wrappers/value-objects/audit-by.vo.ts
427
+ var schema2 = import_zod2.z.object({
428
+ createdBy: import_zod2.z.uuidv4().optional(),
429
+ updatedBy: import_zod2.z.uuidv4().optional()
430
+ });
431
+ var AuditByVo = class _AuditByVo extends BaseAuditByVo {
432
+ constructor(value) {
433
+ super(value, SKIP_VALUE_OBJECT_VALIDATION);
434
+ }
435
+ static create({ createdBy, updatedBy }) {
436
+ const validated = createZodValidator(schema2).validate({
437
+ createdBy,
438
+ updatedBy
439
+ });
440
+ return new _AuditByVo({
441
+ createdBy: validated.createdBy ? UuidV4Vo.create(validated.createdBy) : void 0,
442
+ updatedBy: validated.updatedBy ? UuidV4Vo.create(validated.updatedBy) : void 0
443
+ });
444
+ }
445
+ update(updatedBy) {
446
+ return new _AuditByVo({ createdBy: this.createdBy, updatedBy });
447
+ }
448
+ };
449
+
450
+ // src/backend/core/validators/zod/wrappers/value-objects/audit-info.vo.ts
451
+ var import_zod4 = require("zod");
452
+
453
+ // src/backend/core/onion-layers/domain/value-objects/base-audit-info.vo.ts
454
+ var BaseAuditInfoVo = class extends BaseValueObject {
455
+ /**
456
+ * Creates a new BaseAuditInfoVo instance.
457
+ *
458
+ * @param value - Composite value containing audit by and on VOs
459
+ * @param value.by - User tracking value object
460
+ * @param value.on - Timestamp tracking value object
461
+ * @param validator - Bound validator or skip validation symbol
462
+ */
463
+ constructor(value, validator) {
464
+ super(value, validator);
465
+ }
466
+ /**
467
+ * The user ID who created the entity.
468
+ * Returns `undefined` for system-created entities.
469
+ */
470
+ get createdBy() {
471
+ return this.value.by.createdBy;
472
+ }
473
+ /**
474
+ * The timestamp when the entity was created.
475
+ * Returns a cloned Date to prevent mutation.
476
+ */
477
+ get createdAt() {
478
+ return new Date(this.value.on.createdAt.getTime());
479
+ }
480
+ /**
481
+ * The user ID who last updated the entity.
482
+ * Returns `undefined` for system-updated entities.
483
+ */
484
+ get updatedBy() {
485
+ return this.value.by.updatedBy;
486
+ }
487
+ /**
488
+ * The timestamp when the entity was last updated.
489
+ * Returns a cloned Date to prevent mutation.
490
+ */
491
+ get updatedAt() {
492
+ return new Date(this.value.on.updatedAt.getTime());
493
+ }
494
+ /**
495
+ * Whether the entity has been modified since creation.
496
+ *
497
+ * Compares both timestamps and user IDs. Returns `true` if either:
498
+ * - The updatedAt timestamp differs from createdAt
499
+ * - The updatedBy user differs from createdBy
500
+ *
501
+ * Note: When both createdBy and updatedBy are undefined (system-created
502
+ * entities), this correctly returns false for the user comparison.
503
+ */
504
+ get isModified() {
505
+ const timestampChanged = this.updatedAt.getTime() !== this.createdAt.getTime();
506
+ const userChanged = this.updatedBy?.value !== this.createdBy?.value;
507
+ return timestampChanged || userChanged;
508
+ }
509
+ /**
510
+ * Alias for `updatedBy` for semantic clarity.
511
+ */
512
+ get lastModifiedBy() {
513
+ return this.updatedBy;
514
+ }
515
+ /**
516
+ * Alias for `updatedAt` for semantic clarity.
517
+ */
518
+ get lastModifiedAt() {
519
+ return this.updatedAt;
520
+ }
521
+ };
522
+
523
+ // src/backend/core/validators/zod/wrappers/value-objects/audit-on.vo.ts
524
+ var import_zod3 = require("zod");
525
+
526
+ // src/backend/core/onion-layers/domain/exceptions/domain.error.ts
527
+ var DomainError = class _DomainError extends CodedError {
528
+ /**
529
+ * Creates a new DomainError instance.
530
+ *
531
+ * @param options - Error configuration
532
+ * @param options.message - Human-readable error description
533
+ * @param options.code - Machine-readable error code (default: 'DOMAIN_ERROR')
534
+ * @param options.cause - Optional underlying error
535
+ */
536
+ constructor({
537
+ message,
538
+ code = ErrorCodes.Domain.DOMAIN_ERROR,
539
+ cause
540
+ }) {
541
+ super({ message, code, cause });
542
+ }
543
+ /**
544
+ * Creates a DomainError from a caught error.
545
+ *
546
+ * @param cause - The original caught error
547
+ * @returns A new DomainError instance with the cause attached
548
+ */
549
+ static fromError(cause) {
550
+ return new _DomainError({
551
+ message: cause instanceof Error ? cause.message : "Domain error",
552
+ cause
553
+ });
554
+ }
555
+ };
556
+
557
+ // src/backend/core/onion-layers/domain/exceptions/invariant-violation.error.ts
558
+ var InvariantViolationError = class _InvariantViolationError extends DomainError {
559
+ /**
560
+ * Creates a new InvariantViolationError instance.
561
+ *
562
+ * @param options - Error configuration
563
+ * @param options.message - Description of the violated invariant
564
+ * @param options.code - Machine-readable error code (default: 'INVARIANT_VIOLATION')
565
+ * @param options.cause - Optional underlying error
566
+ */
567
+ constructor({
568
+ message,
569
+ code = ErrorCodes.Domain.INVARIANT_VIOLATION,
570
+ cause
571
+ }) {
572
+ super({ message, code, cause });
573
+ }
574
+ /**
575
+ * Creates an InvariantViolationError from a caught error.
576
+ *
577
+ * @param cause - The original caught error
578
+ * @returns A new InvariantViolationError instance with the cause attached
579
+ */
580
+ static fromError(cause) {
581
+ return new _InvariantViolationError({
582
+ message: cause instanceof Error ? cause.message : "Invariant violation",
583
+ cause
584
+ });
585
+ }
586
+ };
587
+
588
+ // src/backend/core/onion-layers/domain/value-objects/base-audit-on.vo.ts
589
+ var BaseAuditOnVo = class extends BaseValueObject {
590
+ /**
591
+ * Creates a new BaseAuditOnVo instance.
592
+ *
593
+ * @param value - The timestamp values
594
+ * @param value.createdAt - When the entity was created
595
+ * @param value.updatedAt - When the entity was last updated
596
+ * @param validator - Bound validator or skip validation symbol
597
+ * @throws {InvariantViolationError} When `updatedAt < createdAt`
598
+ */
599
+ constructor(value, validator) {
600
+ if (value.updatedAt < value.createdAt) {
601
+ throw new InvariantViolationError({
602
+ message: "UpdatedAt cannot be earlier than createdAt",
603
+ code: "INVALID_AUDIT_TIMESTAMPS"
604
+ });
605
+ }
606
+ super(value, validator);
607
+ }
608
+ /**
609
+ * When the entity was created.
610
+ * Returns a cloned Date to prevent mutation.
611
+ */
612
+ get createdAt() {
613
+ return new Date(this.value.createdAt);
614
+ }
615
+ /**
616
+ * When the entity was last updated.
617
+ * Returns a cloned Date to prevent mutation.
618
+ */
619
+ get updatedAt() {
620
+ return new Date(this.value.updatedAt);
621
+ }
622
+ };
623
+
624
+ // src/backend/core/validators/zod/wrappers/value-objects/audit-on.vo.ts
625
+ var schema3 = import_zod3.z.object({
626
+ createdAt: import_zod3.z.date().optional(),
627
+ updatedAt: import_zod3.z.date().optional()
628
+ });
629
+ var AuditOnVo = class _AuditOnVo extends BaseAuditOnVo {
630
+ constructor(value) {
631
+ super(value, SKIP_VALUE_OBJECT_VALIDATION);
632
+ }
633
+ static create({ createdAt, updatedAt }) {
634
+ const validated = createZodValidator(schema3).validate({
635
+ createdAt,
636
+ updatedAt
637
+ });
638
+ const finalCreatedAt = validated.createdAt ?? /* @__PURE__ */ new Date();
639
+ const finalUpdatedAt = validated.updatedAt ?? finalCreatedAt;
640
+ return new _AuditOnVo({
641
+ createdAt: new Date(finalCreatedAt),
642
+ updatedAt: new Date(finalUpdatedAt)
643
+ });
644
+ }
645
+ update() {
646
+ return new _AuditOnVo({ createdAt: this.createdAt, updatedAt: /* @__PURE__ */ new Date() });
647
+ }
648
+ };
649
+
650
+ // src/backend/core/validators/zod/wrappers/value-objects/audit-info.vo.ts
651
+ var schema4 = import_zod4.z.object({
652
+ createdBy: import_zod4.z.uuidv4().optional(),
653
+ createdAt: import_zod4.z.date().optional(),
654
+ updatedBy: import_zod4.z.uuidv4().optional(),
655
+ updatedAt: import_zod4.z.date().optional()
656
+ });
657
+ var AuditInfoVo = class _AuditInfoVo extends BaseAuditInfoVo {
658
+ constructor(value) {
659
+ super(value, SKIP_VALUE_OBJECT_VALIDATION);
660
+ }
661
+ static create({
662
+ createdBy,
663
+ createdAt,
664
+ updatedBy,
665
+ updatedAt
666
+ }) {
667
+ const validated = createZodValidator(schema4).validate({
668
+ createdBy,
669
+ createdAt,
670
+ updatedBy,
671
+ updatedAt
672
+ });
673
+ const by = AuditByVo.create({
674
+ createdBy: validated.createdBy,
675
+ updatedBy: validated.updatedBy
676
+ });
677
+ const on = AuditOnVo.create({
678
+ createdAt: validated.createdAt,
679
+ updatedAt: validated.updatedAt
680
+ });
681
+ return new _AuditInfoVo({ by, on });
682
+ }
683
+ static createNew(createdBy) {
684
+ const by = AuditByVo.create({ createdBy });
685
+ const on = AuditOnVo.create({});
686
+ return new _AuditInfoVo({ by, on });
687
+ }
688
+ update(updatedBy) {
689
+ const by = this.value.by.update(updatedBy);
690
+ const on = this.value.on.update();
691
+ return new _AuditInfoVo({ by, on });
692
+ }
693
+ };
694
+
695
+ // src/backend/core/validators/zod/wrappers/value-objects/email.vo.ts
696
+ var import_zod5 = require("zod");
697
+
698
+ // src/backend/core/onion-layers/domain/value-objects/base-email.vo.ts
699
+ var BaseEmailVo = class extends BaseValueObject {
700
+ /**
701
+ * Creates a new BaseEmailVo instance.
702
+ *
703
+ * @param value - The email address string
704
+ * @param validator - Bound validator or skip validation symbol
705
+ */
706
+ constructor(value, validator) {
707
+ super(value, validator);
708
+ }
709
+ };
710
+
711
+ // src/backend/core/validators/zod/wrappers/value-objects/email.vo.ts
712
+ var schema5 = import_zod5.z.string().email();
713
+ var EmailVo = class _EmailVo extends BaseEmailVo {
714
+ constructor(value) {
715
+ super(value, createZodValidator(schema5));
716
+ }
717
+ static create(value) {
718
+ return new _EmailVo(value);
719
+ }
720
+ };
721
+
722
+ // src/backend/core/validators/zod/wrappers/value-objects/long-text.vo.ts
723
+ var import_zod6 = require("zod");
724
+
725
+ // src/backend/core/onion-layers/domain/value-objects/base-long-text.vo.ts
726
+ var BaseLongTextVo = class extends BaseValueObject {
727
+ /**
728
+ * Creates a new BaseLongTextVo instance.
729
+ *
730
+ * @param value - The long text string
731
+ * @param validator - Bound validator or skip validation symbol
732
+ */
733
+ constructor(value, validator) {
734
+ super(value, validator);
735
+ }
736
+ };
737
+
738
+ // src/backend/core/validators/zod/wrappers/value-objects/long-text.vo.ts
739
+ var schema6 = (maxLength) => import_zod6.z.string().min(1).max(maxLength);
740
+ var LongTextVo = class _LongTextVo extends BaseLongTextVo {
741
+ constructor(value, maxLength = 2e3) {
742
+ super(value, createZodValidator(schema6(maxLength)));
743
+ }
744
+ static create(value, maxLength = 2e3) {
745
+ return new _LongTextVo(value, maxLength);
746
+ }
747
+ };
748
+
749
+ // src/backend/core/validators/zod/wrappers/value-objects/medium-text.vo.ts
750
+ var import_zod7 = require("zod");
751
+
752
+ // src/backend/core/onion-layers/domain/value-objects/base-medium-text.vo.ts
753
+ var BaseMediumTextVo = class extends BaseValueObject {
754
+ /**
755
+ * Creates a new BaseMediumTextVo instance.
756
+ *
757
+ * @param value - The medium text string
758
+ * @param validator - Bound validator or skip validation symbol
759
+ */
760
+ constructor(value, validator) {
761
+ super(value, validator);
762
+ }
763
+ };
764
+
765
+ // src/backend/core/validators/zod/wrappers/value-objects/medium-text.vo.ts
766
+ var schema7 = (maxLength) => import_zod7.z.string().min(1).max(maxLength);
767
+ var MediumTextVo = class _MediumTextVo extends BaseMediumTextVo {
768
+ constructor(value, maxLength = 500) {
769
+ super(value, createZodValidator(schema7(maxLength)));
770
+ }
771
+ static create(value, maxLength = 500) {
772
+ return new _MediumTextVo(value, maxLength);
773
+ }
774
+ };
775
+
776
+ // src/backend/core/validators/zod/wrappers/value-objects/pagination.vo.ts
777
+ var import_zod8 = require("zod");
778
+
779
+ // src/backend/core/onion-layers/domain/value-objects/base-pagination.vo.ts
780
+ var BasePaginationVo = class extends BaseValueObject {
781
+ /**
782
+ * Creates a new BasePaginationVo instance.
783
+ *
784
+ * @param value - The pagination parameters
785
+ * @param value.page - The page number (typically 1-indexed)
786
+ * @param value.pageSize - The number of items per page
787
+ * @param validator - Bound validator or skip validation symbol
788
+ */
789
+ constructor(value, validator) {
790
+ super(value, validator);
791
+ }
792
+ /**
793
+ * The current page number.
794
+ */
795
+ get page() {
796
+ return this.value.page;
797
+ }
798
+ /**
799
+ * The number of items per page.
800
+ */
801
+ get pageSize() {
802
+ return this.value.pageSize;
803
+ }
804
+ };
805
+
806
+ // src/backend/core/validators/zod/wrappers/value-objects/pagination.vo.ts
807
+ var schema8 = (maxPageSize) => import_zod8.z.object({
808
+ page: import_zod8.z.coerce.number().int().min(1),
809
+ pageSize: import_zod8.z.coerce.number().int().min(1).max(maxPageSize)
810
+ });
811
+ var PaginationVo = class _PaginationVo extends BasePaginationVo {
812
+ constructor(value) {
813
+ super(value, SKIP_VALUE_OBJECT_VALIDATION);
814
+ }
815
+ static create({
816
+ page,
817
+ pageSize,
818
+ maxPageSize = 100
819
+ }) {
820
+ const validated = createZodValidator(schema8(maxPageSize)).validate({
821
+ page,
822
+ pageSize
823
+ });
824
+ return new _PaginationVo(validated);
825
+ }
826
+ };
827
+
828
+ // src/backend/core/validators/zod/wrappers/value-objects/short-text.vo.ts
829
+ var import_zod9 = require("zod");
830
+
831
+ // src/backend/core/onion-layers/domain/value-objects/base-short-text.vo.ts
832
+ var BaseShortTextVo = class extends BaseValueObject {
833
+ /**
834
+ * Creates a new BaseShortTextVo instance.
835
+ *
836
+ * @param value - The short text string
837
+ * @param validator - Bound validator or skip validation symbol
838
+ */
839
+ constructor(value, validator) {
840
+ super(value, validator);
841
+ }
842
+ };
843
+
844
+ // src/backend/core/validators/zod/wrappers/value-objects/short-text.vo.ts
845
+ var schema9 = (maxLength) => import_zod9.z.string().min(1).max(maxLength);
846
+ var ShortTextVo = class _ShortTextVo extends BaseShortTextVo {
847
+ constructor(value, maxLength = 100) {
848
+ super(value, createZodValidator(schema9(maxLength)));
849
+ }
850
+ static create(value, maxLength = 100) {
851
+ return new _ShortTextVo(value, maxLength);
852
+ }
853
+ };
854
+
855
+ // src/backend/core/validators/zod/wrappers/value-objects/uuid-v7.vo.ts
856
+ var import_zod10 = require("zod");
857
+
858
+ // src/backend/core/onion-layers/domain/value-objects/base-uuid-v7.vo.ts
859
+ var import_uuid2 = require("uuid");
860
+ var BaseUuidV7Vo = class extends BaseValueObject {
861
+ /**
862
+ * Creates a new BaseUuidV7Vo instance.
863
+ *
864
+ * @param value - The UUID v7 string value
865
+ * @param validator - Bound validator or skip validation symbol
866
+ */
867
+ constructor(value, validator) {
868
+ super(value, validator);
869
+ }
870
+ /**
871
+ * Generates a new UUID v7 value object.
872
+ *
873
+ * Creates a time-ordered UUID using the current timestamp,
874
+ * skipping validation since the `uuid` library guarantees format.
875
+ *
876
+ * @returns A new BaseUuidV7Vo with a freshly generated UUID
877
+ */
878
+ static generate() {
879
+ return new this((0, import_uuid2.v7)(), SKIP_VALUE_OBJECT_VALIDATION);
880
+ }
881
+ /**
882
+ * Creates a UUID v7 value object from an existing string.
883
+ *
884
+ * **Important:** This base implementation skips validation and accepts
885
+ * any string value. Subclasses should override this method with a
886
+ * validator to ensure UUID format correctness.
887
+ *
888
+ * @param value - The UUID v7 string value (not validated at base level)
889
+ * @returns A new BaseUuidV7Vo with the provided value
890
+ *
891
+ * @example Subclass with validation (recommended)
892
+ * ```typescript
893
+ * class OrderId extends BaseUuidV7Vo {
894
+ * static override create(value: string): OrderId {
895
+ * return new OrderId(value, uuidV7Validator);
896
+ * }
897
+ * }
898
+ * ```
899
+ *
900
+ * @see generate - For creating new UUIDs (always valid)
901
+ */
902
+ static create(value) {
903
+ return new this(value, SKIP_VALUE_OBJECT_VALIDATION);
904
+ }
905
+ };
906
+
907
+ // src/backend/core/validators/zod/wrappers/value-objects/uuid-v7.vo.ts
908
+ var schema10 = import_zod10.z.uuidv7();
909
+ var UuidV7Vo = class _UuidV7Vo extends BaseUuidV7Vo {
910
+ constructor(value) {
911
+ super(value, createZodValidator(schema10));
912
+ }
913
+ static create(value) {
914
+ return new _UuidV7Vo(value);
915
+ }
916
+ };
917
+ // Annotate the CommonJS export names for ESM import in node:
918
+ 0 && (module.exports = {
919
+ AuditByVo,
920
+ AuditInfoVo,
921
+ AuditOnVo,
922
+ Dto,
923
+ EmailVo,
924
+ LongTextVo,
925
+ MediumTextVo,
926
+ PaginationVo,
927
+ ShortTextVo,
928
+ UuidV4Vo,
929
+ UuidV7Vo,
930
+ ZodObjectValidator,
931
+ createZodValidator,
932
+ zodObjectValidator
933
+ });
934
+ //# sourceMappingURL=zod.cjs.map