127 lines
3.6 KiB
JavaScript
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
|