import { injectable } from "@codemation/core"; import type { Command } from "../../application/bus/Command"; type AbstractType = abstract new (...args: any[]) => TInstance; export const commandHandlerMetadataKey = Symbol.for("codemation.infrastructure.di.CommandHandler"); export class HandlesCommand { static forCommand, TResult>(commandType: AbstractType): ClassDecorator { return (target) => { Reflect.defineMetadata(commandHandlerMetadataKey, commandType, target); injectable()(target as never); }; } }