UNPKG

playwright-fluent

Version:
87 lines (86 loc) 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.onRequestToRespondWith = void 0; function serializeBody(body) { if (typeof body === 'string') { return body; } try { return JSON.stringify(body, null, 2); } catch (error) { const buffer = body; return buffer; } } function buildPlaywrightResponseWith(mockedResponse) { return { headers: buildHeadersFrom(mockedResponse), contentType: buildContentTypeFrom(mockedResponse), status: mockedResponse.status || 200, body: serializeBody(mockedResponse.body), }; } function buildHeadersFrom(mockedResponse) { const headers = { ...mockedResponse.headers, }; if (!hasAccessControlAllowCredentialsHeader(headers)) { headers['Access-Control-Allow-Credentials'] = 'true'; } if (!hasAccessControlAllowOriginHeader(headers)) { headers['Access-Control-Allow-Origin'] = '*'; } return headers; } function hasAccessControlAllowCredentialsHeader(headers) { if (headers['access-control-allow-credentials']) { return true; } if (headers['Access-Control-Allow-Credentials']) { return true; } return false; } function hasAccessControlAllowOriginHeader(headers) { if (headers['access-control-allow-origin']) { return true; } if (headers['Access-Control-Allow-Origin']) { return true; } return false; } function buildContentTypeFrom(mockedResponse) { if (mockedResponse.contentType) { return mockedResponse.contentType; } if (typeof mockedResponse.body === 'string') { return 'text/plain'; } return 'application/json'; } async function onRequestToRespondWith(url, options, response, page) { if (!page) { throw new Error(`Cannot intercept requests to '${url}' because no browser has been launched`); } await page.route((uri) => { return uri.toString().includes(url); }, (route, request) => { const requestMethod = request.method(); if (options && typeof options.method === 'string' && options.method !== requestMethod) { route.continue(); return; } if (options && typeof options.bypassPredicate === 'function' && options.bypassPredicate(request)) { route.continue(); return; } const mockedResponse = typeof response === 'function' ? response(request) : response; const playwrightResponse = buildPlaywrightResponseWith(mockedResponse); route.fulfill(playwrightResponse); }); } exports.onRequestToRespondWith = onRequestToRespondWith;