next
Version:
The React Framework
127 lines (126 loc) • 3.72 kB
JavaScript
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
;