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