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