xTaskjs 1.0 ya está disponible: cuentas por rol, documentación y una interfaz personalizable.

Decoradores

Referencia de todos los decoradores públicos de xtaskjs para routing, ciclo de vida, DI, security, persistencia, cache, scheduling y queues.

Esta página enumera la superficie de decoradores del framework expuesta por los paquetes upstream, agrupada por caso de uso y etiquetada con el paquete del que procede cada decorador, además de pequeños ejemplos que puedes adaptar directamente.

116 decoradores en 16 grupos

Agrupados por tipo

Los decoradores de routing, ciclo de vida, DI, security, TypeORM, mailer, cache, scheduler y queues se separan para mantener juntas las APIs similares.

Con conocimiento del paquete

Cada entrada muestra el paquete y la ruta original donde vive el decorador.

Guiado por ejemplos

Cada decorador incluye un pequeño fragmento tomado de los mismos patrones usados en los ejemplos de xtaskjs y en este sitio.

Catálogo

Grupos de decoradores por caso de uso

Grupo de decoradores

Routing HTTP y canalizaciones

Decoradores de declaración de rutas y canalización de peticiones exportados por @xtaskjs/common. Son los bloques básicos HTTP usados por los controladores en todos los ejemplos.

13 decoradores

Grupo de decoradores

Runners y eventos del ciclo de vida

Decoradores de ciclo de vida de @xtaskjs/common usados para ejecutar lógica de arranque, tareas CLI y handlers de eventos dentro del ciclo de vida de la aplicación.

3 decoradores

Grupo de decoradores

DI y componentes de core

Decoradores de inyección de dependencias y componentes de @xtaskjs/core. Marcan providers para el descubrimiento del contenedor y seleccionan bindings con nombre para la inyección.

8 decoradores

Grupo de decoradores

Security y autorización

Decoradores de autenticación, autorización, estrategias e inyección exportados por @xtaskjs/security. Se apoyan en la metadata de rutas de @xtaskjs/common.

10 decoradores

Grupo de decoradores

Persistencia y repositorios

Decoradores de registro e inyección de TypeORM exportados por @xtaskjs/typeorm. Vinculan datasources y repositorios dentro del mismo contenedor DI.

5 decoradores

Grupo de decoradores

CQRS Buses, Handlers, And Projections

CQRS configuration, handler, projection, idempotency, and injector decorators exported by @xtaskjs/cqrs. These connect command, query, and event flows to the xtaskjs container and read or write datasource aliases.

16 decoradores

Grupo de decoradores

Event Sourcing And Stored Events

Configuration, aggregate, subscriber, and injector decorators exported by @xtaskjs/event-source. These wire aggregate metadata, event appliers, repositories, and stored-event subscribers into the xtaskjs lifecycle.

9 decoradores

Grupo de decoradores

Plantillas y entrega de mailer

Decoradores de mailer exportados por @xtaskjs/mailer. Registran transports y plantillas e inyectan servicios de entrega en clases gestionadas por DI.

5 decoradores

Grupo de decoradores

Internationalization y resolución de locale

Decoradores de configuración e inyección exportados por @xtaskjs/internationalization. Registran el comportamiento de locale y exponen servicios de traducción dentro de clases gestionadas por DI.

7 decoradores

Grupo de decoradores

Value objects y transformación de DTO

Decoradores orientados a DTO de @xtaskjs/value-objects que convierten campos crudos de la petición en envoltorios de dominio normalizados antes de que los consuman controladores y servicios.

1 decoradores

Grupo de decoradores

Cache Models And Runtime Control

Configuration, model, injector, and method decorators from @xtaskjs/cache used to register cache models, inject repositories or services, and control read/write cache behavior in DI-managed services.

9 decoradores

Grupo de decoradores

HTTP And Browser Cache Policies

HTTP response decorators from @xtaskjs/cache used to apply Cache-Control directives, validators, and Vary behavior to routes, plus injector access to HttpCacheService.

7 decoradores

Grupo de decoradores

Trabajos scheduler y ciclo de vida

Decoradores de scheduling de @xtaskjs/scheduler usados para declarar trabajos cron, interval y timeout e inyectar servicios scheduler en tiempo de ejecución.

5 decoradores

Grupo de decoradores

Throttling And Rate Limits

Rate-limiting decorators from @xtaskjs/throttler used to protect routes and inject runtime throttling services.

3 decoradores

Grupo de decoradores

Gateways realtime de Socket.IO

Decoradores de gateway, eventos e inyección exportados por @xtaskjs/socket-io. Mantienen los handlers realtime dentro de servicios xtaskjs normales y conectan namespaces de Socket.IO al contenedor DI.

8 decoradores

Grupo de decoradores

Colas y mensajería

Decoradores de consumo, publicación e inyección de colas exportados por @xtaskjs/queues. Conectan transports de broker y colas en memoria con servicios gestionados por DI.

7 decoradores

Grupo de decoradores

Routing HTTP y canalizaciones

Decoradores de declaración de rutas y canalización de peticiones exportados por @xtaskjs/common. Son los bloques básicos HTTP usados por los controladores en todos los ejemplos.

@xtaskjs/common Decorador de clase clase

Controller

Define la ruta base de un controlador HTTP y puede adjuntar middlewares, guards y pipes compartidos.

Prefijo de ruta en un controlador
import { Controller, Get } from "@xtaskjs/common";

@Controller("/users")
export class UsersController {
  @Get("/")
  list() {
    return [];
  }
}
@xtaskjs/common Decorador de método método

Get

Registra un handler de ruta GET y opcionalmente añade middleware, guards o pipes específicos de la ruta.

Ruta GET
import { Controller, Get } from "@xtaskjs/common";

@Controller("/health")
export class HealthController {
  @Get("/")
  status() {
    return { ok: true };
  }
}
@xtaskjs/common Decorador de método método

Post

Registra un handler de ruta POST para comandos, envíos de formularios o creación de recursos.

Ruta POST
import { Controller, Post } from "@xtaskjs/common";

@Controller("/users")
export class UsersController {
  @Post("/")
  create(req: any) {
    return { email: req.body.email, created: true };
  }
}
@xtaskjs/common Decorador de método método

Patch

Registra un handler de ruta PATCH para actualizaciones parciales.

Ruta PATCH
import { Controller, Patch } from "@xtaskjs/common";

@Controller("/users")
export class UsersController {
  @Patch("/:id")
  update(req: any) {
    return { id: req.params.id, updated: true };
  }
}
@xtaskjs/common Decorador de método método

Delete

Registra un handler de ruta DELETE para eliminaciones y operaciones destructivas.

Ruta DELETE
import { Controller, Delete } from "@xtaskjs/common";

@Controller("/users")
export class UsersController {
  @Delete("/:id")
  remove(req: any) {
    return { id: req.params.id, removed: true };
  }
}
@xtaskjs/common Decorador de parámetro method parameter

Body

Binds request body data to a controller parameter and supports DTO transformation when validation pipes are enabled.

Read body payload
import { Body, Controller, Post } from "@xtaskjs/common";

class CreateUserDto {
  email!: string;
}

@Controller("/users")
export class UsersController {
  @Post("/")
  create(@Body() body: CreateUserDto) {
    return body;
  }
}
@xtaskjs/common Decorador de parámetro method parameter

Param

Extracts route parameters by name or as a full params object for typed handler input.

Read route params
import { Controller, Get, Param } from "@xtaskjs/common";

@Controller("/users")
export class UsersController {
  @Get("/:id")
  detail(@Param("id") id: string) {
    return { id };
  }
}
@xtaskjs/common Decorador de parámetro method parameter

Query

Maps query-string values to a method parameter, optionally by property name.

Read query-string filters
import { Controller, Get, Query } from "@xtaskjs/common";

@Controller("/users")
export class UsersController {
  @Get("/")
  list(@Query("role") role?: string) {
    return { role };
  }
}
@xtaskjs/common Decorador de parámetro method parameter

Req

Injects the adapter request object into a controller handler parameter.

Access request object
import { Controller, Get, Req } from "@xtaskjs/common";

@Controller("/auth")
export class AuthController {
  @Get("/me")
  me(@Req() req: any) {
    return { auth: req.auth };
  }
}
@xtaskjs/common Decorador de parámetro method parameter

Res

Injects the adapter response object into a controller handler parameter.

Access response object
import { Controller, Get, Res } from "@xtaskjs/common";

@Controller("/health")
export class HealthController {
  @Get("/")
  status(@Res() res: any) {
    return { statusCode: res.statusCode || 200 };
  }
}
@xtaskjs/common Decorador de clase y método clase o método

UseMiddlewares

Añade uno o más middlewares a un controlador o ruta para que la lógica transversal se ejecute antes del handler.

Middleware a nivel de clase
import { Controller, Get, UseMiddlewares } from "@xtaskjs/common";

const requestLogger = async (_context: any, next: () => Promise<void>) => {
  await next();
};

@Controller("/audit")
@UseMiddlewares(requestLogger)
export class AuditController {
  @Get("/")
  list() {
    return { ok: true };
  }
}
@xtaskjs/common Decorador de clase y método clase o método

UseGuards

Adjunta funciones guard a un controlador o ruta para permitir, denegar o enriquecer el contexto de la petición antes de la ejecución.

Guard a nivel de ruta
import { Controller, Get, UseGuards } from "@xtaskjs/common";

const adminGuard = (context: any) => context.request?.headers?.["x-role"] === "admin";

@Controller("/admin")
export class AdminController {
  @Get("/")
  @UseGuards(adminGuard)
  dashboard() {
    return { secure: true };
  }
}
@xtaskjs/common Decorador de clase y método clase o método

UsePipes

Aplica funciones de transformación o validación de argumentos antes de que un handler de ruta consuma la entrada.

Limpieza del payload mediante pipes
import { Controller, Post, UsePipes } from "@xtaskjs/common";

const trimEmailPipe = (value: any) => ({ ...value, email: String(value.email || "").trim() });

@Controller("/accounts")
export class AccountController {
  @Post("/")
  @UsePipes(trimEmailPipe)
  create(req: any) {
    return req.body;
  }
}

Grupo de decoradores

Runners y eventos del ciclo de vida

Decoradores de ciclo de vida de @xtaskjs/common usados para ejecutar lógica de arranque, tareas CLI y handlers de eventos dentro del ciclo de vida de la aplicación.

@xtaskjs/common Decorador de método método

OnEvent

Registra un handler de evento del ciclo de vida para una fase dada y una prioridad de ejecución.

Listener de fase del ciclo de vida
import { OnEvent } from "@xtaskjs/common";

export class AuditListener {
  @OnEvent("AFTER_CONTROLLER_HANDLER", 10)
  afterHandler() {
    console.log("controller completed");
  }
}
@xtaskjs/common Decorador de método método

ApplicationRunner

Ejecuta un método durante el arranque de la aplicación con un orden de prioridad opcional.

Siembra de arranque
import { ApplicationRunner } from "@xtaskjs/common";
import { Service } from "@xtaskjs/core";

@Service()
export class SeedRunner {
  @ApplicationRunner(100)
  async seed() {
    console.log("seeding application data");
  }
}
@xtaskjs/common Decorador de método método

CommandLineRunner

Marca un método como runner de línea de comandos para que pueda ejecutarse en flujos orientados a CLI.

Tarea CLI
import { CommandLineRunner } from "@xtaskjs/common";
import { Service } from "@xtaskjs/core";

@Service()
export class ReportsRunner {
  @CommandLineRunner(0)
  async generate() {
    console.log("generating reports");
  }
}

Grupo de decoradores

DI y componentes de core

Decoradores de inyección de dependencias y componentes de @xtaskjs/core. Marcan providers para el descubrimiento del contenedor y seleccionan bindings con nombre para la inyección.

@xtaskjs/core Decorador de clase clase

Component

Decorador de componente de bajo nivel que almacena metadata de DI como alcance, condición, nombre y selección primaria.

Metadata personalizada de componente
import { Component } from "@xtaskjs/core";

@Component({ scope: "singleton", name: "clock" })
export class ClockService {}
@xtaskjs/core Decorador de clase clase

Service

Estereotipo de conveniencia para registrar una clase como componente de servicio gestionado por DI.

Estereotipo de servicio
import { Service } from "@xtaskjs/core";

@Service()
export class BillingService {}
@xtaskjs/core Decorador de clase clase

Controller

Registra una clase como componente controlador en el contenedor DI. Es independiente del decorador de rutas HTTP exportado por @xtaskjs/common.

Estereotipo DI de controlador
import { Controller } from "@xtaskjs/core";

@Controller({ name: "admin-controller" })
export class AdminComponent {}
@xtaskjs/core Decorador de clase clase

Repository

Estereotipo de conveniencia para providers tipo repositorio gestionados por el contenedor DI.

Estereotipo de repositorio
import { Repository } from "@xtaskjs/core";

@Repository()
export class UserLookupRepository {}
@xtaskjs/core Decorador de propiedad propiedad

AutoWired / Autowired

Inyecta una dependencia en una propiedad. El paquete también exporta Autowired como alias de AutoWired.

Inyección de propiedades
import { AutoWired } from "@xtaskjs/core";
import { UserService } from "./user.service";

export class AccountController {
  @AutoWired({ qualifier: UserService.name })
  private readonly users!: UserService;
}
@xtaskjs/core Decorador de parámetro parámetro del constructor

Qualifier

Selecciona un binding con nombre para la inyección en parámetros del constructor cuando varias implementaciones comparten el mismo tipo.

Inyección nombrada en constructor
import { Qualifier, Service } from "@xtaskjs/core";

@Service()
export class NotificationService {
  constructor(@Qualifier("mailer:notifications") private readonly transport: any) {}
}
@xtaskjs/core Decorador de método método

PostConstruct

Marks a method to run after dependency injection completes for the instance.

Run setup after injection
import { PostConstruct, Service } from "@xtaskjs/core";

@Service()
export class BootstrapService {
  @PostConstruct()
  init() {
    console.log("initialized");
  }
}
@xtaskjs/core Decorador de método método

PreDestroy

Marks a method to run when the container destroys managed instances during shutdown.

Release resources on shutdown
import { PreDestroy, Service } from "@xtaskjs/core";

@Service()
export class WorkerService {
  @PreDestroy()
  stop() {
    console.log("stopping");
  }
}

Grupo de decoradores

Security y autorización

Decoradores de autenticación, autorización, estrategias e inyección exportados por @xtaskjs/security. Se apoyan en la metadata de rutas de @xtaskjs/common.

@xtaskjs/security Decorador de clase y método clase o método

Authenticated

Requiere un resultado de autenticación satisfactorio antes de que se ejecute un controlador o una ruta. Puede apuntar a una estrategia concreta o a una lista de estrategias.

Proteger un controlador
import { Controller, Get } from "@xtaskjs/common";
import { Authenticated } from "@xtaskjs/security";

@Controller("/me")
@Authenticated()
export class ProfileController {
  @Get("/")
  profile(req: any) {
    return req.user;
  }
}
@xtaskjs/security Decorador de clase y método clase o método

Auth

Alias de Authenticated para proyectos que prefieren un nombre de decorador más corto.

Alias de Authenticated
import { Auth } from "@xtaskjs/security";

@Auth(["default", "encrypted"])
export class SecureAreaController {}
@xtaskjs/security Decorador de clase y método clase o método

Roles

Aplica requisitos de autorización por roles a una ruta ya autenticada.

Endpoint restringido por rol
import { Controller, Get } from "@xtaskjs/common";
import { Authenticated, Roles } from "@xtaskjs/security";

@Controller("/admin")
@Authenticated()
export class AdminController {
  @Get("/")
  @Roles("admin")
  dashboard() {
    return { secure: true };
  }
}
@xtaskjs/security Decorador de clase y método clase o método

AllowAnonymous

Marca una ruta como accesible públicamente incluso cuando el controlador circundante está autenticado por defecto.

Comprobación de salud pública
import { Controller, Get } from "@xtaskjs/common";
import { AllowAnonymous, Authenticated } from "@xtaskjs/security";

@Controller("/admin")
@Authenticated()
export class AdminController {
  @Get("/health")
  @AllowAnonymous()
  health() {
    return { ok: true };
  }
}
@xtaskjs/security Decorador de clase clase

JwtSecurityStrategy

Forma decorador de registerJwtStrategy() para registrar una definición de estrategia JWT durante la carga del módulo.

Estrategia JWT basada en decorador
import { JwtSecurityStrategy } from "@xtaskjs/security";

@JwtSecurityStrategy({
  name: "default",
  default: true,
  secretOrKey: process.env.JWT_SECRET,
})
export class DefaultJwtStrategy {}
@xtaskjs/security Decorador de clase clase

JweSecurityStrategy

Forma decorador de registerJweStrategy() para flujos de token cifrados.

Estrategia JWE basada en decorador
import { JweSecurityStrategy } from "@xtaskjs/security";

@JweSecurityStrategy({
  name: "encrypted",
  decryptionKey: process.env.JWE_SECRET || "secret",
})
export class EncryptedStrategy {}
@xtaskjs/security Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectAuthenticationService

Inyecta el SecurityAuthenticationService registrado por el gestor del ciclo de vida de security.

Inyectar servicio de autenticación
import { Service } from "@xtaskjs/core";
import { InjectAuthenticationService, SecurityAuthenticationService } from "@xtaskjs/security";

@Service()
export class SessionAuditService {
  constructor(
    @InjectAuthenticationService()
    private readonly authentication: SecurityAuthenticationService
  ) {}
}
@xtaskjs/security Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectAuthorizationService

Inyecta el SecurityAuthorizationService usado para decisiones de roles y permisos.

Inyectar servicio de autorización
import { Service } from "@xtaskjs/core";
import { InjectAuthorizationService, SecurityAuthorizationService } from "@xtaskjs/security";

@Service()
export class PolicyService {
  constructor(
    @InjectAuthorizationService()
    private readonly authorization: SecurityAuthorizationService
  ) {}
}
@xtaskjs/security Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectPassport

Inyecta la instancia de Passport configurada y gestionada por xtaskjs security.

Inyectar Passport
import { Service } from "@xtaskjs/core";
import { InjectPassport } from "@xtaskjs/security";

@Service()
export class PassportInspector {
  constructor(@InjectPassport() private readonly passport: any) {}
}
@xtaskjs/security Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectSecurityLifecycleManager

Inyecta el SecurityLifecycleManager para que los servicios avanzados puedan inspeccionar estrategias o el cableado del estado de autenticación.

Inyectar gestor del ciclo de vida
import { Service } from "@xtaskjs/core";
import { InjectSecurityLifecycleManager } from "@xtaskjs/security";

@Service()
export class SecurityDiagnosticsService {
  constructor(@InjectSecurityLifecycleManager() private readonly lifecycle: any) {}
}

Grupo de decoradores

Persistencia y repositorios

Decoradores de registro e inyección de TypeORM exportados por @xtaskjs/typeorm. Vinculan datasources y repositorios dentro del mismo contenedor DI.

@xtaskjs/typeorm Decorador de clase clase

TypeOrmDataSource

Registra una definición de datasource de TypeORM para la gestión del arranque y apagado de xtask.

Registrar un datasource
import { TypeOrmDataSource } from "@xtaskjs/typeorm";
import { UserEntity } from "./user.entity";

@TypeOrmDataSource({
  name: "default",
  type: "sqlite",
  database: "app.sqlite",
  entities: [UserEntity],
  synchronize: true,
})
export class DatabaseConfig {}
@xtaskjs/typeorm Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectDataSource

Inyecta una instancia de datasource con nombre gestionada por la integración TypeORM de xtaskjs.

Inyectar el datasource por defecto
import { Service } from "@xtaskjs/core";
import { DataSource, InjectDataSource } from "@xtaskjs/typeorm";

@Service()
export class HealthQueryService {
  constructor(@InjectDataSource() private readonly dataSource: DataSource) {}
}
@xtaskjs/typeorm Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectRepository

Inyecta un repositorio TypeORM para una entidad y nombre de datasource concretos.

Inyectar repositorio de entidad
import { Service } from "@xtaskjs/core";
import { InjectRepository, Repository } from "@xtaskjs/typeorm";
import { UserEntity } from "./user.entity";

@Service()
export class UsersService {
  constructor(
    @InjectRepository(UserEntity)
    private readonly users: Repository<UserEntity>
  ) {}
}
@xtaskjs/typeorm Decorador de clase clase

TypeOrmMigration

Registra una clase de migration en el registro de TypeORM para un datasource con nombre.

Registrar una migration
import { MigrationInterface, QueryRunner, TypeOrmMigration } from "@xtaskjs/typeorm";

@TypeOrmMigration({ dataSourceName: "default" })
export class CreateAuditEntries1700000000000 implements MigrationInterface {
  async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query("CREATE TABLE audit_entries (id integer primary key autoincrement, message varchar(120) not null)");
  }

  async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query("DROP TABLE audit_entries");
  }
}
@xtaskjs/typeorm Decorador de clase clase

TypeOrmSeeder

Registra una clase seeder ordenada que se ejecuta después de inicializar el datasource cuando los seeders están habilitados.

Registrar un seeder de arranque
import { DataSource, TypeOrmSeeder } from "@xtaskjs/typeorm";

@TypeOrmSeeder({ dataSourceName: "default", order: 1 })
export class AuditEntriesSeeder {
  async run(dataSource: DataSource): Promise<void> {
    await dataSource.query("INSERT INTO audit_entries (message) VALUES ('seeded')");
  }
}

Grupo de decoradores

CQRS Buses, Handlers, And Projections

CQRS configuration, handler, projection, idempotency, and injector decorators exported by @xtaskjs/cqrs. These connect command, query, and event flows to the xtaskjs container and read or write datasource aliases.

@xtaskjs/cqrs Decorador de clase clase

Cqrs

Decorator form of configureCqrs() for binding the read and write datasource aliases and optional idempotency store during module loading.

Bind read and write datasource aliases
import { Cqrs } from "@xtaskjs/cqrs";

@Cqrs({ writeDataSourceName: "write-db", readDataSourceName: "read-db" })
export class CqrsConfiguration {}
@xtaskjs/cqrs Decorador de clase clase

CommandHandler

Registers a DI-managed class as the single handler for a command message type.

Command handler
import { Service } from "@xtaskjs/core";
import { CommandHandler, ICommandHandler } from "@xtaskjs/cqrs";

class CreateUserCommand {
  constructor(public readonly name: string) {}
}

@Service()
@CommandHandler(CreateUserCommand)
export class CreateUserHandler implements ICommandHandler<CreateUserCommand, string> {
  execute(command: CreateUserCommand) {
    return command.name;
  }
}
@xtaskjs/cqrs Decorador de clase clase

QueryHandler

Registers a DI-managed class as the handler for a query message type.

Query handler
import { Service } from "@xtaskjs/core";
import { IQueryHandler, QueryHandler } from "@xtaskjs/cqrs";

class ListUsersQuery {}

@Service()
@QueryHandler(ListUsersQuery)
export class ListUsersHandler implements IQueryHandler<ListUsersQuery, string[]> {
  execute() {
    return ["Ada"];
  }
}
@xtaskjs/cqrs Decorador de clase clase

EventHandler

Registers one or more event handlers that react after a message publishes an event on the CQRS event bus.

Event handler
import { Service } from "@xtaskjs/core";
import { EventHandler, IEventHandler } from "@xtaskjs/cqrs";

class UserCreatedEvent {
  constructor(public readonly id: string) {}
}

@Service()
@EventHandler(UserCreatedEvent)
export class UserProjectionHandler implements IEventHandler<UserCreatedEvent> {
  async handle(event: UserCreatedEvent) {
    console.log(event.id);
  }
}
@xtaskjs/cqrs Decorador de clase clase

ProcessManager / Saga

Registers an orchestration component that reacts to events with access to command, query, and event buses. Saga is an alias of ProcessManager.

Event-driven orchestration
import { Service } from "@xtaskjs/core";
import { IProcessManager, ProcessManager, ProcessManagerContext } from "@xtaskjs/cqrs";

class UserCreatedEvent {
  constructor(public readonly id: string) {}
}

@Service()
@ProcessManager(UserCreatedEvent)
export class WelcomeProcessManager implements IProcessManager<UserCreatedEvent> {
  async handle(event: UserCreatedEvent, context: ProcessManagerContext) {
    await context.commandBus.execute({ userId: event.id });
  }
}
@xtaskjs/cqrs Decorador de clase clase

ProjectionRebuilder

Registers a named projection rebuilder so operators or diagnostics flows can rebuild a read model from write-side state.

Named projection rebuilder
import { Service } from "@xtaskjs/core";
import { IProjectionRebuilder, ProjectionRebuilder } from "@xtaskjs/cqrs";

@Service()
@ProjectionRebuilder("users")
export class UserProjectionRebuilder implements IProjectionRebuilder {
  async rebuild() {
    console.log("rebuild read model");
  }
}
@xtaskjs/cqrs Decorador de clase clase

IdempotentCommand

Adds idempotency metadata to a command handler so repeated executions can reuse a cached result instead of running the write-side action again.

Idempotent command handler
import { CommandHandler, IdempotentCommand } from "@xtaskjs/cqrs";

class CreateUserCommand {
  constructor(public readonly name: string, public readonly idempotencyKey: string) {}
}

@IdempotentCommand<CreateUserCommand>({ key: (command) => command.idempotencyKey })
@CommandHandler(CreateUserCommand)
export class CreateUserHandler {
  execute(command: CreateUserCommand) {
    return `${command.name}:${command.idempotencyKey}`;
  }
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectCommandBus

Injects CommandBus so controllers or services can dispatch commands without reaching into the lifecycle manager directly.

Inject command bus
import { Service } from "@xtaskjs/core";
import { CommandBus, InjectCommandBus } from "@xtaskjs/cqrs";

@Service()
export class UsersFacade {
  constructor(@InjectCommandBus() private readonly commandBus: CommandBus) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectQueryBus

Injects QueryBus so read-side requests can be dispatched from controllers, presenters, or services.

Inject query bus
import { Service } from "@xtaskjs/core";
import { InjectQueryBus, QueryBus } from "@xtaskjs/cqrs";

@Service()
export class ReportsFacade {
  constructor(@InjectQueryBus() private readonly queryBus: QueryBus) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectEventBus

Injects EventBus so handlers can publish follow-up domain or integration events after write-side work completes.

Inject event bus
import { Service } from "@xtaskjs/core";
import { EventBus, InjectEventBus } from "@xtaskjs/cqrs";

@Service()
export class UserEventsPublisher {
  constructor(@InjectEventBus() private readonly events: EventBus) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectIdempotencyStore

Injects the configured idempotency store implementation used by idempotent command handlers.

Inject idempotency store
import { InjectIdempotencyStore, IIdempotencyStore } from "@xtaskjs/cqrs";
import { Service } from "@xtaskjs/core";

@Service()
export class IdempotencyDiagnosticsService {
  constructor(@InjectIdempotencyStore() private readonly store: IIdempotencyStore) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectReadDataSource

Injects the configured read-side datasource alias managed by CQRS and backed by @xtaskjs/typeorm.

Inject read datasource
import { Service } from "@xtaskjs/core";
import { InjectReadDataSource } from "@xtaskjs/cqrs";
import { DataSource } from "@xtaskjs/typeorm";

@Service()
export class ReadDiagnosticsService {
  constructor(@InjectReadDataSource() private readonly readDataSource: DataSource) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectWriteDataSource

Injects the configured write-side datasource alias for command handlers or projection rebuilders that need direct datasource access.

Inject write datasource
import { Service } from "@xtaskjs/core";
import { InjectWriteDataSource } from "@xtaskjs/cqrs";
import { DataSource } from "@xtaskjs/typeorm";

@Service()
export class WriteDiagnosticsService {
  constructor(@InjectWriteDataSource() private readonly writeDataSource: DataSource) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectReadRepository

Injects a repository from the configured read-side datasource alias so queries can stay projection-focused.

Inject read repository
import { Service } from "@xtaskjs/core";
import { InjectReadRepository } from "@xtaskjs/cqrs";
import { Repository } from "@xtaskjs/typeorm";

class UserProjection {}

@Service()
export class UsersReadService {
  constructor(@InjectReadRepository(UserProjection) private readonly users: Repository<UserProjection>) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectWriteRepository

Injects a repository from the configured write-side datasource alias for command handlers and write-model maintenance flows.

Inject write repository
import { Service } from "@xtaskjs/core";
import { InjectWriteRepository } from "@xtaskjs/cqrs";
import { Repository } from "@xtaskjs/typeorm";

class UserEntity {}

@Service()
export class UsersWriteService {
  constructor(@InjectWriteRepository(UserEntity) private readonly users: Repository<UserEntity>) {}
}
@xtaskjs/cqrs Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectCqrsLifecycleManager

Injects the CqrsLifecycleManager for advanced diagnostics, projection rebuild operations, and direct runtime inspection.

Inject CQRS lifecycle manager
import { Service } from "@xtaskjs/core";
import { InjectCqrsLifecycleManager } from "@xtaskjs/cqrs";

@Service()
export class CqrsDiagnosticsService {
  constructor(@InjectCqrsLifecycleManager() private readonly lifecycle: any) {}
}

Grupo de decoradores

Event Sourcing And Stored Events

Configuration, aggregate, subscriber, and injector decorators exported by @xtaskjs/event-source. These wire aggregate metadata, event appliers, repositories, and stored-event subscribers into the xtaskjs lifecycle.

@xtaskjs/event-source Decorador de clase clase

EventSource

Decorator form of configureEventSource() for registering the event store, publisher, and optional runtime flags during module loading.

Configure durable event storage
import { EventSource, createTypeOrmEventStore } from "@xtaskjs/event-source";

@EventSource({
  store: createTypeOrmEventStore({ dataSourceName: "write-db", tableName: "event_store" }),
})
export class EventSourceConfiguration {}
@xtaskjs/event-source Decorador de clase clase

EventSourcedAggregate

Registers aggregate metadata such as the aggregate name and stream key so repositories can load and persist event streams consistently.

Declare an aggregate stream
import { EventSourcedAggregate, EventSourcedAggregateRoot } from "@xtaskjs/event-source";

@EventSourcedAggregate({ stream: "users" })
export class UserAggregate extends EventSourcedAggregateRoot {}
@xtaskjs/event-source Decorador de método método

ApplyEvent

Registers the method that mutates aggregate state for a given event type during both live execution and historical replay.

Apply an aggregate event
import { ApplyEvent } from "@xtaskjs/event-source";

class UserRegisteredEvent {
  constructor(public readonly email: string) {}
}

export class UserAggregate {
  public email?: string;

  @ApplyEvent(UserRegisteredEvent)
  onRegistered(event: UserRegisteredEvent) {
    this.email = event.email;
  }
}
@xtaskjs/event-source Decorador de clase clase

EventSourceSubscriber / StoredEventSubscriber

Registers a DI-managed subscriber that reacts after stored events are appended, making it suitable for projections, integrations, and side effects.

React to stored events
import { Service } from "@xtaskjs/core";
import { EventSourceSubscriber, IEventSourceSubscriber } from "@xtaskjs/event-source";

class UserRegisteredEvent {
  constructor(public readonly email: string) {}
}

@Service()
@EventSourceSubscriber(UserRegisteredEvent)
export class WelcomeProjection implements IEventSourceSubscriber<UserRegisteredEvent> {
  handle(event: UserRegisteredEvent) {
    console.log(event.email);
  }
}
@xtaskjs/event-source Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectEventSourceRepository

Injects the repository for a specific event-sourced aggregate so services can create, load, and save streams through the lifecycle-managed store.

Inject an aggregate repository
import { Service } from "@xtaskjs/core";
import { EventSourceRepository, InjectEventSourceRepository } from "@xtaskjs/event-source";

class UserAggregate {}

@Service()
export class UserService {
  constructor(
    @InjectEventSourceRepository(UserAggregate)
    private readonly users: EventSourceRepository<any>
  ) {}
}
@xtaskjs/event-source Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectEventStore

Injects the active event store implementation when advanced services need direct stream append or load access.

Inject the event store
import { Service } from "@xtaskjs/core";
import { InjectEventStore } from "@xtaskjs/event-source";

@Service()
export class EventStoreDiagnosticsService {
  constructor(@InjectEventStore() private readonly store: any) {}
}
@xtaskjs/event-source Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectEventSourceBus

Injects the in-process stored-event bus so services can publish persisted envelopes to local subscribers when they need low-level runtime control.

Inject the stored-event bus
import { Service } from "@xtaskjs/core";
import { InjectEventSourceBus } from "@xtaskjs/event-source";

@Service()
export class EventReplayService {
  constructor(@InjectEventSourceBus() private readonly bus: any) {}
}
@xtaskjs/event-source Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectEventPublisher

Injects the configured external event publisher so services can inspect or extend publication behavior beyond the default queue bridge.

Inject the external publisher
import { Service } from "@xtaskjs/core";
import { InjectEventPublisher } from "@xtaskjs/event-source";

@Service()
export class EventPublisherDiagnosticsService {
  constructor(@InjectEventPublisher() private readonly publisher: any) {}
}
@xtaskjs/event-source Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectEventSourceLifecycleManager

Injects the EventSourceLifecycleManager for repository lookup, initialization checks, subscriber inspection, and lower-level event-source runtime access.

Inject the event-source lifecycle manager
import { Service } from "@xtaskjs/core";
import { InjectEventSourceLifecycleManager } from "@xtaskjs/event-source";

@Service()
export class EventSourceDiagnosticsService {
  constructor(@InjectEventSourceLifecycleManager() private readonly lifecycle: any) {}
}

Grupo de decoradores

Plantillas y entrega de mailer

Decoradores de mailer exportados por @xtaskjs/mailer. Registran transports y plantillas e inyectan servicios de entrega en clases gestionadas por DI.

@xtaskjs/mailer Decorador de clase clase

MailerTransport

Forma decorador de registerMailerTransport() para registrar un transport de correo con nombre durante la carga del módulo.

Registrar un transport con un decorador
import { MailerTransport, createMailtrapTransportOptions } from "@xtaskjs/mailer";

const transport = process.env.MAIL_TRANSPORT_PROVIDER === "smtp"
  ? {
      host: process.env.MAIL_SMTP_HOST || "smtp.example.com",
      port: Number(process.env.MAIL_SMTP_PORT || 587),
      secure: process.env.MAIL_SMTP_SECURE === "true",
      auth: {
        user: process.env.MAIL_SMTP_USER || "user",
        pass: process.env.MAIL_SMTP_PASS || "pass",
      },
    }
  : createMailtrapTransportOptions({
      username: process.env.MAILTRAP_SMTP_USER || "user",
      password: process.env.MAILTRAP_SMTP_PASS || "pass",
      host: process.env.MAILTRAP_SMTP_HOST || "sandbox.smtp.mailtrap.io",
      port: Number(process.env.MAILTRAP_SMTP_PORT || 2525),
      secure: process.env.MAILTRAP_SMTP_SECURE === "true",
    });

@MailerTransport({
  name: "default",
  defaults: { from: "hello@xtaskjs.dev" },
  transport,
})
export class DefaultTransportRegistration {}
@xtaskjs/mailer Decorador de clase clase

MailerTemplate

Forma decorador de registerMailerTemplate() para plantillas de correo reutilizables inline o renderizadas desde archivo.

Registrar una plantilla
import { MailerTemplate } from "@xtaskjs/mailer";

@MailerTemplate({
  name: "welcome",
  subject: "Welcome {{user.name}}",
  text: "Hello {{user.name}}",
  html: "<h1>Hello {{user.name}}</h1>",
})
export class WelcomeTemplateRegistration {}
@xtaskjs/mailer Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectMailerService

Inyecta MailerService para que un servicio gestionado por DI pueda renderizar plantillas y enviar correo.

Inyectar servicio mailer
import { Service } from "@xtaskjs/core";
import { InjectMailerService, MailerService } from "@xtaskjs/mailer";

@Service()
export class EmailService {
  constructor(@InjectMailerService() private readonly mailer: MailerService) {}
}
@xtaskjs/mailer Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectMailerTransport

Inyecta un transport con nombre para que un servicio pueda enviar directamente por un canal concreto, como notifications.

Inyectar transport de notifications
import { Service } from "@xtaskjs/core";
import { InjectMailerTransport, MailerTransporter } from "@xtaskjs/mailer";

@Service()
export class AlertsService {
  constructor(
    @InjectMailerTransport("notifications")
    private readonly notifications: MailerTransporter
  ) {}
}
@xtaskjs/mailer Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectMailerLifecycleManager

Inyecta el MailerLifecycleManager para inspección avanzada, verificación o búsqueda de transporters.

Inyectar gestor del ciclo de vida
import { Service } from "@xtaskjs/core";
import { InjectMailerLifecycleManager } from "@xtaskjs/mailer";

@Service()
export class MailDiagnosticsService {
  constructor(@InjectMailerLifecycleManager() private readonly lifecycle: any) {}
}

Grupo de decoradores

Internationalization y resolución de locale

Decoradores de configuración e inyección exportados por @xtaskjs/internationalization. Registran el comportamiento de locale y exponen servicios de traducción dentro de clases gestionadas por DI.

@xtaskjs/internationalization Decorador de clase clase

Internationalization

Forma decorador de configureInternationalization() para registrar el locale por defecto, el fallback, la moneda y la zona horaria durante la carga del módulo.

Registrar configuración base de internationalization
import { Internationalization } from "@xtaskjs/internationalization";

@Internationalization({
  defaultLocale: "en-US",
  fallbackLocale: "en-US",
  defaultCurrency: "USD",
  defaultTimeZone: "UTC",
})
export class AppI18nConfiguration {}
@xtaskjs/internationalization Decorador de clase clase

InternationalizationLocale

Registra una definición de locale con traducciones, moneda y zona horaria específicas del locale y diccionarios de namespace opcionales.

Registrar un catálogo de locale
import { InternationalizationLocale } from "@xtaskjs/internationalization";

@InternationalizationLocale({
  locale: "es-ES",
  currency: "EUR",
  timeZone: "Europe/Madrid",
  translations: { home: { title: "Bienvenida" } },
})
export class SpanishLocaleRegistration {}
@xtaskjs/internationalization Decorador de clase clase

InternationalizationResolver

Registra un resolver de locale personalizado que puede derivar el contexto de locale desde la petición, las cabeceras, el estado del contenedor o metadata del tenant.

Resolver de locale personalizado
import { InternationalizationResolver } from "@xtaskjs/internationalization";

@InternationalizationResolver(({ request }) => {
  return request?.headers?.["x-locale"] || request?.query?.locale;
})
export class HeaderLocaleResolver {}
@xtaskjs/internationalization Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectInternationalizationService

Inyecta InternationalizationService para que controladores y servicios puedan traducir claves, formatear valores, inspeccionar locales y cargar namespaces bajo demanda.

Inyectar servicio de traducción
import { Service } from "@xtaskjs/core";
import { InjectInternationalizationService, InternationalizationService } from "@xtaskjs/internationalization";

@Service()
export class CheckoutPresenter {
  constructor(
    @InjectInternationalizationService()
    private readonly intl: InternationalizationService
  ) {}
}
@xtaskjs/internationalization Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectI18nService

Alias of InjectInternationalizationService for shorter injection syntax in services and controllers.

Inject i18n service alias
import { InjectI18nService, InternationalizationService } from "@xtaskjs/internationalization";
import { Service } from "@xtaskjs/core";

@Service()
export class AliasI18nService {
  constructor(@InjectI18nService() private readonly intl: InternationalizationService) {}
}
@xtaskjs/internationalization Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectInternationalizationLifecycleManager

Inyecta el InternationalizationLifecycleManager para inspección avanzada de locales cargados, namespaces, contexto de petición o registro de formatters.

Inyectar ciclo de vida de internationalization
import { Service } from "@xtaskjs/core";
import { InjectInternationalizationLifecycleManager } from "@xtaskjs/internationalization";

@Service()
export class LocaleDiagnosticsService {
  constructor(
    @InjectInternationalizationLifecycleManager()
    private readonly lifecycle: any
  ) {}
}
@xtaskjs/internationalization Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectI18nLifecycleManager

Alias of InjectInternationalizationLifecycleManager for compact naming in diagnostics and infrastructure services.

Inject i18n lifecycle alias
import { InjectI18nLifecycleManager } from "@xtaskjs/internationalization";
import { Service } from "@xtaskjs/core";

@Service()
export class AliasLifecycleService {
  constructor(@InjectI18nLifecycleManager() private readonly lifecycle: any) {}
}

Grupo de decoradores

Value objects y transformación de DTO

Decoradores orientados a DTO de @xtaskjs/value-objects que convierten campos crudos de la petición en envoltorios de dominio normalizados antes de que los consuman controladores y servicios.

@xtaskjs/value-objects Decorador de propiedad class property

TransformValueObject

Transforma entrada cruda de DTO en una instancia de value object durante la conversión con class-transformer para que el código posterior reciba un envoltorio validado en lugar de una primitiva.

Normalizar email DTO de entrada
import { plainToInstance } from "class-transformer";
import { StringValueObject, TransformValueObject } from "@xtaskjs/value-objects";

class EmailAddress extends StringValueObject {
  constructor(value: string) {
    super(value.trim().toLowerCase());
  }
}

class CreateUserDto {
  @TransformValueObject(EmailAddress)
  email!: EmailAddress;
}

const dto = plainToInstance(CreateUserDto, { email: " USER@Example.com " });

Grupo de decoradores

Cache Models And Runtime Control

Configuration, model, injector, and method decorators from @xtaskjs/cache used to register cache models, inject repositories or services, and control read/write cache behavior in DI-managed services.

@xtaskjs/cache Decorador de clase clase

CacheSettings

Decorator form of configureCache() for setting package-wide defaults such as driver, TTL, namespace, Redis options, and HTTP cache defaults while modules load.

Decorator-based cache defaults
import { CacheSettings } from "@xtaskjs/cache";

@CacheSettings({
  defaultDriver: "memory",
  defaultTtl: "30s",
  namespace: "catalog",
})
export class CacheConfiguration {}
@xtaskjs/cache Decorador de clase clase

CacheModel

Registers a named cache model with driver selection, TTL defaults, serialization hooks, and optional Redis-specific overrides.

Register a cache model
import { CacheModel } from "@xtaskjs/cache";

@CacheModel({ name: "products", ttl: "5m", driver: "redis" })
export class ProductCacheModel {}
@xtaskjs/cache Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectCacheService

Injects CacheService for model-level operations such as listModels(), get(), set(), remember(), delete(), and clear().

Inject the cache service
import { Service } from "@xtaskjs/core";
import { CacheService, InjectCacheService } from "@xtaskjs/cache";

@Service()
export class CacheInspectorService {
  constructor(
    @InjectCacheService()
    private readonly cache: CacheService
  ) {}
}
@xtaskjs/cache Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectCacheRepository

Injects a model-scoped CacheRepository<T> so services can work directly with entries, hit metadata, and per-model TTL behavior.

Inject a cache repository
import { Service } from "@xtaskjs/core";
import { CacheRepository, InjectCacheRepository } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";

@Service()
export class ProductCacheReader {
  constructor(
    @InjectCacheRepository(ProductCacheModel)
    private readonly products: CacheRepository<any>
  ) {}
}
@xtaskjs/cache Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectCacheLifecycleManager

Injects the lower-level cache lifecycle manager for diagnostics, initialization checks, repository resolution, and runtime state access.

Inject the cache lifecycle manager
import { Service } from "@xtaskjs/core";
import { InjectCacheLifecycleManager } from "@xtaskjs/cache";

@Service()
export class CacheLifecycleDiagnosticsService {
  constructor(
    @InjectCacheLifecycleManager()
    private readonly lifecycle: any
  ) {}
}
@xtaskjs/cache Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectCacheAdminService

Injects CacheAdminService for runtime inspection of models, entries, and effective HTTP cache metadata resolved from decorated routes.

Inject the cache admin service
import { Service } from "@xtaskjs/core";
import { CacheAdminService, InjectCacheAdminService } from "@xtaskjs/cache";

@Service()
export class CacheAdminInspector {
  constructor(
    @InjectCacheAdminService()
    private readonly cacheAdmin: CacheAdminService
  ) {}
}
@xtaskjs/cache Decorador de método método

Cacheable

Reads through the configured repository. Cache hits skip method execution, while misses store the resolved result using an optional key builder, TTL override, and unless condition.

Read-through caching
import { Service } from "@xtaskjs/core";
import { Cacheable } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";

@Service()
export class ProductService {
  @Cacheable({ model: ProductCacheModel, key: (id: string) => id, ttl: "15m" })
  async getProduct(id: string) {
    return { id, generatedAt: new Date().toISOString() };
  }
}
@xtaskjs/cache Decorador de método método

CachePut

Always runs the method and then writes the returned value into the cache, optionally guarding the write with when and overriding the stored TTL.

Write-through cache refresh
import { Service } from "@xtaskjs/core";
import { CachePut } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";

@Service()
export class ProductRefreshService {
  @CachePut({ model: ProductCacheModel, key: (id: string) => id })
  async refreshProduct(id: string) {
    return { id, refreshedAt: new Date().toISOString() };
  }
}
@xtaskjs/cache Decorador de método método

CacheEvict

Removes one cached entry or clears an entire model before or after the wrapped method runs, with optional key resolution and conditional execution.

Evict one key or a whole model
import { Service } from "@xtaskjs/core";
import { CacheEvict } from "@xtaskjs/cache";
import { ProductCacheModel } from "./product-cache.model";

@Service()
export class ProductInvalidationService {
  @CacheEvict({ model: ProductCacheModel, key: (id: string) => id })
  async evictProduct(id: string) {
    return true;
  }
}

Grupo de decoradores

HTTP And Browser Cache Policies

HTTP response decorators from @xtaskjs/cache used to apply Cache-Control directives, validators, and Vary behavior to routes, plus injector access to HttpCacheService.

@xtaskjs/cache Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectHttpCacheService

Injects HttpCacheService so services or controllers can build cache headers manually, inspect policy normalization, or describe effective route behavior.

Inject the HTTP cache service
import { Service } from "@xtaskjs/core";
import { HttpCacheService, InjectHttpCacheService } from "@xtaskjs/cache";

@Service()
export class CacheHeaderService {
  constructor(
    @InjectHttpCacheService()
    private readonly httpCache: HttpCacheService
  ) {}
}
@xtaskjs/cache Decorador de clase y método clase o método

CacheResponse

Applies a full HTTP cache policy to responses, including visibility, max-age, stale directives, ETag, Last-Modified, Expires, Vary, and conditional application rules.

Apply a custom HTTP cache policy
import { Controller, Get } from "@xtaskjs/common";
import { CacheResponse } from "@xtaskjs/cache";

@Controller("/reports")
export class ReportsController {
  @CacheResponse({ visibility: "private", maxAge: "60s", mustRevalidate: true })
  @Get("/summary")
  summary() {
    return { ok: true };
  }
}
@xtaskjs/cache Decorador de clase y método clase o método

BrowserCache / CacheHeaders

Alias names for CacheResponse() when the intent is browser-facing cache headers rather than a generic response policy decorator.

Alias for browser cache headers
import { Controller, Get } from "@xtaskjs/common";
import { BrowserCache } from "@xtaskjs/cache";

@Controller("/articles")
export class ArticleController {
  @BrowserCache({ maxAge: "1m", staleWhileRevalidate: "30s" })
  @Get("/:slug")
  show() {
    return { published: true };
  }
}
@xtaskjs/cache Decorador de clase y método clase o método

CacheView

Applies the same HTTP cache policy surface as CacheResponse(), but only when the decorated route returns view(...).

Cache rendered views only
import { Controller, Get } from "@xtaskjs/common";
import { view } from "@xtaskjs/core";
import { CacheView } from "@xtaskjs/cache";

@Controller("/")
export class WebController {
  @CacheView({ maxAge: "10m", etag: true })
  @Get("/")
  home() {
    return view("home", { title: "Welcome" });
  }
}
@xtaskjs/cache Decorador de clase y método clase o método

NoStore

Disables browser storage for sensitive responses by combining no-store, no-cache, must-revalidate, and an already-expired Expires value.

Disable browser storage
import { Controller, Get } from "@xtaskjs/common";
import { NoStore } from "@xtaskjs/cache";

@Controller("/drafts")
export class DraftController {
  @NoStore()
  @Get("/preview")
  preview() {
    return { draft: true };
  }
}
@xtaskjs/cache Decorador de clase y método clase o método

NoCache

Forces revalidation by emitting no-cache and must-revalidate semantics while still allowing conditional requests when other validators are enabled.

Force revalidation
import { Controller, Get } from "@xtaskjs/common";
import { NoCache } from "@xtaskjs/cache";

@Controller("/profile")
export class ProfileController {
  @NoCache()
  @Get("/")
  show() {
    return { profile: true };
  }
}
@xtaskjs/cache Decorador de clase y método clase o método

VaryBy

Appends Vary header values so downstream caches distinguish responses by headers such as Accept-Language or Authorization.

Vary by request headers
import { Controller, Get } from "@xtaskjs/common";
import { BrowserCache, VaryBy } from "@xtaskjs/cache";

@Controller("/catalog")
export class CatalogController {
  @BrowserCache({ maxAge: "2m" })
  @VaryBy("accept-language", "authorization")
  @Get("/")
  list() {
    return { ok: true };
  }
}

Grupo de decoradores

Trabajos scheduler y ciclo de vida

Decoradores de scheduling de @xtaskjs/scheduler usados para declarar trabajos cron, interval y timeout e inyectar servicios scheduler en tiempo de ejecución.

@xtaskjs/scheduler Decorador de método método

Cron

Registra un trabajo recurrente basado en cron con grupos opcionales, reintentos, sobrescrituras de zona horaria y comportamiento de ejecución en arranque.

Trabajo cron
import { Service } from "@xtaskjs/core";
import { Cron } from "@xtaskjs/scheduler";

@Service()
export class ReportsScheduler {
  @Cron("0 */5 * * * *", { name: "reports.flush", group: ["reports", "nightly"] })
  flushReports() {
    console.log("flush pending reports");
  }
}
@xtaskjs/scheduler Decorador de método método

Every / Interval

Registra un trabajo recurrente por intervalo fijo. Interval es un alias de Every para proyectos que prefieren un nombre más explícito.

Trabajo por intervalo
import { Service } from "@xtaskjs/core";
import { Every } from "@xtaskjs/scheduler";

@Service()
export class CacheScheduler {
  @Every("10m", { name: "cache.compact", runOnInit: true })
  compact() {
    console.log("compact cache");
  }
}
@xtaskjs/scheduler Decorador de método método

Timeout

Registra una tarea diferida de una sola ejecución que corre después del arranque en lugar de seguir una cadencia recurrente.

Trabajo diferido de calentamiento
import { Service } from "@xtaskjs/core";
import { Timeout } from "@xtaskjs/scheduler";

@Service()
export class WarmupScheduler {
  @Timeout("30s", { name: "cache.warmup" })
  warmup() {
    console.log("warm cache once after startup");
  }
}
@xtaskjs/scheduler Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectSchedulerService

Inyecta SchedulerService para que servicios o controladores puedan inspeccionar trabajos y disparar grupos o trabajos individuales manualmente.

Inyectar servicio scheduler
import { Service } from "@xtaskjs/core";
import { InjectSchedulerService, SchedulerService } from "@xtaskjs/scheduler";

@Service()
export class SchedulerInspector {
  constructor(
    @InjectSchedulerService()
    private readonly scheduler: SchedulerService
  ) {}
}
@xtaskjs/scheduler Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectSchedulerLifecycleManager

Inyecta el SchedulerLifecycleManager para un control de bajo nivel sobre el estado de arranque, los handles activos y la metadata de trabajos descubiertos.

Inyectar ciclo de vida de scheduler
import { Service } from "@xtaskjs/core";
import { InjectSchedulerLifecycleManager } from "@xtaskjs/scheduler";

@Service()
export class SchedulerDiagnosticsService {
  constructor(
    @InjectSchedulerLifecycleManager()
    private readonly lifecycle: any
  ) {}
}

Grupo de decoradores

Throttling And Rate Limits

Rate-limiting decorators from @xtaskjs/throttler used to protect routes and inject runtime throttling services.

@xtaskjs/throttler Decorador de clase y método clase o método

Throttle

Applies request throttling with a limit and TTL window, integrating with guard execution for protected endpoints.

Protect endpoint with limit
import { Controller, Get } from "@xtaskjs/common";
import { Throttle } from "@xtaskjs/throttler";

@Controller("/auth")
export class AuthController {
  @Get("/login")
  @Throttle(10, "1m")
  login() {
    return { ok: true };
  }
}
@xtaskjs/throttler Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectThrottlerService

Injects ThrottlerService for runtime inspection and programmatic throttling operations.

Inject throttler service
import { Service } from "@xtaskjs/core";
import { InjectThrottlerService } from "@xtaskjs/throttler";

@Service()
export class ThrottlerDiagnosticsService {
  constructor(@InjectThrottlerService() private readonly throttler: any) {}
}
@xtaskjs/throttler Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectThrottlerLifecycleManager

Injects the throttler lifecycle manager for advanced diagnostics and low-level store integration checks.

Inject throttler lifecycle
import { Service } from "@xtaskjs/core";
import { InjectThrottlerLifecycleManager } from "@xtaskjs/throttler";

@Service()
export class ThrottlerLifecycleService {
  constructor(@InjectThrottlerLifecycleManager() private readonly lifecycle: any) {}
}

Grupo de decoradores

Gateways realtime de Socket.IO

Decoradores de gateway, eventos e inyección exportados por @xtaskjs/socket-io. Mantienen los handlers realtime dentro de servicios xtaskjs normales y conectan namespaces de Socket.IO al contenedor DI.

@xtaskjs/socket-io Decorador de clase clase

SocketGateway

Marca un servicio gestionado por DI como gateway realtime, asignando namespace, nombre opcional, grupos y estado disabled para el descubrimiento del ciclo de vida.

Gateway realtime decorado
import { Service } from "@xtaskjs/core";
import { SocketGateway } from "@xtaskjs/socket-io";

@Service()
@SocketGateway({ namespace: "/chat", group: ["realtime", "chat"] })
export class ChatGateway {}
@xtaskjs/socket-io Decorador de método método

OnSocketConnection

Se ejecuta cuando un cliente se conecta al namespace del gateway y recibe el socket conectado junto con el contexto del handler.

Registrar conexiones de clientes
import { Service } from "@xtaskjs/core";
import { OnSocketConnection, SocketGateway } from "@xtaskjs/socket-io";

@Service()
@SocketGateway({ namespace: "/chat" })
export class PresenceGateway {
  @OnSocketConnection()
  onConnect(socket: any, context: { namespace: any }) {
    context.namespace.emit("presence.updated", { socketId: socket.id });
  }
}
@xtaskjs/socket-io Decorador de método método

OnSocketDisconnect

Se ejecuta cuando Socket.IO desconecta a un cliente, por lo que es un buen lugar para actualizar presencia, liberar estado de salas o registrar motivos de desconexión.

Gestionar motivos de desconexión
import { Service } from "@xtaskjs/core";
import { OnSocketDisconnect, SocketGateway } from "@xtaskjs/socket-io";

@Service()
@SocketGateway({ namespace: "/chat" })
export class PresenceGateway {
  @OnSocketDisconnect()
  onDisconnect(reason: string, socket: any) {
    console.log(`socket ${socket.id} disconnected: ${reason}`);
  }
}
@xtaskjs/socket-io Decorador de método método

OnSocketEvent / SubscribeMessage

Registra un handler de evento Socket.IO con nombre, puede sobrescribir el namespace o las opciones del handler y reconoce automáticamente los valores devueltos cuando el cliente espera un ack.

Evento de chat con acknowledgement
import { Service } from "@xtaskjs/core";
import { OnSocketEvent, SocketGateway } from "@xtaskjs/socket-io";

@Service()
@SocketGateway({ namespace: "/chat" })
export class ChatGateway {
  @OnSocketEvent("chat.message")
  onMessage(payload: { text: string }, context: { socket: any }) {
    return { ok: true, socketId: context.socket.id, text: payload.text };
  }
}
@xtaskjs/socket-io Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectSocketService

Inyecta SocketIoService para que controladores y servicios puedan emitir eventos, inspeccionar namespaces y listar gateways descubiertos.

Inyectar el servicio helper de sockets
import { Service } from "@xtaskjs/core";
import { InjectSocketService, SocketIoService } from "@xtaskjs/socket-io";

@Service()
export class AnnouncementService {
  constructor(
    @InjectSocketService()
    private readonly sockets: SocketIoService
  ) {}
}
@xtaskjs/socket-io Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectSocketLifecycleManager

Inyecta SocketIoLifecycleManager para diagnósticos de bajo nivel, inspección de gateways, acceso a namespaces o control manual de emisiones.

Inyectar el gestor de ciclo de vida de sockets
import { Service } from "@xtaskjs/core";
import { InjectSocketLifecycleManager } from "@xtaskjs/socket-io";

@Service()
export class SocketDiagnosticsService {
  constructor(
    @InjectSocketLifecycleManager()
    private readonly lifecycle: any
  ) {}
}
@xtaskjs/socket-io Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectSocketServer

Inyecta la instancia raíz del servidor Socket.IO cuando se necesitan APIs de adaptador de bajo nivel o broadcasts globales.

Inyectar el servidor raíz de Socket.IO
import { Service } from "@xtaskjs/core";
import { InjectSocketServer } from "@xtaskjs/socket-io";

@Service()
export class SocketServerBridge {
  constructor(
    @InjectSocketServer()
    private readonly server: any
  ) {}
}
@xtaskjs/socket-io Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectSocketNamespace

Inyecta una instancia de namespace por nombre para que los servicios puedan dirigirse a una topología de salas concreta sin enrutar cada emisión a través del servidor raíz.

Inyectar un namespace con nombre
import { Service } from "@xtaskjs/core";
import { InjectSocketNamespace } from "@xtaskjs/socket-io";

@Service()
export class ChatNamespacePublisher {
  constructor(
    @InjectSocketNamespace("/chat")
    private readonly namespace: any
  ) {}
}

Grupo de decoradores

Colas y mensajería

Decoradores de consumo, publicación e inyección de colas exportados por @xtaskjs/queues. Conectan transports de broker y colas en memoria con servicios gestionados por DI.

@xtaskjs/queues Decorador de método método

QueueHandler

Registra un consumidor de colas con nombre para una cola concreta y admite reintentos, grupos, dead-letter routing y selección de transporte.

Consumidor específico de cola
import { Service } from "@xtaskjs/core";
import { QueueHandler } from "@xtaskjs/queues";

@Service()
export class OrdersConsumer {
  @QueueHandler("orders.created", {
    name: "orders.created.consumer",
    transportName: "memory",
    maxRetries: 3,
    deadLetterQueue: "orders.dead",
  })
  async onOrderCreated(payload: { orderId: string }) {
    console.log("created", payload.orderId);
  }
}
@xtaskjs/queues Decorador de método método

QueuePattern

Registra un listener basado en topic o patrón que puede suscribirse a comodines o filtros de topics del broker según el transporte.

Listener por patrón
import { Service } from "@xtaskjs/core";
import { QueuePattern } from "@xtaskjs/queues";

@Service()
export class AuditConsumer {
  @QueuePattern("orders.*", {
    name: "orders.audit",
    transportName: "rabbitmq",
  })
  onOrderEvent(payload: any, context: { queue: string }) {
    console.log(context.queue, payload);
  }
}
@xtaskjs/queues Decorador de método método

QueueSubscribe

Alias of QueueHandler for queue-specific consumers when teams prefer a subscribe-oriented naming style.

Alias of QueueHandler
import { QueueSubscribe } from "@xtaskjs/queues";
import { Service } from "@xtaskjs/core";

@Service()
export class BillingConsumer {
  @QueueSubscribe("billing.invoice.created")
  onInvoice(payload: { invoiceId: string }) {
    return payload.invoiceId;
  }
}
@xtaskjs/queues Decorador de método método

PublishToQueue

Publica en una cola el resultado resuelto del método una vez que termina, conservando el valor de retorno original.

Publicar resultado del método
import { Service } from "@xtaskjs/core";
import { PublishToQueue } from "@xtaskjs/queues";

@Service()
export class CheckoutService {
  @PublishToQueue("checkout.completed", { transportName: "memory" })
  complete(orderId: string) {
    return { orderId, status: "completed" };
  }
}
@xtaskjs/queues Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectQueueService

Inyecta QueueService para que servicios o controladores puedan publicar mensajes, crear productores e inspeccionar consumidores y transports del runtime.

Inyectar servicio de colas
import { Service } from "@xtaskjs/core";
import { InjectQueueService, QueueService } from "@xtaskjs/queues";

@Service()
export class QueuePublisher {
  constructor(
    @InjectQueueService()
    private readonly queues: QueueService
  ) {}
}
@xtaskjs/queues Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectQueueLifecycleManager

Injects QueueLifecycleManager for advanced consumer, transport, and startup diagnostics.

Inject queue lifecycle manager
import { InjectQueueLifecycleManager } from "@xtaskjs/queues";
import { Service } from "@xtaskjs/core";

@Service()
export class QueueLifecycleDiagnostics {
  constructor(@InjectQueueLifecycleManager() private readonly lifecycle: any) {}
}
@xtaskjs/queues Decorador de parámetro y propiedad parámetro del constructor o propiedad

InjectQueueTransport

Inyecta una implementación de QueueTransport con nombre cuando se necesita publicación o control de suscripción a bajo nivel del broker.

Inyectar transporte de colas con nombre
import { Service } from "@xtaskjs/core";
import { InjectQueueTransport } from "@xtaskjs/queues";

@Service()
export class QueueTransportDiagnostics {
  constructor(
    @InjectQueueTransport("rabbitmq")
    private readonly transport: any
  ) {}
}