import Command, { CommandClass } from './command.js';
import '@hexadrop/types/class';
import '@hexadrop/types/primitives';

/**
 * @constant
 * @description The metadata key used to define command handlers.
 */
declare const COMMAND_HANDLER_METADATA_KEY = "command-handler";
/**
 * @function CommandHandlerDecorator
 * @description A decorator function to define command handlers.
 * @param {...CommandClass<CommandType>[]} commands - The commands that the handler can handle.
 * @returns {ClassDecorator} - A class decorator that defines the command handler.
 * @template CommandType - The type of the command.
 */
declare function CommandHandlerDecorator<CommandType extends Command>(...commands: CommandClass<CommandType>[]): ClassDecorator;

export { COMMAND_HANDLER_METADATA_KEY, CommandHandlerDecorator as default };
