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
|