UNPKG

next

Version:

The React Framework

127 lines (126 loc) 3.72 kB
"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