securityos/node_modules/next/dist/experimental/testmode/playwright/report.js

127 lines
3.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "reportFetch", {
enumerable: true,
get: function() {
return reportFetch;
}
});
const _step = require("./step");
async function parseBody(r) {
const contentType = r.headers.get("content-type");
let error;
let text;
let json;
let formData;
let buffer;
if (contentType == null ? void 0 : contentType.includes("text")) {
try {
text = await r.text();
} catch (e) {
error = "failed to parse text";
}
} else if (contentType == null ? void 0 : contentType.includes("json")) {
try {
json = await r.json();
} catch (e) {
error = "failed to parse json";
}
} else if (contentType == null ? void 0 : contentType.includes("form-data")) {
try {
formData = await r.formData();
} catch (e) {
error = "failed to parse formData";
}
} else {
try {
buffer = await r.arrayBuffer();
} catch (e) {
error = "failed to parse arrayBuffer";
}
}
return {
...error ? {
error
} : null,
...text ? {
text
} : null,
...json ? {
json: JSON.stringify(json)
} : null,
...formData ? {
formData: JSON.stringify(Array.from(formData))
} : null,
...buffer && buffer.byteLength > 0 ? {
buffer: `base64;${Buffer.from(buffer).toString("base64")}`
} : null
};
}
function parseHeaders(headers) {
return Object.fromEntries(Array.from(headers).sort(([key1], [key2])=>key1.localeCompare(key2)).map(([key, value])=>{
return [
`header.${key}`,
value
];
}));
}
async function reportFetch(testInfo, req, handler) {
return (0, _step.step)(testInfo, {
title: `next.onFetch: ${req.method} ${req.url}`,
category: "next.onFetch",
apiName: "next.onFetch",
params: {
method: req.method,
url: req.url,
...await parseBody(req.clone()),
...parseHeaders(req.headers)
}
}, async (complete)=>{
const res = await handler(req);
if (res === undefined || res == null) {
complete({
error: {
message: "unhandled"
}
});
} else if (typeof res === "string" && res !== "continue") {
complete({
error: {
message: res
}
});
} else {
let body;
if (typeof res === "string") {
body = {
response: res
};
} else {
const { status, statusText } = res;
body = {
status,
...statusText ? {
statusText
} : null,
...await parseBody(res.clone()),
...parseHeaders(res.headers)
};
}
await (0, _step.step)(testInfo, {
title: `next.onFetch.fulfilled: ${req.method} ${req.url}`,
category: "next.onFetch",
apiName: "next.onFetch.fulfilled",
params: {
...body,
"request.url": req.url,
"request.method": req.method
}
}, async ()=>undefined).catch(()=>undefined);
}
return res;
});
}
//# sourceMappingURL=report.js.map