In-memory query bus implementation.

Provides a simple, synchronous query bus for handling queries. Each query type can have only one handler.

const queryBus = new InMemoryQueryBus();

// Register handler
queryBus.register(GetUserQuery, async (query) => {
return await userRepository.findById(query.userId);
});

// Execute query
const user = await queryBus.execute(new GetUserQuery('123'));

Implements

  • QueryBus

Constructors

Methods

  • Registers a query handler.

    Type Parameters

    • TQuery extends Query

      The query type

    • TResult = unknown

      The result type

    Parameters

    • queryType: new (...args: never[]) => TQuery

      The query class constructor

    • handler: QueryHandler<TQuery, TResult> | (query: TQuery) => Promise<TResult>

      The handler function

    Returns void

    If a handler is already registered for this query type

    queryBus.register(GetUserQuery, async (query) => {
    return await findUser(query.userId);
    });
  • Executes a query through its registered handler.

    Type Parameters

    • TResult = unknown

      The result type

    Parameters

    • query: Query

      The query to execute

    Returns Promise<TResult>

    The result from the query handler

    If no handler is registered for this query type

    const user = await queryBus.execute(new GetUserQuery('123'));
    
  • Checks if a handler is registered for a query type.

    Parameters

    • queryType: new (...args: never[]) => Query

      The query class constructor

    Returns boolean

    True if a handler is registered

  • Unregisters a query handler.

    Parameters

    • queryType: new (...args: never[]) => Query

      The query class constructor

    Returns boolean

    True if a handler was unregistered