@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 @@
1
+ {"version":3,"sources":["../../../../src/backend/core/validators/valibot/index.ts","../../../../src/backend/core/validators/valibot/object-validator.valibot.ts","../../../../src/backend/core/global/exceptions/coded-error.error.ts","../../../../src/backend/core/global/exceptions/error-codes.const.ts","../../../../src/backend/core/global/exceptions/object-validation.error.ts","../../../../src/backend/core/validators/valibot/bootstrap.ts","../../../../src/backend/core/global/classes/base-dto.class.ts","../../../../src/backend/core/validators/valibot/wrappers/dto.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/audit-by.vo.ts","../../../../src/backend/core/onion-layers/domain/classes/base-value-object.class.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-audit-by.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/uuid-v4.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-uuid-v4.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/audit-info.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-audit-info.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/audit-on.vo.ts","../../../../src/backend/core/onion-layers/domain/exceptions/domain.error.ts","../../../../src/backend/core/onion-layers/domain/exceptions/invariant-violation.error.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-audit-on.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/email.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-email.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/long-text.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-long-text.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/medium-text.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-medium-text.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/pagination.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-pagination.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/short-text.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-short-text.vo.ts","../../../../src/backend/core/validators/valibot/wrappers/value-objects/uuid-v7.vo.ts","../../../../src/backend/core/onion-layers/domain/value-objects/base-uuid-v7.vo.ts"],"sourcesContent":["export * from './bootstrap';\nexport * from './object-validator.valibot';\nexport * from './wrappers';\n","/**\n * Valibot implementation of the ObjectValidatorPort.\n *\n * Adapts Valibot's validation API to the framework's validator abstraction,\n * converting Valibot issues to {@link ObjectValidationError} with normalized paths.\n *\n * **Path Format (By Design):**\n * Each validation library reports error paths differently. Valibot uses\n * an array of PathItem objects with `key` properties. The internal `formatPath`\n * function normalizes this to a consistent format:\n * - Object fields: `user.email`\n * - Array indices: `items[0].name`\n * - Root-level: `root`\n *\n * @example Direct usage\n * ```typescript\n * const validator = new ValibotObjectValidator();\n * const result = validator.validateObject(v.string(), 'hello');\n * ```\n *\n * @example With bootstrap (recommended)\n * ```typescript\n * import { createValibotValidator } from '@cosmneo/onion-lasagna/backend/core/validators/valibot';\n * const emailValidator = createValibotValidator(v.pipe(v.string(), v.email()));\n * ```\n *\n * @module\n */\nimport { safeParse } from 'valibot';\nimport type { BaseSchema, BaseIssue } from 'valibot';\nimport type {\n BoundValidator,\n ObjectValidatorPort,\n} from '../../global/interfaces/ports/object-validator.port';\nimport { ObjectValidationError } from '../../global/exceptions/object-validation.error';\nimport type { ValidationError } from '../../global/interfaces/types/validation-error.type';\n\n/**\n * Valibot path item structure.\n */\ninterface PathItem {\n key: unknown;\n}\n\n/**\n * Converts Valibot's PathItem array to dot-notation string.\n *\n * @param path - Array of PathItem objects from Valibot issue\n * @returns Normalized path string (e.g., \"user.email\", \"items[0]\")\n */\nconst formatPath = (path: readonly PathItem[] | undefined): string => {\n if (!path?.length) return 'root';\n return path\n .map((item, index) => {\n const segment = item.key;\n if (typeof segment === 'number') return `[${segment}]`;\n if (typeof segment === 'symbol') return segment.description ?? String(segment);\n return index === 0 ? String(segment) : `.${String(segment)}`;\n })\n .join('');\n};\n\n/**\n * Transforms Valibot issues to framework ValidationError format.\n */\nconst toValidationErrors = (issues: BaseIssue<unknown>[]): ValidationError[] =>\n issues.map((issue) => ({\n field: formatPath(issue?.path as readonly PathItem[] | undefined),\n message: issue?.message ?? 'Validation failed',\n }));\n\n/**\n * Valibot adapter implementing the ObjectValidatorPort interface.\n *\n * @implements {ObjectValidatorPort<BaseSchema>}\n */\nexport class ValibotObjectValidator implements ObjectValidatorPort<\n BaseSchema<unknown, unknown, BaseIssue<unknown>>\n> {\n /**\n * Validates a value against a Valibot schema.\n *\n * @typeParam T - The validated output type\n * @param schema - Valibot BaseSchema to validate against\n * @param value - Unknown value to validate\n * @returns The validated and typed value\n * @throws {ObjectValidationError} When validation fails\n */\n public validateObject<T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>, value: unknown): T;\n public validateObject(\n schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>,\n value: unknown,\n ): unknown;\n public validateObject(\n schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>,\n value: unknown,\n ): unknown {\n const result = safeParse(schema, value);\n if (result.success) {\n return result.output;\n }\n\n throw new ObjectValidationError({\n message: 'Object validation failed',\n cause: result.issues,\n validationErrors: toValidationErrors(result.issues),\n });\n }\n\n /**\n * Creates a bound validator from a Valibot schema.\n *\n * @typeParam T - The validated output type\n * @param schema - Valibot BaseSchema to bind\n * @returns A BoundValidator ready for use with BaseDto or BaseValueObject\n */\n public withSchema<T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>): BoundValidator<T>;\n public withSchema(\n schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>,\n ): BoundValidator<unknown>;\n public withSchema(\n schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>,\n ): BoundValidator<unknown> {\n return {\n validate: (value: unknown) => this.validateObject(schema, value),\n };\n }\n}\n","import type { ErrorCode } from './error-codes.const';\n\n/**\n * Base error class for all application errors with a machine-readable code.\n *\n * Abstract class that extends the native `Error` with:\n * - A `code` property for programmatic error handling\n * - Optional `cause` for error chaining (ES2022 compatible)\n * - A `fromError` static factory pattern for error transformation\n *\n * **Why abstract:** Prevents non-declarative error usage. All errors must\n * be explicitly defined as subclasses to ensure consistent error taxonomy.\n *\n * @example Subclass implementation\n * ```typescript\n * class DbError extends InfraError {\n * static override fromError(cause: unknown): DbError {\n * return new DbError({\n * message: cause instanceof Error ? cause.message : 'Database error',\n * cause,\n * });\n * }\n * }\n * ```\n *\n * @example Usage with wrapErrorAsync\n * ```typescript\n * await wrapErrorAsync(\n * () => this.db.query(...),\n * DbError.fromError,\n * );\n * ```\n */\nexport abstract class CodedError extends Error {\n /** Machine-readable error code for programmatic handling. */\n public readonly code: ErrorCode | string;\n\n /**\n * Creates a new CodedError instance.\n *\n * @param options - Error configuration\n * @param options.message - Human-readable error message\n * @param options.code - Machine-readable error code from ErrorCodes registry or custom string\n * @param options.cause - Optional underlying error that caused this error\n */\n constructor({\n message,\n code,\n cause,\n }: {\n message: string;\n code: ErrorCode | string;\n cause?: unknown;\n }) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n if (cause !== undefined) {\n Object.defineProperty(this, 'cause', {\n value: cause,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n }\n }\n\n /**\n * Factory method to create a typed error from a caught error.\n *\n * Subclasses should override this to provide proper error transformation.\n * Designed for use with {@link wrapErrorAsync} and {@link wrapError}.\n *\n * @param _cause - The original caught error\n * @returns A new CodedError instance\n * @throws {Error} If not overridden by subclass\n *\n * @example\n * ```typescript\n * class NotFoundError extends UseCaseError {\n * static override fromError(cause: unknown): NotFoundError {\n * return new NotFoundError({\n * message: 'Resource not found',\n * cause,\n * });\n * }\n * }\n * ```\n */\n static fromError(_cause: unknown): CodedError {\n throw new Error(`${this.name}.fromError() must be implemented by subclass`);\n }\n}\n","/**\n * Centralized registry of all error codes used across the application.\n *\n * Error codes are grouped by architectural layer to maintain clear boundaries\n * and make it easy to identify where an error originated.\n *\n * @example Using error codes in custom errors\n * ```typescript\n * import { ErrorCodes } from '@cosmneo/onion-lasagna/backend/core/global';\n *\n * throw new NotFoundError({\n * message: 'User not found',\n * code: ErrorCodes.App.NOT_FOUND,\n * });\n * ```\n *\n * @example Checking error codes programmatically\n * ```typescript\n * if (error.code === ErrorCodes.App.NOT_FOUND) {\n * // Handle not found case\n * }\n * ```\n */\nexport const ErrorCodes = {\n /**\n * Domain layer error codes.\n * Used for business rule violations and invariant failures.\n */\n Domain: {\n /** Generic domain error */\n DOMAIN_ERROR: 'DOMAIN_ERROR',\n /** Business invariant was violated */\n INVARIANT_VIOLATION: 'INVARIANT_VIOLATION',\n /** Aggregate was partially loaded (missing required relations) */\n PARTIAL_LOAD: 'PARTIAL_LOAD',\n },\n\n /**\n * Application layer (use case) error codes.\n * Used for orchestration failures and business operation errors.\n */\n App: {\n /** Generic use case error */\n USE_CASE_ERROR: 'USE_CASE_ERROR',\n /** Requested resource was not found */\n NOT_FOUND: 'NOT_FOUND',\n /** Resource state conflict (e.g., duplicate, already exists) */\n CONFLICT: 'CONFLICT',\n /** Request is valid but cannot be processed due to business rules */\n UNPROCESSABLE: 'UNPROCESSABLE',\n },\n\n /**\n * Infrastructure layer error codes.\n * Used for data access, external services, and I/O failures.\n */\n Infra: {\n /** Generic infrastructure error */\n INFRA_ERROR: 'INFRA_ERROR',\n /** Database operation failed */\n DB_ERROR: 'DB_ERROR',\n /** Network connectivity or communication error */\n NETWORK_ERROR: 'NETWORK_ERROR',\n /** Operation timed out */\n TIMEOUT_ERROR: 'TIMEOUT_ERROR',\n /** External/third-party service error */\n EXTERNAL_SERVICE_ERROR: 'EXTERNAL_SERVICE_ERROR',\n },\n\n /**\n * Presentation layer error codes.\n * Used for controller, request handling, and authorization errors.\n */\n Presentation: {\n /** Generic controller error */\n CONTROLLER_ERROR: 'CONTROLLER_ERROR',\n /** Request denied due to authorization failure */\n ACCESS_DENIED: 'ACCESS_DENIED',\n /** Request validation failed (malformed input) */\n INVALID_REQUEST: 'INVALID_REQUEST',\n },\n\n /**\n * Global/cross-cutting error codes.\n * Used for validation and other cross-layer concerns.\n */\n Global: {\n /** Object/schema validation failed */\n OBJECT_VALIDATION_ERROR: 'OBJECT_VALIDATION_ERROR',\n },\n} as const;\n\n/**\n * Type representing all possible domain error codes.\n */\nexport type DomainErrorCode = (typeof ErrorCodes.Domain)[keyof typeof ErrorCodes.Domain];\n\n/**\n * Type representing all possible application error codes.\n */\nexport type AppErrorCode = (typeof ErrorCodes.App)[keyof typeof ErrorCodes.App];\n\n/**\n * Type representing all possible infrastructure error codes.\n */\nexport type InfraErrorCode = (typeof ErrorCodes.Infra)[keyof typeof ErrorCodes.Infra];\n\n/**\n * Type representing all possible presentation error codes.\n */\nexport type PresentationErrorCode =\n (typeof ErrorCodes.Presentation)[keyof typeof ErrorCodes.Presentation];\n\n/**\n * Type representing all possible global error codes.\n */\nexport type GlobalErrorCode = (typeof ErrorCodes.Global)[keyof typeof ErrorCodes.Global];\n\n/**\n * Union type of all error codes across all layers.\n *\n * Use this when you need to accept any valid error code.\n *\n * @example\n * ```typescript\n * function logError(code: ErrorCode, message: string) {\n * console.error(`[${code}] ${message}`);\n * }\n * ```\n */\nexport type ErrorCode =\n | DomainErrorCode\n | AppErrorCode\n | InfraErrorCode\n | PresentationErrorCode\n | GlobalErrorCode;\n","import { CodedError } from './coded-error.error';\nimport { ErrorCodes, type GlobalErrorCode } from './error-codes.const';\nimport type { ValidationError } from '../interfaces/types/validation-error.type';\n\n/**\n * Error thrown when object validation fails.\n *\n * Contains structured validation errors with field paths and messages,\n * making it easy to report specific validation failures to clients.\n * Thrown by all validator implementations (Zod, ArkType, TypeBox, Valibot).\n *\n * **Flow:**\n * 1. Validator throws `ObjectValidationError` with field-level errors\n * 2. Controller catches and converts to {@link InvalidRequestError}\n * 3. HTTP layer maps to 400 Bad Request with error details\n *\n * @example\n * ```typescript\n * try {\n * const dto = CreateUserDto.create(invalidData);\n * } catch (error) {\n * if (error instanceof ObjectValidationError) {\n * console.log(error.validationErrors);\n * // [\n * // { field: 'email', message: 'Invalid email format' },\n * // { field: 'age', message: 'Must be a positive number' }\n * // ]\n * }\n * }\n * ```\n */\nexport class ObjectValidationError extends CodedError {\n /**\n * Array of field-level validation errors.\n *\n * Each entry contains:\n * - `field`: Dot-notation path to the invalid field (e.g., 'user.email')\n * - `message`: Human-readable validation failure message\n */\n validationErrors: ValidationError[];\n\n /**\n * Creates a new ObjectValidationError instance.\n *\n * @param options - Error configuration\n * @param options.message - Human-readable summary message\n * @param options.code - Machine-readable error code (default: 'OBJECT_VALIDATION_ERROR')\n * @param options.cause - Optional underlying error from validation library\n * @param options.validationErrors - Array of field-level validation errors\n */\n constructor({\n message,\n code = ErrorCodes.Global.OBJECT_VALIDATION_ERROR,\n cause,\n validationErrors,\n }: {\n message: string;\n code?: GlobalErrorCode | string;\n cause?: unknown;\n validationErrors: ValidationError[];\n }) {\n super({ message, code, cause });\n this.validationErrors = validationErrors;\n }\n\n /**\n * Creates an ObjectValidationError from a caught error.\n *\n * @param cause - The original caught error\n * @returns A new ObjectValidationError instance with the cause attached\n */\n static override fromError(cause: unknown): ObjectValidationError {\n return new ObjectValidationError({\n message: cause instanceof Error ? cause.message : 'Validation failed',\n cause,\n validationErrors: [],\n });\n }\n}\n","/**\n * Valibot validator bootstrap module.\n *\n * Entry point for creating Valibot-based validators compatible with\n * {@link BaseDto} and {@link BaseValueObject}. Provides both a\n * singleton instance and a factory function for convenience.\n *\n * @see {@link ValibotObjectValidator} for path normalization details.\n *\n * @example\n * ```typescript\n * import { createValibotValidator } from '@cosmneo/onion-lasagna/backend/core/validators/valibot';\n * import * as v from 'valibot';\n *\n * const userSchema = v.object({\n * name: v.pipe(v.string(), v.minLength(1)),\n * email: v.pipe(v.string(), v.email()),\n * });\n *\n * const validator = createValibotValidator(userSchema);\n *\n * // Use with BaseDto\n * class CreateUserDto extends BaseDto<{ name: string; email: string }> {\n * static create(data: unknown) {\n * return new CreateUserDto(data, validator);\n * }\n * }\n * ```\n *\n * @module\n */\nimport type { BaseSchema, BaseIssue } from 'valibot';\nimport { ValibotObjectValidator } from './object-validator.valibot';\nimport type { BoundValidator } from '../../global/interfaces/ports/object-validator.port';\n\n/**\n * Singleton Valibot validator instance.\n *\n * Use this directly when you need access to the underlying\n * {@link ObjectValidatorPort} implementation.\n */\nexport const valibotObjectValidator = new ValibotObjectValidator();\n\n/**\n * Creates a bound validator from a Valibot schema.\n *\n * @typeParam T - The validated output type inferred from the schema\n * @param schema - A Valibot BaseSchema defining the validation rules\n * @returns A {@link BoundValidator} ready for use with BaseDto or BaseValueObject\n *\n * @example\n * ```typescript\n * const emailValidator = createValibotValidator(v.pipe(v.string(), v.email()));\n * const validated = emailValidator.validate('user@example.com'); // Returns string\n * ```\n */\nexport const createValibotValidator = <T>(\n schema: BaseSchema<unknown, T, BaseIssue<unknown>>,\n): BoundValidator<T> => valibotObjectValidator.withSchema<T>(schema);\n","import type { BoundValidator } from '../interfaces/ports/object-validator.port';\n\n/**\n * Sentinel value to skip validation in DTO constructors.\n *\n * Use this when creating a DTO from already-validated data,\n * such as when mapping between layers or in tests.\n *\n * @example\n * ```typescript\n * // Skip validation for already-validated data\n * const dto = new CreateUserInputDto(validatedData, SKIP_DTO_VALIDATION);\n * ```\n */\nexport const SKIP_DTO_VALIDATION = 'skip dto validation' as const;\n\n/**\n * Base class for Data Transfer Objects (DTOs).\n *\n * DTOs are validated data containers used to transfer data between layers.\n * Unlike Value Objects, DTOs are not domain concepts - they are purely\n * for data transfer and validation at system boundaries.\n *\n * Key differences from Value Objects:\n * - **DTOs**: Transfer data between layers (e.g., request/response payloads)\n * - **Value Objects**: Represent domain concepts with behavior (e.g., Email, Money)\n *\n * @typeParam T - The shape of the data being transferred\n *\n * @example\n * ```typescript\n * // Define a DTO with validation\n * class CreateUserInputDto extends BaseDto<{ name: string; email: string }> {\n * private constructor(data: unknown, validator: BoundValidator<{ name: string; email: string }>) {\n * super(data, validator);\n * }\n *\n * static create(data: unknown): CreateUserInputDto {\n * return new CreateUserInputDto(data, createUserValidator);\n * }\n * }\n *\n * // Usage in a controller\n * const dto = CreateUserInputDto.create(request.body);\n * console.log(dto.data.name); // Typed and validated\n * ```\n */\nexport class BaseDto<T> {\n private readonly _data: T;\n\n /**\n * Creates a new DTO instance.\n *\n * @param data - The raw data to validate and wrap\n * @param validator - A bound validator or SKIP_DTO_VALIDATION to bypass\n * @throws {ObjectValidationError} When validation fails\n */\n constructor(data: T, validator: BoundValidator<T> | typeof SKIP_DTO_VALIDATION) {\n this._data = validator === SKIP_DTO_VALIDATION ? data : validator.validate(data);\n }\n\n /**\n * The validated data payload.\n *\n * @returns The validated data of type T\n */\n public get data(): T {\n return this._data;\n }\n}\n","import type { BaseSchema, BaseIssue } from 'valibot';\nimport { BaseDto } from '../../../global/classes/base-dto.class';\nimport { createValibotValidator } from '../bootstrap';\n\nexport class Dto<T> extends BaseDto<T> {\n constructor(schema: BaseSchema<unknown, T, BaseIssue<unknown>>, value: T) {\n super(value, createValibotValidator(schema));\n }\n}\n","import { object, pipe, string, uuid, optional } from 'valibot';\nimport { BaseAuditByVo } from '../../../../onion-layers/domain/value-objects/base-audit-by.vo';\nimport { SKIP_VALUE_OBJECT_VALIDATION } from '../../../../onion-layers/domain/classes/base-value-object.class';\nimport { createValibotValidator } from '../../bootstrap';\nimport type { BaseUuidV4Vo } from '../../../../onion-layers/domain/value-objects/base-uuid-v4.vo';\nimport { UuidV4Vo } from './uuid-v4.vo';\n\nconst schema = object({\n createdBy: optional(pipe(string(), uuid())),\n updatedBy: optional(pipe(string(), uuid())),\n});\n\nexport class AuditByVo extends BaseAuditByVo {\n private constructor(value: { createdBy?: BaseUuidV4Vo; updatedBy?: BaseUuidV4Vo }) {\n super(value, SKIP_VALUE_OBJECT_VALIDATION);\n }\n\n static create({ createdBy, updatedBy }: { createdBy?: string; updatedBy?: string }): AuditByVo {\n const validated = createValibotValidator(schema).validate({\n createdBy,\n updatedBy,\n });\n\n return new AuditByVo({\n createdBy: validated.createdBy ? UuidV4Vo.create(validated.createdBy) : undefined,\n updatedBy: validated.updatedBy ? UuidV4Vo.create(validated.updatedBy) : undefined,\n });\n }\n\n update(updatedBy: BaseUuidV4Vo): AuditByVo {\n return new AuditByVo({ createdBy: this.createdBy, updatedBy });\n }\n}\n","import type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\n\n/**\n * Sentinel value to skip validation in Value Object constructors.\n *\n * Use this when creating a Value Object from already-validated data,\n * such as when reconstituting from a database or creating derived VOs.\n *\n * @example\n * ```typescript\n * // In a VO that wraps a validated value\n * class Email extends BaseValueObject<string> {\n * private constructor(value: string, validator: BoundValidator<string> | SkipValueObjectValidation) {\n * super(value, validator);\n * }\n *\n * // Public factory validates\n * static create(value: string): Email {\n * return new Email(value, emailValidator);\n * }\n *\n * // Internal factory skips validation (data already validated)\n * static fromPersistence(value: string): Email {\n * return new Email(value, SKIP_VALUE_OBJECT_VALIDATION);\n * }\n * }\n * ```\n */\nexport const SKIP_VALUE_OBJECT_VALIDATION = 'skip value object validation' as const;\n\n/** Type for the skip validation sentinel. */\nexport type SkipValueObjectValidation = typeof SKIP_VALUE_OBJECT_VALIDATION;\n\n/**\n * Deep equality comparison for value objects.\n * Handles primitives, Dates, Arrays, and nested Objects.\n * @internal\n */\nfunction deepEquals(a: unknown, b: unknown): boolean {\n // Same reference or both primitives with same value\n if (a === b) return true;\n\n // Handle null/undefined\n if (a === null || a === undefined || b === null || b === undefined) {\n return a === b;\n }\n\n // Handle Date objects\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n // Handle Arrays\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => deepEquals(item, b[index]));\n }\n\n // Handle Objects\n if (typeof a === 'object' && typeof b === 'object') {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) => deepEquals(aObj[key], bObj[key]));\n }\n\n // Different types or values\n return false;\n}\n\n/**\n * Base class for Domain-Driven Design Value Objects.\n *\n * Value Objects are immutable domain primitives that are compared by value,\n * not by reference. They encapsulate validation and domain logic for\n * primitive concepts like Email, Money, Address, etc.\n *\n * Key characteristics:\n * - **Immutable**: Value cannot be changed after construction\n * - **Equality by value**: Two VOs with the same value are considered equal\n * - **Self-validating**: Validation runs at construction time\n *\n * @typeParam T - The underlying value type\n *\n * @example\n * ```typescript\n * class Email extends BaseValueObject<string> {\n * private constructor(value: string, validator: BoundValidator<string> | SkipValueObjectValidation) {\n * super(value, validator);\n * }\n *\n * static create(value: string): Email {\n * return new Email(value, emailValidator);\n * }\n *\n * get domain(): string {\n * return this.value.split('@')[1];\n * }\n * }\n *\n * const email1 = Email.create('user@example.com');\n * const email2 = Email.create('user@example.com');\n * email1.equals(email2); // true\n * ```\n */\nexport class BaseValueObject<T> {\n private readonly _value: T;\n\n /**\n * Creates a new Value Object instance.\n *\n * @param value - The raw value to wrap\n * @param validator - A bound validator or SKIP_VALUE_OBJECT_VALIDATION to bypass\n * @throws {ObjectValidationError} When validation fails\n */\n protected constructor(\n value: T,\n validator: BoundValidator<T> | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n this._value = validator === SKIP_VALUE_OBJECT_VALIDATION ? value : validator.validate(value);\n }\n\n /**\n * Compares this Value Object with another for equality.\n *\n * Uses deep equality comparison to handle nested objects, arrays, and dates.\n * Two Value Objects are equal if their underlying values are deeply equal.\n *\n * @param other - The Value Object to compare with\n * @returns `true` if the values are deeply equal, `false` otherwise\n */\n public equals(other: BaseValueObject<T>): boolean {\n // Fast path: same reference\n if (this === other) return true;\n\n // Deep equality comparison\n return deepEquals(this.value, other.value);\n }\n\n /**\n * The underlying immutable value.\n *\n * @returns The wrapped value of type T\n */\n public get value(): T {\n return this._value;\n }\n}\n","/**\n * Base audit user tracking value object.\n *\n * Tracks which user created and last updated an entity. User IDs are\n * optional to support system-initiated operations where no user context\n * is available.\n *\n * @example Extending for a validator-specific implementation\n * ```typescript\n * class AuditByVo extends BaseAuditByVo {\n * static create(opts?: {\n * createdBy?: UuidV4Vo;\n * updatedBy?: UuidV4Vo;\n * }): AuditByVo {\n * return new AuditByVo({\n * createdBy: opts?.createdBy,\n * updatedBy: opts?.updatedBy ?? opts?.createdBy,\n * }, SKIP_VALUE_OBJECT_VALIDATION);\n * }\n *\n * update(updatedBy: UuidV4Vo): AuditByVo {\n * return new AuditByVo({\n * createdBy: this.createdBy,\n * updatedBy,\n * }, SKIP_VALUE_OBJECT_VALIDATION);\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SkipValueObjectValidation } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\nimport type { BaseUuidV4Vo } from './base-uuid-v4.vo';\n\n/**\n * Abstract base class for audit user tracking value objects.\n *\n * @extends BaseValueObject\n */\nexport abstract class BaseAuditByVo extends BaseValueObject<{\n createdBy?: BaseUuidV4Vo;\n updatedBy?: BaseUuidV4Vo;\n}> {\n /**\n * Creates a new BaseAuditByVo instance.\n *\n * @param value - The user tracking values\n * @param value.createdBy - User who created the entity (optional for system ops)\n * @param value.updatedBy - User who last updated the entity (optional)\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: { createdBy?: BaseUuidV4Vo; updatedBy?: BaseUuidV4Vo },\n validator:\n | BoundValidator<{ createdBy?: BaseUuidV4Vo; updatedBy?: BaseUuidV4Vo }>\n | SkipValueObjectValidation,\n ) {\n super(value, validator);\n }\n\n /**\n * Creates a new audit user tracking with updated user ID.\n *\n * @param updatedBy - The user ID performing the update\n * @returns A new immutable audit user tracking instance\n */\n abstract update(updatedBy: BaseUuidV4Vo): BaseAuditByVo;\n\n /**\n * The user ID who created the entity.\n * Returns `undefined` for system-created entities.\n */\n get createdBy(): BaseUuidV4Vo | undefined {\n return this.value.createdBy;\n }\n\n /**\n * The user ID who last updated the entity.\n * Returns `undefined` for system-updated entities.\n */\n get updatedBy(): BaseUuidV4Vo | undefined {\n return this.value.updatedBy;\n }\n}\n","import { pipe, string, uuid } from 'valibot';\nimport { BaseUuidV4Vo } from '../../../../onion-layers/domain/value-objects/base-uuid-v4.vo';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst schema = pipe(string(), uuid());\n\nexport class UuidV4Vo extends BaseUuidV4Vo {\n private constructor(value: string) {\n super(value, createValibotValidator(schema));\n }\n\n static override create(value: string): UuidV4Vo {\n return new UuidV4Vo(value);\n }\n}\n","/**\n * Base UUID v4 value object for random entity identifiers.\n *\n * UUID v4 is a randomly generated UUID, suitable for identifiers where\n * time-ordering is not required. For time-sortable IDs, use {@link BaseUuidV7Vo}.\n *\n * **Use Cases:**\n * - User IDs (for audit tracking)\n * - Session tokens\n * - Correlation IDs\n * - Any identifier where time-ordering doesn't matter\n *\n * @example Generating a new ID\n * ```typescript\n * const id = BaseUuidV4Vo.generate();\n * console.log(id.value); // e.g., \"550e8400-e29b-41d4-a716-446655440000\"\n * ```\n *\n * @example Extending for validation\n * ```typescript\n * class UserIdVo extends BaseUuidV4Vo {\n * static create(value: string): UserIdVo {\n * return new UserIdVo(value, uuidValidator);\n * }\n *\n * static generate(): UserIdVo {\n * return new UserIdVo(v4(), SKIP_VALUE_OBJECT_VALIDATION);\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport { BaseValueObject, SKIP_VALUE_OBJECT_VALIDATION } from '../classes/base-value-object.class';\nimport { v4 } from 'uuid';\n\n/**\n * Value object for UUID v4 identifiers.\n *\n * Provides a `generate()` factory method that creates new random UUIDs.\n *\n * @extends BaseValueObject<string>\n */\nexport class BaseUuidV4Vo extends BaseValueObject<string> {\n /**\n * Creates a new BaseUuidV4Vo instance.\n *\n * @param value - The UUID v4 string value\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: string,\n validator: BoundValidator<string> | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n super(value, validator);\n }\n\n /**\n * Generates a new UUID v4 value object.\n *\n * Creates a random UUID, skipping validation since the\n * `uuid` library guarantees format.\n *\n * @returns A new BaseUuidV4Vo with a freshly generated UUID\n */\n static generate(): BaseUuidV4Vo {\n return new this(v4(), SKIP_VALUE_OBJECT_VALIDATION);\n }\n\n /**\n * Creates a UUID v4 value object from an existing string.\n *\n * **Important:** This base implementation skips validation and accepts\n * any string value. Subclasses should override this method with a\n * validator to ensure UUID format correctness.\n *\n * @param value - The UUID v4 string value (not validated at base level)\n * @returns A new BaseUuidV4Vo with the provided value\n *\n * @example Subclass with validation (recommended)\n * ```typescript\n * class UserId extends BaseUuidV4Vo {\n * static override create(value: string): UserId {\n * return new UserId(value, uuidV4Validator);\n * }\n * }\n * ```\n *\n * @see generate - For creating new UUIDs (always valid)\n */\n static create(value: string): BaseUuidV4Vo {\n return new this(value, SKIP_VALUE_OBJECT_VALIDATION);\n }\n}\n","import { object, pipe, string, uuid, date, optional } from 'valibot';\nimport { BaseAuditInfoVo } from '../../../../onion-layers/domain/value-objects/base-audit-info.vo';\nimport { SKIP_VALUE_OBJECT_VALIDATION } from '../../../../onion-layers/domain/classes/base-value-object.class';\nimport { createValibotValidator } from '../../bootstrap';\nimport type { BaseAuditByVo } from '../../../../onion-layers/domain/value-objects/base-audit-by.vo';\nimport type { BaseAuditOnVo } from '../../../../onion-layers/domain/value-objects/base-audit-on.vo';\nimport type { BaseUuidV4Vo } from '../../../../onion-layers/domain/value-objects/base-uuid-v4.vo';\nimport { AuditByVo } from './audit-by.vo';\nimport { AuditOnVo } from './audit-on.vo';\n\nconst schema = object({\n createdBy: optional(pipe(string(), uuid())),\n createdAt: optional(date()),\n updatedBy: optional(pipe(string(), uuid())),\n updatedAt: optional(date()),\n});\n\nexport class AuditInfoVo extends BaseAuditInfoVo {\n private constructor(value: { by: BaseAuditByVo; on: BaseAuditOnVo }) {\n super(value, SKIP_VALUE_OBJECT_VALIDATION);\n }\n\n static create({\n createdBy,\n createdAt,\n updatedBy,\n updatedAt,\n }: {\n createdBy?: string;\n createdAt?: Date;\n updatedBy?: string;\n updatedAt?: Date;\n }): AuditInfoVo {\n const validated = createValibotValidator(schema).validate({\n createdBy,\n createdAt,\n updatedBy,\n updatedAt,\n });\n\n const by = AuditByVo.create({\n createdBy: validated.createdBy,\n updatedBy: validated.updatedBy,\n });\n const on = AuditOnVo.create({\n createdAt: validated.createdAt,\n updatedAt: validated.updatedAt,\n });\n\n return new AuditInfoVo({ by, on });\n }\n\n static createNew(createdBy?: string): AuditInfoVo {\n const by = AuditByVo.create({ createdBy });\n const on = AuditOnVo.create({});\n return new AuditInfoVo({ by, on });\n }\n\n update(updatedBy: BaseUuidV4Vo): AuditInfoVo {\n const by = this.value.by.update(updatedBy);\n const on = this.value.on.update();\n return new AuditInfoVo({ by, on });\n }\n}\n","/**\n * Base audit info value object for entity tracking.\n *\n * Composite value object that combines timestamp tracking ({@link BaseAuditOnVo})\n * and user tracking ({@link BaseAuditByVo}) into a single immutable audit record.\n * Used for tracking entity creation and modification history.\n *\n * **Composition:**\n * - `on`: {@link BaseAuditOnVo} - timestamps (createdAt, updatedAt)\n * - `by`: {@link BaseAuditByVo} - user IDs (createdBy, updatedBy)\n *\n * **Immutability:**\n * Date getters return cloned Date objects to prevent external mutation.\n *\n * @example Extending for a validator-specific implementation\n * ```typescript\n * class AuditInfoVo extends BaseAuditInfoVo {\n * static create(createdBy?: UuidV4Vo): AuditInfoVo {\n * const now = new Date();\n * return new AuditInfoVo({\n * by: AuditByVo.create({ createdBy, updatedBy: createdBy }),\n * on: AuditOnVo.create({ createdAt: now, updatedAt: now }),\n * }, SKIP_VALUE_OBJECT_VALIDATION);\n * }\n *\n * update(updatedBy: UuidV4Vo): AuditInfoVo {\n * return new AuditInfoVo({\n * by: this.value.by.update(updatedBy),\n * on: this.value.on.update(),\n * }, SKIP_VALUE_OBJECT_VALIDATION);\n * }\n * }\n * ```\n *\n * @example Using with an entity\n * ```typescript\n * class User {\n * constructor(\n * public readonly id: UuidV7Vo,\n * public readonly name: string,\n * public readonly audit: AuditInfoVo,\n * ) {}\n *\n * updateName(name: string, updatedBy: UuidV4Vo): User {\n * return new User(this.id, name, this.audit.update(updatedBy));\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SkipValueObjectValidation } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\nimport type { BaseAuditByVo } from './base-audit-by.vo';\nimport type { BaseAuditOnVo } from './base-audit-on.vo';\nimport type { BaseUuidV4Vo } from './base-uuid-v4.vo';\n\n/**\n * Abstract base class for audit information value objects.\n *\n * Extend this class and implement the `update()` method with your\n * validator-specific child VOs.\n *\n * @extends BaseValueObject\n */\nexport abstract class BaseAuditInfoVo extends BaseValueObject<{\n by: BaseAuditByVo;\n on: BaseAuditOnVo;\n}> {\n /**\n * Creates a new BaseAuditInfoVo instance.\n *\n * @param value - Composite value containing audit by and on VOs\n * @param value.by - User tracking value object\n * @param value.on - Timestamp tracking value object\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: { by: BaseAuditByVo; on: BaseAuditOnVo },\n validator: BoundValidator<{ by: BaseAuditByVo; on: BaseAuditOnVo }> | SkipValueObjectValidation,\n ) {\n super(value, validator);\n }\n\n /**\n * Creates a new audit info with updated timestamp and user.\n *\n * @param updatedBy - The user ID performing the update\n * @returns A new immutable audit info instance\n */\n abstract update(updatedBy: BaseUuidV4Vo): BaseAuditInfoVo;\n\n /**\n * The user ID who created the entity.\n * Returns `undefined` for system-created entities.\n */\n get createdBy(): BaseUuidV4Vo | undefined {\n return this.value.by.createdBy;\n }\n\n /**\n * The timestamp when the entity was created.\n * Returns a cloned Date to prevent mutation.\n */\n get createdAt(): Date {\n return new Date(this.value.on.createdAt.getTime());\n }\n\n /**\n * The user ID who last updated the entity.\n * Returns `undefined` for system-updated entities.\n */\n get updatedBy(): BaseUuidV4Vo | undefined {\n return this.value.by.updatedBy;\n }\n\n /**\n * The timestamp when the entity was last updated.\n * Returns a cloned Date to prevent mutation.\n */\n get updatedAt(): Date {\n return new Date(this.value.on.updatedAt.getTime());\n }\n\n /**\n * Whether the entity has been modified since creation.\n *\n * Compares both timestamps and user IDs. Returns `true` if either:\n * - The updatedAt timestamp differs from createdAt\n * - The updatedBy user differs from createdBy\n *\n * Note: When both createdBy and updatedBy are undefined (system-created\n * entities), this correctly returns false for the user comparison.\n */\n get isModified(): boolean {\n const timestampChanged = this.updatedAt.getTime() !== this.createdAt.getTime();\n const userChanged = this.updatedBy?.value !== this.createdBy?.value;\n return timestampChanged || userChanged;\n }\n\n /**\n * Alias for `updatedBy` for semantic clarity.\n */\n get lastModifiedBy(): BaseUuidV4Vo | undefined {\n return this.updatedBy;\n }\n\n /**\n * Alias for `updatedAt` for semantic clarity.\n */\n get lastModifiedAt(): Date {\n return this.updatedAt;\n }\n}\n","import { object, date, optional } from 'valibot';\nimport { BaseAuditOnVo } from '../../../../onion-layers/domain/value-objects/base-audit-on.vo';\nimport { SKIP_VALUE_OBJECT_VALIDATION } from '../../../../onion-layers/domain/classes/base-value-object.class';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst schema = object({\n createdAt: optional(date()),\n updatedAt: optional(date()),\n});\n\nexport class AuditOnVo extends BaseAuditOnVo {\n private constructor(value: { createdAt: Date; updatedAt: Date }) {\n super(value, SKIP_VALUE_OBJECT_VALIDATION);\n }\n\n static create({ createdAt, updatedAt }: { createdAt?: Date; updatedAt?: Date }): AuditOnVo {\n const validated = createValibotValidator(schema).validate({\n createdAt,\n updatedAt,\n });\n\n const finalCreatedAt = validated.createdAt ?? new Date();\n const finalUpdatedAt = validated.updatedAt ?? finalCreatedAt;\n\n return new AuditOnVo({\n createdAt: new Date(finalCreatedAt),\n updatedAt: new Date(finalUpdatedAt),\n });\n }\n\n update(): AuditOnVo {\n return new AuditOnVo({ createdAt: this.createdAt, updatedAt: new Date() });\n }\n}\n","import { CodedError } from '../../../global/exceptions/coded-error.error';\nimport { ErrorCodes, type DomainErrorCode } from '../../../global/exceptions/error-codes.const';\n\n/**\n * Base error class for domain layer failures.\n *\n * Domain errors represent violations of business rules, invariants,\n * or aggregate consistency. They originate from the core domain logic\n * and should be caught and handled by the application layer.\n *\n * **When to throw:**\n * - Business rule violations (e.g., \"Cannot withdraw more than balance\")\n * - Invariant violations (e.g., \"Email format invalid\")\n * - Aggregate consistency failures\n *\n * **Child classes:**\n * - {@link InvariantViolationError} - Value object or entity invariant failures\n * - {@link PartialLoadError} - Incomplete aggregate reconstitution\n *\n * @example\n * ```typescript\n * if (account.balance < amount) {\n * throw new DomainError({\n * message: 'Insufficient funds for withdrawal',\n * code: 'INSUFFICIENT_FUNDS',\n * });\n * }\n * ```\n */\nexport class DomainError extends CodedError {\n /**\n * Creates a new DomainError instance.\n *\n * @param options - Error configuration\n * @param options.message - Human-readable error description\n * @param options.code - Machine-readable error code (default: 'DOMAIN_ERROR')\n * @param options.cause - Optional underlying error\n */\n constructor({\n message,\n code = ErrorCodes.Domain.DOMAIN_ERROR,\n cause,\n }: {\n message: string;\n code?: DomainErrorCode | string;\n cause?: unknown;\n }) {\n super({ message, code, cause });\n }\n\n /**\n * Creates a DomainError from a caught error.\n *\n * @param cause - The original caught error\n * @returns A new DomainError instance with the cause attached\n */\n static override fromError(cause: unknown): DomainError {\n return new DomainError({\n message: cause instanceof Error ? cause.message : 'Domain error',\n cause,\n });\n }\n}\n","import { ErrorCodes, type DomainErrorCode } from '../../../global/exceptions/error-codes.const';\nimport { DomainError } from './domain.error';\n\n/**\n * Error thrown when a domain invariant is violated.\n *\n * Invariants are business rules that must always be true. This error\n * indicates a programming error or corrupted state—if inputs are\n * properly validated, this should never occur in production.\n *\n * **When to throw:**\n * - Business rule violations (e.g., `updatedAt < createdAt`)\n * - Assert-style guards in domain logic\n * - Invalid state transitions\n *\n * @example\n * ```typescript\n * if (order.status === 'shipped' && order.items.length === 0) {\n * throw new InvariantViolationError({\n * message: 'Shipped order must have at least one item',\n * code: 'EMPTY_SHIPPED_ORDER',\n * });\n * }\n * ```\n *\n * @extends DomainError\n */\nexport class InvariantViolationError extends DomainError {\n /**\n * Creates a new InvariantViolationError instance.\n *\n * @param options - Error configuration\n * @param options.message - Description of the violated invariant\n * @param options.code - Machine-readable error code (default: 'INVARIANT_VIOLATION')\n * @param options.cause - Optional underlying error\n */\n constructor({\n message,\n code = ErrorCodes.Domain.INVARIANT_VIOLATION,\n cause,\n }: {\n message: string;\n code?: DomainErrorCode | string;\n cause?: unknown;\n }) {\n super({ message, code, cause });\n }\n\n /**\n * Creates an InvariantViolationError from a caught error.\n *\n * @param cause - The original caught error\n * @returns A new InvariantViolationError instance with the cause attached\n */\n static override fromError(cause: unknown): InvariantViolationError {\n return new InvariantViolationError({\n message: cause instanceof Error ? cause.message : 'Invariant violation',\n cause,\n });\n }\n}\n","/**\n * Base audit timestamp value object.\n *\n * Tracks when an entity was created and last updated. Enforces the\n * domain invariant that `updatedAt` cannot be earlier than `createdAt`.\n *\n * **Domain Invariant:**\n * The constructor throws {@link InvariantViolationError} if\n * `updatedAt < createdAt`, ensuring timestamps are always valid.\n *\n * **Immutability:**\n * Date getters return cloned Date objects to prevent external mutation.\n *\n * @example Extending for a validator-specific implementation\n * ```typescript\n * class AuditOnVo extends BaseAuditOnVo {\n * static create(opts?: { createdAt?: Date; updatedAt?: Date }): AuditOnVo {\n * const now = new Date();\n * return new AuditOnVo({\n * createdAt: opts?.createdAt ?? now,\n * updatedAt: opts?.updatedAt ?? now,\n * }, SKIP_VALUE_OBJECT_VALIDATION);\n * }\n *\n * update(): AuditOnVo {\n * return new AuditOnVo({\n * createdAt: this.createdAt,\n * updatedAt: new Date(),\n * }, SKIP_VALUE_OBJECT_VALIDATION);\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SkipValueObjectValidation } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\nimport { InvariantViolationError } from '../exceptions/invariant-violation.error';\n\n/**\n * Abstract base class for audit timestamp value objects.\n *\n * @extends BaseValueObject\n * @throws {InvariantViolationError} When `updatedAt` is earlier than `createdAt`\n */\nexport abstract class BaseAuditOnVo extends BaseValueObject<{\n createdAt: Date;\n updatedAt: Date;\n}> {\n /**\n * Creates a new BaseAuditOnVo instance.\n *\n * @param value - The timestamp values\n * @param value.createdAt - When the entity was created\n * @param value.updatedAt - When the entity was last updated\n * @param validator - Bound validator or skip validation symbol\n * @throws {InvariantViolationError} When `updatedAt < createdAt`\n */\n protected constructor(\n value: { createdAt: Date; updatedAt: Date },\n validator: BoundValidator<{ createdAt: Date; updatedAt: Date }> | SkipValueObjectValidation,\n ) {\n // Domain enforces its own invariant\n if (value.updatedAt < value.createdAt) {\n throw new InvariantViolationError({\n message: 'UpdatedAt cannot be earlier than createdAt',\n code: 'INVALID_AUDIT_TIMESTAMPS',\n });\n }\n super(value, validator);\n }\n\n /**\n * Creates a new audit timestamp with current time as updatedAt.\n *\n * @returns A new immutable audit timestamp instance\n */\n abstract update(): BaseAuditOnVo;\n\n /**\n * When the entity was created.\n * Returns a cloned Date to prevent mutation.\n */\n get createdAt(): Date {\n return new Date(this.value.createdAt);\n }\n\n /**\n * When the entity was last updated.\n * Returns a cloned Date to prevent mutation.\n */\n get updatedAt(): Date {\n return new Date(this.value.updatedAt);\n }\n}\n","import { pipe, string, email } from 'valibot';\nimport { BaseEmailVo } from '../../../../onion-layers/domain/value-objects/base-email.vo';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst schema = pipe(string(), email());\n\nexport class EmailVo extends BaseEmailVo {\n private constructor(value: string) {\n super(value, createValibotValidator(schema));\n }\n\n static create(value: string): EmailVo {\n return new EmailVo(value);\n }\n}\n","/**\n * Base email value object.\n *\n * Represents a validated email address. Extend this class and provide\n * a validator that enforces email format rules.\n *\n * @example Extending with Zod validation\n * ```typescript\n * import { z } from 'zod';\n * import { createZodValidator } from '@cosmneo/onion-lasagna/backend/core/validators/zod';\n *\n * const emailSchema = z.string().email();\n * const emailValidator = createZodValidator(emailSchema);\n *\n * class EmailVo extends BaseEmailVo {\n * static create(value: string): EmailVo {\n * return new EmailVo(value, emailValidator);\n * }\n * }\n * ```\n *\n * @example Usage\n * ```typescript\n * const email = EmailVo.create('user@example.com');\n * console.log(email.value); // \"user@example.com\"\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SKIP_VALUE_OBJECT_VALIDATION } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\n\n/**\n * Value object for email addresses.\n *\n * @extends BaseValueObject<string>\n */\nexport class BaseEmailVo extends BaseValueObject<string> {\n /**\n * Creates a new BaseEmailVo instance.\n *\n * @param value - The email address string\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: string,\n validator: BoundValidator<string> | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n super(value, validator);\n }\n}\n","import { pipe, string, minLength, maxLength } from 'valibot';\nimport { BaseLongTextVo } from '../../../../onion-layers/domain/value-objects/base-long-text.vo';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst schema = (maxLen: number) => pipe(string(), minLength(1), maxLength(maxLen));\n\nexport class LongTextVo extends BaseLongTextVo {\n private constructor(value: string, maxLen = 2000) {\n super(value, createValibotValidator(schema(maxLen)));\n }\n\n static create(value: string, maxLen = 2000): LongTextVo {\n return new LongTextVo(value, maxLen);\n }\n}\n","/**\n * Base long text value object.\n *\n * Represents long-form text fields like articles, content bodies, or notes.\n * Typically validated with a maximum length constraint (e.g., 5000+ chars).\n *\n * **Suggested Length:** 1-5000+ characters\n *\n * **Use Cases:**\n * - Article content\n * - Blog posts\n * - Detailed notes\n * - Rich text content\n *\n * @example Extending with length validation\n * ```typescript\n * import { z } from 'zod';\n * import { createZodValidator } from '@cosmneo/onion-lasagna/backend/core/validators/zod';\n *\n * const longTextSchema = z.string().min(1).max(10000);\n * const longTextValidator = createZodValidator(longTextSchema);\n *\n * class ArticleContentVo extends BaseLongTextVo {\n * static create(value: string): ArticleContentVo {\n * return new ArticleContentVo(value, longTextValidator);\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SKIP_VALUE_OBJECT_VALIDATION } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\n\n/**\n * Value object for long-form text strings.\n *\n * @extends BaseValueObject<string>\n */\nexport class BaseLongTextVo extends BaseValueObject<string> {\n /**\n * Creates a new BaseLongTextVo instance.\n *\n * @param value - The long text string\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: string,\n validator: BoundValidator<string> | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n super(value, validator);\n }\n}\n","import { pipe, string, minLength, maxLength } from 'valibot';\nimport { BaseMediumTextVo } from '../../../../onion-layers/domain/value-objects/base-medium-text.vo';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst schema = (maxLen: number) => pipe(string(), minLength(1), maxLength(maxLen));\n\nexport class MediumTextVo extends BaseMediumTextVo {\n private constructor(value: string, maxLen = 500) {\n super(value, createValibotValidator(schema(maxLen)));\n }\n\n static create(value: string, maxLen = 500): MediumTextVo {\n return new MediumTextVo(value, maxLen);\n }\n}\n","/**\n * Base medium text value object.\n *\n * Represents medium-length text fields like descriptions or summaries.\n * Typically validated with a maximum length constraint (e.g., 500 chars).\n *\n * **Suggested Length:** 1-500 characters\n *\n * **Use Cases:**\n * - Product descriptions\n * - User bios\n * - Short summaries\n * - Comments\n *\n * @example Extending with length validation\n * ```typescript\n * import { z } from 'zod';\n * import { createZodValidator } from '@cosmneo/onion-lasagna/backend/core/validators/zod';\n *\n * const mediumTextSchema = z.string().min(1).max(500);\n * const mediumTextValidator = createZodValidator(mediumTextSchema);\n *\n * class DescriptionVo extends BaseMediumTextVo {\n * static create(value: string): DescriptionVo {\n * return new DescriptionVo(value, mediumTextValidator);\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SKIP_VALUE_OBJECT_VALIDATION } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\n\n/**\n * Value object for medium-length text strings.\n *\n * @extends BaseValueObject<string>\n */\nexport class BaseMediumTextVo extends BaseValueObject<string> {\n /**\n * Creates a new BaseMediumTextVo instance.\n *\n * @param value - The medium text string\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: string,\n validator: BoundValidator<string> | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n super(value, validator);\n }\n}\n","import {\n object,\n pipe,\n union,\n string,\n number,\n integer,\n minValue,\n maxValue,\n transform,\n} from 'valibot';\nimport { BasePaginationVo } from '../../../../onion-layers/domain/value-objects/base-pagination.vo';\nimport { SKIP_VALUE_OBJECT_VALIDATION } from '../../../../onion-layers/domain/classes/base-value-object.class';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst coerceInt = pipe(\n union([string(), number()]),\n transform((v) => (typeof v === 'string' ? parseInt(v, 10) : v)),\n);\n\nconst schema = (maxPageSize: number) =>\n object({\n page: pipe(coerceInt, integer(), minValue(1)),\n pageSize: pipe(coerceInt, integer(), minValue(1), maxValue(maxPageSize)),\n });\n\nexport class PaginationVo extends BasePaginationVo {\n private constructor(value: { page: number; pageSize: number }) {\n super(value, SKIP_VALUE_OBJECT_VALIDATION);\n }\n\n static create({\n page,\n pageSize,\n maxPageSize = 100,\n }: {\n page: number;\n pageSize: number;\n maxPageSize?: number;\n }): PaginationVo {\n const validated = createValibotValidator(schema(maxPageSize)).validate({\n page,\n pageSize,\n }) as { page: number; pageSize: number };\n return new PaginationVo(validated);\n }\n}\n","/**\n * Base pagination value object.\n *\n * Represents pagination parameters for list queries. Validates that\n * page numbers and page sizes are positive integers within bounds.\n *\n * **Properties:**\n * - `page`: The current page number (typically 1-indexed)\n * - `pageSize`: Number of items per page\n *\n * @example Extending with validation\n * ```typescript\n * import { z } from 'zod';\n * import { createZodValidator } from '@cosmneo/onion-lasagna/backend/core/validators/zod';\n *\n * const paginationSchema = z.object({\n * page: z.number().int().min(1),\n * pageSize: z.number().int().min(1).max(100),\n * });\n * const paginationValidator = createZodValidator(paginationSchema);\n *\n * class PaginationVo extends BasePaginationVo {\n * static create(page: number, pageSize: number): PaginationVo {\n * return new PaginationVo({ page, pageSize }, paginationValidator);\n * }\n * }\n * ```\n *\n * @example Usage in a use case\n * ```typescript\n * class ListUsersUseCase {\n * async execute(pagination: PaginationVo): Promise<User[]> {\n * const offset = (pagination.page - 1) * pagination.pageSize;\n * return this.userRepo.findAll({\n * offset,\n * limit: pagination.pageSize,\n * });\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SKIP_VALUE_OBJECT_VALIDATION } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\n\n/**\n * Value object for pagination parameters.\n *\n * @extends BaseValueObject<{ page: number; pageSize: number }>\n */\nexport class BasePaginationVo extends BaseValueObject<{ page: number; pageSize: number }> {\n /**\n * Creates a new BasePaginationVo instance.\n *\n * @param value - The pagination parameters\n * @param value.page - The page number (typically 1-indexed)\n * @param value.pageSize - The number of items per page\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: { page: number; pageSize: number },\n validator:\n | BoundValidator<{ page: number; pageSize: number }>\n | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n super(value, validator);\n }\n\n /**\n * The current page number.\n */\n get page(): number {\n return this.value.page;\n }\n\n /**\n * The number of items per page.\n */\n get pageSize(): number {\n return this.value.pageSize;\n }\n}\n","import { pipe, string, minLength, maxLength } from 'valibot';\nimport { BaseShortTextVo } from '../../../../onion-layers/domain/value-objects/base-short-text.vo';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst schema = (maxLen: number) => pipe(string(), minLength(1), maxLength(maxLen));\n\nexport class ShortTextVo extends BaseShortTextVo {\n private constructor(value: string, maxLen = 100) {\n super(value, createValibotValidator(schema(maxLen)));\n }\n\n static create(value: string, maxLen = 100): ShortTextVo {\n return new ShortTextVo(value, maxLen);\n }\n}\n","/**\n * Base short text value object.\n *\n * Represents short text fields like names, titles, or labels.\n * Typically validated with a maximum length constraint (e.g., 100 chars).\n *\n * **Suggested Length:** 1-100 characters\n *\n * **Use Cases:**\n * - User names\n * - Product titles\n * - Category names\n * - Short labels\n *\n * @example Extending with length validation\n * ```typescript\n * import { z } from 'zod';\n * import { createZodValidator } from '@cosmneo/onion-lasagna/backend/core/validators/zod';\n *\n * const shortTextSchema = z.string().min(1).max(100);\n * const shortTextValidator = createZodValidator(shortTextSchema);\n *\n * class UserNameVo extends BaseShortTextVo {\n * static create(value: string): UserNameVo {\n * return new UserNameVo(value, shortTextValidator);\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport type { SKIP_VALUE_OBJECT_VALIDATION } from '../classes/base-value-object.class';\nimport { BaseValueObject } from '../classes/base-value-object.class';\n\n/**\n * Value object for short text strings.\n *\n * @extends BaseValueObject<string>\n */\nexport class BaseShortTextVo extends BaseValueObject<string> {\n /**\n * Creates a new BaseShortTextVo instance.\n *\n * @param value - The short text string\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: string,\n validator: BoundValidator<string> | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n super(value, validator);\n }\n}\n","import { pipe, string, uuid } from 'valibot';\nimport { BaseUuidV7Vo } from '../../../../onion-layers/domain/value-objects/base-uuid-v7.vo';\nimport { createValibotValidator } from '../../bootstrap';\n\nconst schema = pipe(string(), uuid());\n\nexport class UuidV7Vo extends BaseUuidV7Vo {\n private constructor(value: string) {\n super(value, createValibotValidator(schema));\n }\n\n static override create(value: string): UuidV7Vo {\n return new UuidV7Vo(value);\n }\n}\n","/**\n * Base UUID v7 value object for time-sortable entity identifiers.\n *\n * UUID v7 is a time-ordered UUID that combines a Unix timestamp with\n * random bits, making it ideal for database primary keys because:\n *\n * **Benefits:**\n * - **Time-sortable**: IDs created later sort after earlier ones\n * - **Database-friendly**: Sequential nature reduces B-tree fragmentation\n * - **Globally unique**: Same uniqueness guarantees as other UUID versions\n * - **Timestamp extractable**: Creation time can be derived from the ID\n *\n * @example Generating a new ID\n * ```typescript\n * const id = BaseUuidV7Vo.generate();\n * console.log(id.value); // e.g., \"018f3b1c-5e7d-7000-8000-000000000001\"\n * ```\n *\n * @example Extending for validation\n * ```typescript\n * class EntityIdVo extends BaseUuidV7Vo {\n * static create(value: string): EntityIdVo {\n * return new EntityIdVo(value, uuidValidator);\n * }\n *\n * static generate(): EntityIdVo {\n * return new EntityIdVo(v7(), SKIP_VALUE_OBJECT_VALIDATION);\n * }\n * }\n * ```\n *\n * @example Using as entity primary key\n * ```typescript\n * class User {\n * constructor(\n * public readonly id: EntityIdVo,\n * public readonly name: string,\n * ) {}\n *\n * static create(name: string): User {\n * return new User(EntityIdVo.generate(), name);\n * }\n * }\n * ```\n */\nimport type { BoundValidator } from '../../../global/interfaces/ports/object-validator.port';\nimport { BaseValueObject, SKIP_VALUE_OBJECT_VALIDATION } from '../classes/base-value-object.class';\nimport { v7 } from 'uuid';\n\n/**\n * Value object for UUID v7 identifiers.\n *\n * Provides a `generate()` factory method that creates new time-ordered UUIDs.\n *\n * @extends BaseValueObject<string>\n */\nexport class BaseUuidV7Vo extends BaseValueObject<string> {\n /**\n * Creates a new BaseUuidV7Vo instance.\n *\n * @param value - The UUID v7 string value\n * @param validator - Bound validator or skip validation symbol\n */\n protected constructor(\n value: string,\n validator: BoundValidator<string> | typeof SKIP_VALUE_OBJECT_VALIDATION,\n ) {\n super(value, validator);\n }\n\n /**\n * Generates a new UUID v7 value object.\n *\n * Creates a time-ordered UUID using the current timestamp,\n * skipping validation since the `uuid` library guarantees format.\n *\n * @returns A new BaseUuidV7Vo with a freshly generated UUID\n */\n static generate(): BaseUuidV7Vo {\n return new this(v7(), SKIP_VALUE_OBJECT_VALIDATION);\n }\n\n /**\n * Creates a UUID v7 value object from an existing string.\n *\n * **Important:** This base implementation skips validation and accepts\n * any string value. Subclasses should override this method with a\n * validator to ensure UUID format correctness.\n *\n * @param value - The UUID v7 string value (not validated at base level)\n * @returns A new BaseUuidV7Vo with the provided value\n *\n * @example Subclass with validation (recommended)\n * ```typescript\n * class OrderId extends BaseUuidV7Vo {\n * static override create(value: string): OrderId {\n * return new OrderId(value, uuidV7Validator);\n * }\n * }\n * ```\n *\n * @see generate - For creating new UUIDs (always valid)\n */\n static create(value: string): BaseUuidV7Vo {\n return new this(value, SKIP_VALUE_OBJECT_VALIDATION);\n }\n}\n"],"mappings":"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","names":["schema","schema","schema","import_valibot","import_valibot","schema","import_valibot","import_valibot","schema","schema","import_valibot","schema","import_valibot","schema","import_valibot","schema","import_valibot","schema","import_valibot","schema","import_valibot","import_uuid","schema"]}
@@ -0,0 +1,160 @@
1
+ import { BaseSchema, BaseIssue } from 'valibot';
2
+ import { O as ObjectValidatorPort, a as BoundValidator, B as BaseDto } from '../../../base-dto.class-D7W9iqoU.cjs';
3
+ import { B as BaseAuditByVo, a as BaseUuidV4Vo, b as BaseAuditInfoVo, c as BaseAuditOnVo, d as BaseEmailVo, e as BaseLongTextVo, f as BaseMediumTextVo, g as BasePaginationVo, h as BaseShortTextVo, i as BaseUuidV7Vo } from '../../../base-uuid-v7.vo-BjqKX44G.cjs';
4
+
5
+ /**
6
+ * Valibot adapter implementing the ObjectValidatorPort interface.
7
+ *
8
+ * @implements {ObjectValidatorPort<BaseSchema>}
9
+ */
10
+ declare class ValibotObjectValidator implements ObjectValidatorPort<BaseSchema<unknown, unknown, BaseIssue<unknown>>> {
11
+ /**
12
+ * Validates a value against a Valibot schema.
13
+ *
14
+ * @typeParam T - The validated output type
15
+ * @param schema - Valibot BaseSchema to validate against
16
+ * @param value - Unknown value to validate
17
+ * @returns The validated and typed value
18
+ * @throws {ObjectValidationError} When validation fails
19
+ */
20
+ validateObject<T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>, value: unknown): T;
21
+ validateObject(schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>, value: unknown): unknown;
22
+ /**
23
+ * Creates a bound validator from a Valibot schema.
24
+ *
25
+ * @typeParam T - The validated output type
26
+ * @param schema - Valibot BaseSchema to bind
27
+ * @returns A BoundValidator ready for use with BaseDto or BaseValueObject
28
+ */
29
+ withSchema<T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>): BoundValidator<T>;
30
+ withSchema(schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>): BoundValidator<unknown>;
31
+ }
32
+
33
+ /**
34
+ * Valibot validator bootstrap module.
35
+ *
36
+ * Entry point for creating Valibot-based validators compatible with
37
+ * {@link BaseDto} and {@link BaseValueObject}. Provides both a
38
+ * singleton instance and a factory function for convenience.
39
+ *
40
+ * @see {@link ValibotObjectValidator} for path normalization details.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * import { createValibotValidator } from '@cosmneo/onion-lasagna/backend/core/validators/valibot';
45
+ * import * as v from 'valibot';
46
+ *
47
+ * const userSchema = v.object({
48
+ * name: v.pipe(v.string(), v.minLength(1)),
49
+ * email: v.pipe(v.string(), v.email()),
50
+ * });
51
+ *
52
+ * const validator = createValibotValidator(userSchema);
53
+ *
54
+ * // Use with BaseDto
55
+ * class CreateUserDto extends BaseDto<{ name: string; email: string }> {
56
+ * static create(data: unknown) {
57
+ * return new CreateUserDto(data, validator);
58
+ * }
59
+ * }
60
+ * ```
61
+ *
62
+ * @module
63
+ */
64
+
65
+ /**
66
+ * Singleton Valibot validator instance.
67
+ *
68
+ * Use this directly when you need access to the underlying
69
+ * {@link ObjectValidatorPort} implementation.
70
+ */
71
+ declare const valibotObjectValidator: ValibotObjectValidator;
72
+ /**
73
+ * Creates a bound validator from a Valibot schema.
74
+ *
75
+ * @typeParam T - The validated output type inferred from the schema
76
+ * @param schema - A Valibot BaseSchema defining the validation rules
77
+ * @returns A {@link BoundValidator} ready for use with BaseDto or BaseValueObject
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const emailValidator = createValibotValidator(v.pipe(v.string(), v.email()));
82
+ * const validated = emailValidator.validate('user@example.com'); // Returns string
83
+ * ```
84
+ */
85
+ declare const createValibotValidator: <T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>) => BoundValidator<T>;
86
+
87
+ declare class Dto<T> extends BaseDto<T> {
88
+ constructor(schema: BaseSchema<unknown, T, BaseIssue<unknown>>, value: T);
89
+ }
90
+
91
+ declare class AuditByVo extends BaseAuditByVo {
92
+ private constructor();
93
+ static create({ createdBy, updatedBy }: {
94
+ createdBy?: string;
95
+ updatedBy?: string;
96
+ }): AuditByVo;
97
+ update(updatedBy: BaseUuidV4Vo): AuditByVo;
98
+ }
99
+
100
+ declare class AuditInfoVo extends BaseAuditInfoVo {
101
+ private constructor();
102
+ static create({ createdBy, createdAt, updatedBy, updatedAt, }: {
103
+ createdBy?: string;
104
+ createdAt?: Date;
105
+ updatedBy?: string;
106
+ updatedAt?: Date;
107
+ }): AuditInfoVo;
108
+ static createNew(createdBy?: string): AuditInfoVo;
109
+ update(updatedBy: BaseUuidV4Vo): AuditInfoVo;
110
+ }
111
+
112
+ declare class AuditOnVo extends BaseAuditOnVo {
113
+ private constructor();
114
+ static create({ createdAt, updatedAt }: {
115
+ createdAt?: Date;
116
+ updatedAt?: Date;
117
+ }): AuditOnVo;
118
+ update(): AuditOnVo;
119
+ }
120
+
121
+ declare class EmailVo extends BaseEmailVo {
122
+ private constructor();
123
+ static create(value: string): EmailVo;
124
+ }
125
+
126
+ declare class LongTextVo extends BaseLongTextVo {
127
+ private constructor();
128
+ static create(value: string, maxLen?: number): LongTextVo;
129
+ }
130
+
131
+ declare class MediumTextVo extends BaseMediumTextVo {
132
+ private constructor();
133
+ static create(value: string, maxLen?: number): MediumTextVo;
134
+ }
135
+
136
+ declare class PaginationVo extends BasePaginationVo {
137
+ private constructor();
138
+ static create({ page, pageSize, maxPageSize, }: {
139
+ page: number;
140
+ pageSize: number;
141
+ maxPageSize?: number;
142
+ }): PaginationVo;
143
+ }
144
+
145
+ declare class ShortTextVo extends BaseShortTextVo {
146
+ private constructor();
147
+ static create(value: string, maxLen?: number): ShortTextVo;
148
+ }
149
+
150
+ declare class UuidV4Vo extends BaseUuidV4Vo {
151
+ private constructor();
152
+ static create(value: string): UuidV4Vo;
153
+ }
154
+
155
+ declare class UuidV7Vo extends BaseUuidV7Vo {
156
+ private constructor();
157
+ static create(value: string): UuidV7Vo;
158
+ }
159
+
160
+ export { AuditByVo, AuditInfoVo, AuditOnVo, Dto, EmailVo, LongTextVo, MediumTextVo, PaginationVo, ShortTextVo, UuidV4Vo, UuidV7Vo, ValibotObjectValidator, createValibotValidator, valibotObjectValidator };
@@ -0,0 +1,160 @@
1
+ import { BaseSchema, BaseIssue } from 'valibot';
2
+ import { O as ObjectValidatorPort, a as BoundValidator, B as BaseDto } from '../../../base-dto.class-D7W9iqoU.js';
3
+ import { B as BaseAuditByVo, a as BaseUuidV4Vo, b as BaseAuditInfoVo, c as BaseAuditOnVo, d as BaseEmailVo, e as BaseLongTextVo, f as BaseMediumTextVo, g as BasePaginationVo, h as BaseShortTextVo, i as BaseUuidV7Vo } from '../../../base-uuid-v7.vo-BPGEIWLM.js';
4
+
5
+ /**
6
+ * Valibot adapter implementing the ObjectValidatorPort interface.
7
+ *
8
+ * @implements {ObjectValidatorPort<BaseSchema>}
9
+ */
10
+ declare class ValibotObjectValidator implements ObjectValidatorPort<BaseSchema<unknown, unknown, BaseIssue<unknown>>> {
11
+ /**
12
+ * Validates a value against a Valibot schema.
13
+ *
14
+ * @typeParam T - The validated output type
15
+ * @param schema - Valibot BaseSchema to validate against
16
+ * @param value - Unknown value to validate
17
+ * @returns The validated and typed value
18
+ * @throws {ObjectValidationError} When validation fails
19
+ */
20
+ validateObject<T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>, value: unknown): T;
21
+ validateObject(schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>, value: unknown): unknown;
22
+ /**
23
+ * Creates a bound validator from a Valibot schema.
24
+ *
25
+ * @typeParam T - The validated output type
26
+ * @param schema - Valibot BaseSchema to bind
27
+ * @returns A BoundValidator ready for use with BaseDto or BaseValueObject
28
+ */
29
+ withSchema<T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>): BoundValidator<T>;
30
+ withSchema(schema: BaseSchema<unknown, unknown, BaseIssue<unknown>>): BoundValidator<unknown>;
31
+ }
32
+
33
+ /**
34
+ * Valibot validator bootstrap module.
35
+ *
36
+ * Entry point for creating Valibot-based validators compatible with
37
+ * {@link BaseDto} and {@link BaseValueObject}. Provides both a
38
+ * singleton instance and a factory function for convenience.
39
+ *
40
+ * @see {@link ValibotObjectValidator} for path normalization details.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * import { createValibotValidator } from '@cosmneo/onion-lasagna/backend/core/validators/valibot';
45
+ * import * as v from 'valibot';
46
+ *
47
+ * const userSchema = v.object({
48
+ * name: v.pipe(v.string(), v.minLength(1)),
49
+ * email: v.pipe(v.string(), v.email()),
50
+ * });
51
+ *
52
+ * const validator = createValibotValidator(userSchema);
53
+ *
54
+ * // Use with BaseDto
55
+ * class CreateUserDto extends BaseDto<{ name: string; email: string }> {
56
+ * static create(data: unknown) {
57
+ * return new CreateUserDto(data, validator);
58
+ * }
59
+ * }
60
+ * ```
61
+ *
62
+ * @module
63
+ */
64
+
65
+ /**
66
+ * Singleton Valibot validator instance.
67
+ *
68
+ * Use this directly when you need access to the underlying
69
+ * {@link ObjectValidatorPort} implementation.
70
+ */
71
+ declare const valibotObjectValidator: ValibotObjectValidator;
72
+ /**
73
+ * Creates a bound validator from a Valibot schema.
74
+ *
75
+ * @typeParam T - The validated output type inferred from the schema
76
+ * @param schema - A Valibot BaseSchema defining the validation rules
77
+ * @returns A {@link BoundValidator} ready for use with BaseDto or BaseValueObject
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const emailValidator = createValibotValidator(v.pipe(v.string(), v.email()));
82
+ * const validated = emailValidator.validate('user@example.com'); // Returns string
83
+ * ```
84
+ */
85
+ declare const createValibotValidator: <T>(schema: BaseSchema<unknown, T, BaseIssue<unknown>>) => BoundValidator<T>;
86
+
87
+ declare class Dto<T> extends BaseDto<T> {
88
+ constructor(schema: BaseSchema<unknown, T, BaseIssue<unknown>>, value: T);
89
+ }
90
+
91
+ declare class AuditByVo extends BaseAuditByVo {
92
+ private constructor();
93
+ static create({ createdBy, updatedBy }: {
94
+ createdBy?: string;
95
+ updatedBy?: string;
96
+ }): AuditByVo;
97
+ update(updatedBy: BaseUuidV4Vo): AuditByVo;
98
+ }
99
+
100
+ declare class AuditInfoVo extends BaseAuditInfoVo {
101
+ private constructor();
102
+ static create({ createdBy, createdAt, updatedBy, updatedAt, }: {
103
+ createdBy?: string;
104
+ createdAt?: Date;
105
+ updatedBy?: string;
106
+ updatedAt?: Date;
107
+ }): AuditInfoVo;
108
+ static createNew(createdBy?: string): AuditInfoVo;
109
+ update(updatedBy: BaseUuidV4Vo): AuditInfoVo;
110
+ }
111
+
112
+ declare class AuditOnVo extends BaseAuditOnVo {
113
+ private constructor();
114
+ static create({ createdAt, updatedAt }: {
115
+ createdAt?: Date;
116
+ updatedAt?: Date;
117
+ }): AuditOnVo;
118
+ update(): AuditOnVo;
119
+ }
120
+
121
+ declare class EmailVo extends BaseEmailVo {
122
+ private constructor();
123
+ static create(value: string): EmailVo;
124
+ }
125
+
126
+ declare class LongTextVo extends BaseLongTextVo {
127
+ private constructor();
128
+ static create(value: string, maxLen?: number): LongTextVo;
129
+ }
130
+
131
+ declare class MediumTextVo extends BaseMediumTextVo {
132
+ private constructor();
133
+ static create(value: string, maxLen?: number): MediumTextVo;
134
+ }
135
+
136
+ declare class PaginationVo extends BasePaginationVo {
137
+ private constructor();
138
+ static create({ page, pageSize, maxPageSize, }: {
139
+ page: number;
140
+ pageSize: number;
141
+ maxPageSize?: number;
142
+ }): PaginationVo;
143
+ }
144
+
145
+ declare class ShortTextVo extends BaseShortTextVo {
146
+ private constructor();
147
+ static create(value: string, maxLen?: number): ShortTextVo;
148
+ }
149
+
150
+ declare class UuidV4Vo extends BaseUuidV4Vo {
151
+ private constructor();
152
+ static create(value: string): UuidV4Vo;
153
+ }
154
+
155
+ declare class UuidV7Vo extends BaseUuidV7Vo {
156
+ private constructor();
157
+ static create(value: string): UuidV7Vo;
158
+ }
159
+
160
+ export { AuditByVo, AuditInfoVo, AuditOnVo, Dto, EmailVo, LongTextVo, MediumTextVo, PaginationVo, ShortTextVo, UuidV4Vo, UuidV7Vo, ValibotObjectValidator, createValibotValidator, valibotObjectValidator };