@synet/patterns
Version:
Robust, battle-tested collection of stable patterns used in Synet packages
38 lines (37 loc) • 1.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Mediator = void 0;
/**
* Core mediator implementation
* Dispatches requests to appropriate handlers
*/
class Mediator {
constructor() {
// Using a more type-safe approach with a type map
this.handlers = new Map();
}
/**
* Register a handler for a specific request type
*/
registerHandler(requestType, handler) {
if (this.handlers.has(requestType)) {
throw new Error(`Handler already registered for request type: ${requestType}`);
}
// Type assertion here is necessary but safe since we control both sides
this.handlers.set(requestType, handler);
}
/**
* Send a request to be handled by its registered handler
* @returns Promise resolving to the handler's response
*/
async send(request) {
const handler = this.handlers.get(request.type);
if (!handler) {
throw new Error(`No handler registered for request type: ${request.type}`);
}
// Cast is safe because we maintain the type association when registering
const typedHandler = handler;
return await Promise.resolve(typedHandler.handle(request));
}
}
exports.Mediator = Mediator;