Mapa de uso
Qué peso tiene este paquete dentro del runtime
Flujo del paquete
Cómo atraviesa este paquete las fases del runtime de xtaskjs
Antes del arranque
Importa reflect-metadata antes de definir value objects que dependan de integraciones DTO o DI basadas en decoradores.
Durante CreateApplication()
El paquete en sí no registra un gestor de ciclo de vida, pero ValueObjectFactoryFor() puede registrar fábricas preparadas para DI a través de @xtaskjs/core durante la carga del módulo.
Durante app.close()
Los value objects son envoltorios puros sin recursos propios, así que el apagado normalmente consiste en dejar que las fábricas gestionadas por el contenedor desaparezcan junto con el resto de la aplicación.
Superficie API
Exports representativos del paquete original
Tipos y contratos
- JsonValue
- ValueObjectLike
- ValueObjectStaticFactory
- ValueObjectFactory
- TransformValueObjectOptions
- ValueObjectFactoryProviderOptions
Utilidades de conversión
- isValueObject
- unwrapValue
- parseJsonValue
- looksLikeJsonString
- toPlainValue
- toSerializableValue
- toJsonString
Value objects base
- ValueObject
- StringValueObject
- NumberValueObject
- BooleanValueObject
- BigIntValueObject
- DateValueObject
- JsonValueObject
Utilidades de fábrica
- createValueObjectFactory
- InjectableValueObjectFactory
- ValueObjectFactoryFor
- fromPlainValue
- fromJsonValue
- fromAutoValue
Decoradores DTO
Uso
Flujo típico de adopción
1. Define clases de value objects
Extiende StringValueObject, NumberValueObject, DateValueObject o JsonValueObject y normaliza las invariantes dentro del constructor.
2. Transforma la entrada DTO
Usa TransformValueObject() en campos DTO cuando los payloads de petición deban convertirse en envoltorios cómodos para el dominio durante la conversión con class-transformer.
3. Añade fábricas cuando haga falta
Crea fábricas ad hoc con createValueObjectFactory() o registra implementaciones de InjectableValueObjectFactory cuando los servicios deban resolverlas desde el contenedor.
Ejemplo
Fragmento de referencia
import { plainToInstance } from "class-transformer";
import {
InjectableValueObjectFactory,
StringValueObject,
TransformValueObject,
ValueObjectFactoryFor,
} from "@xtaskjs/value-objects";
class EmailAddress extends StringValueObject {
constructor(value: string) {
const normalized = value.trim().toLowerCase();
if (!normalized.includes("@")) {
throw new Error("Invalid email address");
}
super(normalized);
}
}
class CreateUserDto {
@TransformValueObject(EmailAddress)
email!: EmailAddress;
}
@ValueObjectFactoryFor(EmailAddress)
class EmailAddressFactory extends InjectableValueObjectFactory<EmailAddress> {}
const dto = plainToInstance(CreateUserDto, { email: "USER@Example.com" });
Ejemplos
Ejemplos oficiales para revisar después
Ejemplos de referencia: Package README examples and package tests currently provide the primary reference.
Relacionados
Paquetes que suelen usarse junto a este