request-mocking-protocol
Version:
A protocol for declarative mocking of HTTP requests
22 lines (18 loc) • 760 B
text/typescript
/**
* MSW interceptor.
*/
import { http, bypass, HttpResponse } from 'msw';
import { extractMockSchemas, GetHeaders } from '../transport';
import { matchSchemas } from '../request-matcher/utils';
import { ResponseBuilder } from '../response-builder';
export function createHandler(getIncomingHeaders: GetHeaders) {
return http.all('*', async ({ request }) => {
const mockSchemas = await extractMockSchemas(getIncomingHeaders);
const matchResult = await matchSchemas(request, mockSchemas);
if (!matchResult) return;
const { body, headers, status, statusText } = await new ResponseBuilder(matchResult, {
bypass: (req) => fetch(bypass(req)),
}).build();
return new HttpResponse(body, { status, statusText, headers });
});
}