UNPKG

@superhero/oas

Version:

OpenAPI Specification (OAS) router

49 lines (44 loc) 1.16 kB
export function locate(locator) { const oas = locator('@superhero/oas') return new ResponsesMiddleware(oas) } /** * @memberof Oas.Middleware */ export default class ResponsesMiddleware { constructor(oas) { this.oas = oas } async dispatch(request, session) { await session.chain.next() if(false === !!session.abortion.signal.aborted) { const status = session.view.status, operation = session.route.oas[request.method], responses = operation.responses if(status in responses) { this.oas.responses.conform(responses[status], session.view) } else { const error = new Error(`Invalid status code: ${status}`) error.code = 'E_OAS_INVALID_SPECIFICATION' error.cause = `The operation supports status codes: ${Object.keys(responses).join(', ')}` throw error } } } onError(reason, request, session) { const error = new Error(`Unable to conform the response for operation ${session.route.oas[request.method].operationId}`) error.code = 'E_OAS_INVALID_RESPONSE' error.cause = reason throw error } }