playwright-fluent
Version:
Fluent API around playwright
90 lines (89 loc) • 2.55 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.stringifyRequest = exports.toRequestInfo = exports.toQueryString = void 0;
const tslib_1 = require("tslib");
const url_1 = require("url");
const querystring = (0, tslib_1.__importStar)(require("querystring"));
// eslint-disable-next-line @typescript-eslint/no-var-requires
const escapeHtml = require('escape-html');
function encodeHtml(content) {
if (typeof content !== 'string') {
return content;
}
const result = escapeHtml(content);
return result;
}
function toJsonOrDefault(data) {
try {
if (!data) {
return data;
}
return JSON.parse(data);
}
catch (error) {
return data;
}
}
async function toJsonOrText(response) {
try {
const payload = await response.json();
return payload;
}
catch (error) {
const payload = await response.text();
return encodeHtml(payload);
}
}
function toQueryString(url) {
try {
const nodeUrl = new url_1.URL(url);
const rawSearch = nodeUrl.search;
let rawQueryString = rawSearch;
if (rawSearch && rawSearch.startsWith('?')) {
rawQueryString = rawSearch.replace('?', '');
}
const query = querystring.parse(rawQueryString);
return query;
}
catch (error) {
return {};
}
}
exports.toQueryString = toQueryString;
async function toRequestInfo(request) {
const requestInfo = {
url: request.url(),
queryString: toQueryString(request.url()),
method: request.method(),
error: request.failure(),
headers: request.headers(),
postData: toJsonOrDefault(request.postData()),
response: null,
};
const response = await request.response();
if (response === null) {
return requestInfo;
}
let responseBody = undefined;
try {
responseBody = await toJsonOrText(response);
}
catch (error) {
// ignore error
}
const responseInfo = {
headers: response.headers(),
payload: responseBody,
status: response.status(),
statusText: response.statusText(),
};
requestInfo.response = responseInfo;
return requestInfo;
}
exports.toRequestInfo = toRequestInfo;
async function stringifyRequest(request) {
const requestInfo = await toRequestInfo(request);
const result = JSON.stringify(requestInfo, null, 2);
return result;
}
exports.stringifyRequest = stringifyRequest;
;