playwright-fluent
Version:
Fluent API around playwright
63 lines (62 loc) • 2.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getHarResponseFor = exports.getHarEntryFor = exports.defaultHarEntryParserOptions = exports.areUrlEquals = exports.extractQueryStringObjectFromHarQueryString = void 0;
const url_1 = require("../url");
function extractQueryStringObjectFromHarQueryString(harQueryString) {
const result = {};
harQueryString.forEach((keyValue) => {
var _a;
if (keyValue.value) {
const params = new URLSearchParams(`${keyValue.name}=${keyValue.value}`);
result[keyValue.name] = (_a = params.get(keyValue.name)) !== null && _a !== void 0 ? _a : keyValue.value;
}
});
return result;
}
exports.extractQueryStringObjectFromHarQueryString = extractQueryStringObjectFromHarQueryString;
function areUrlEquals(url1, url2) {
return (0, url_1.urlToPath)(url1) === (0, url_1.urlToPath)(url2);
}
exports.areUrlEquals = areUrlEquals;
exports.defaultHarEntryParserOptions = {
areUrlEquals,
};
function getHarEntryFor(request, harData, options = exports.defaultHarEntryParserOptions) {
const entryOptions = {
...exports.defaultHarEntryParserOptions,
...options,
};
const httpMethod = request.method();
const url = request.url();
const entries = harData.log.entries
.filter((entry) => entry.request.method === httpMethod)
.filter((entry) => entryOptions.areUrlEquals(entry.request.url, url))
.filter((entry) => entry.response)
.filter((entry) => entry.response.status >= 200 && entry.response.status < 300);
const entriesWithSamePostData = entries.filter((entry) => {
var _a, _b;
return ((_a = entry.request.postData) === null || _a === void 0 ? void 0 : _a.text) === request.postData() ||
(request.postData() === null && ((_b = entry.request.postData) === null || _b === void 0 ? void 0 : _b.text) === undefined);
});
switch (httpMethod) {
case 'CONNECT':
case 'GET':
case 'HEAD':
case 'OPTIONS':
case 'TRACE':
return entries.pop();
case 'DELETE':
case 'PATCH':
case 'POST':
case 'PUT':
return entriesWithSamePostData.pop();
default:
throw new Error(`HAR-READER: the HTTP Method ${httpMethod} is not yet implemented`);
}
}
exports.getHarEntryFor = getHarEntryFor;
function getHarResponseFor(request, harData, options = exports.defaultHarEntryParserOptions) {
const harEntry = getHarEntryFor(request, harData, options);
return harEntry === null || harEntry === void 0 ? void 0 : harEntry.response;
}
exports.getHarResponseFor = getHarResponseFor;
;