src/background/handler-registry.ts

Total Symbols
2
Lines of Code
46
Avg Complexity
2.0
Symbol Types
1

File Relationships

graph LR dispatchMessage["dispatchMessage"] getHandlerForType["getHandlerForType"] dispatchMessage -->|calls| getHandlerForType click dispatchMessage "../symbols/5ff85783b526b44c.html" click getHandlerForType "../symbols/5558432b6ab64704.html"

Symbols by Kind

function 2

All Symbols

Name Kind Visibility Status Lines Signature
getHandlerForType function exported- 35-37 getHandlerForType(type: MessageType): : MessageHandler | null
dispatchMessage function exported- 39-45 dispatchMessage( message: ExtensionMessage, ): : Promise<unknown>

Full Source

/**
 * Handler registry — maps message types to their handlers using the MessageHandler interface.
 */

import type { MessageHandler } from "@/types/interfaces";
import type { ExtensionMessage, MessageType } from "@/types";
import {
  rulesHandler,
  storageHandler,
  cacheHandler,
  learningHandler,
  datasetHandler,
  aiHandler,
  demoHandler,
} from "./handlers";

const ALL_HANDLERS: ReadonlyArray<MessageHandler> = [
  rulesHandler,
  storageHandler,
  cacheHandler,
  learningHandler,
  datasetHandler,
  aiHandler,
  demoHandler,
];

/** Pre-built map: MessageType → MessageHandler for O(1) dispatch */
const handlerMap = new Map<MessageType, MessageHandler>();
for (const handler of ALL_HANDLERS) {
  for (const type of handler.supportedTypes) {
    handlerMap.set(type, handler);
  }
}

export function getHandlerForType(type: MessageType): MessageHandler | null {
  return handlerMap.get(type) ?? null;
}

export async function dispatchMessage(
  message: ExtensionMessage,
): Promise<unknown> {
  const handler = getHandlerForType(message.type);
  if (!handler) return null;
  return handler.handle(message);
}