You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

command-bus.ts 738B

1234567891011121314151617181920212223242526
  1. export type CommandHandler = (args?: Record<string, any>) => void | Promise<void>
  2. const handlers = new Map<string, CommandHandler>()
  3. const registerCommand = (name: string, handler: CommandHandler) => {
  4. handlers.set(name, handler)
  5. }
  6. const unregisterCommand = (name: string) => {
  7. handlers.delete(name)
  8. }
  9. export const executeCommand = async (name: string, args?: Record<string, any>) => {
  10. const handler = handlers.get(name)
  11. if (!handler)
  12. return
  13. await handler(args)
  14. }
  15. export const registerCommands = (map: Record<string, CommandHandler>) => {
  16. Object.entries(map).forEach(([name, handler]) => registerCommand(name, handler))
  17. }
  18. export const unregisterCommands = (names: string[]) => {
  19. names.forEach(unregisterCommand)
  20. }