import { method, request, responder, response } from './interface/index'; export class handler { public responders: responder[]; public method: method; constructor( method: method, responders: responder[], ) { this.responders = responders; this.method = method; } add(responder: responder) { this.responders.push(responder); } async respond( request: request, responseMessage: response = new response( '', ), ): Promise | void> { switch (this.responders.length) { case 0: Promise.reject('No responders found in this handler.'); break; case 1: return this.responders[0](request, responseMessage); default: for (const responder of this.responders) { const thisResponse = await responder( request, responseMessage, ); if (thisResponse instanceof response) { responseMessage = thisResponse; } } return responseMessage; } } } export default handler;