| "use strict"; |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| 0 && (module.exports = { |
| handleFetch: null, |
| interceptFetch: null, |
| reader: null |
| }); |
| function _export(target, all) { |
| for(var name in all)Object.defineProperty(target, name, { |
| enumerable: true, |
| get: all[name] |
| }); |
| } |
| _export(exports, { |
| handleFetch: function() { |
| return handleFetch; |
| }, |
| interceptFetch: function() { |
| return interceptFetch; |
| }, |
| reader: function() { |
| return reader; |
| } |
| }); |
| const _context = require("./context"); |
| const reader = { |
| url (req) { |
| return req.url; |
| }, |
| header (req, name) { |
| return req.headers.get(name); |
| } |
| }; |
| function getTestStack() { |
| let stack = (new Error().stack ?? '').split('\n'); |
| |
| for(let i = 1; i < stack.length; i++){ |
| if (stack[i].length > 0) { |
| stack = stack.slice(i); |
| break; |
| } |
| } |
| |
| stack = stack.filter((f)=>!f.includes('/next/dist/')); |
| |
| stack = stack.slice(0, 5); |
| |
| stack = stack.map((s)=>s.replace('webpack-internal:///(rsc)/', '').trim()); |
| return stack.join(' '); |
| } |
| async function buildProxyRequest(testData, request) { |
| const { url, method, headers, body, cache, credentials, integrity, mode, redirect, referrer, referrerPolicy } = request; |
| return { |
| testData, |
| api: 'fetch', |
| request: { |
| url, |
| method, |
| headers: [ |
| ...Array.from(headers), |
| [ |
| 'next-test-stack', |
| getTestStack() |
| ] |
| ], |
| body: body ? Buffer.from(await request.arrayBuffer()).toString('base64') : null, |
| cache, |
| credentials, |
| integrity, |
| mode, |
| redirect, |
| referrer, |
| referrerPolicy |
| } |
| }; |
| } |
| function buildResponse(proxyResponse) { |
| const { status, headers, body } = proxyResponse.response; |
| return new Response(body ? Buffer.from(body, 'base64') : null, { |
| status, |
| headers: new Headers(headers) |
| }); |
| } |
| async function handleFetch(originalFetch, request) { |
| const testInfo = (0, _context.getTestReqInfo)(request, reader); |
| if (!testInfo) { |
| |
| return originalFetch(request); |
| } |
| const { testData, proxyPort } = testInfo; |
| const proxyRequest = await buildProxyRequest(testData, request); |
| const resp = await originalFetch(`http://localhost:${proxyPort}`, { |
| method: 'POST', |
| body: JSON.stringify(proxyRequest), |
| next: { |
| |
| internal: true |
| } |
| }); |
| if (!resp.ok) { |
| throw Object.defineProperty(new Error(`Proxy request failed: ${resp.status}`), "__NEXT_ERROR_CODE", { |
| value: "E146", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| const proxyResponse = await resp.json(); |
| const { api } = proxyResponse; |
| switch(api){ |
| case 'continue': |
| return originalFetch(request); |
| case 'abort': |
| case 'unhandled': |
| throw Object.defineProperty(new Error(`Proxy request aborted [${request.method} ${request.url}]`), "__NEXT_ERROR_CODE", { |
| value: "E145", |
| enumerable: false, |
| configurable: true |
| }); |
| case 'fetch': |
| return buildResponse(proxyResponse); |
| default: |
| return api; |
| } |
| } |
| function interceptFetch(originalFetch) { |
| global.fetch = function testFetch(input, init) { |
| var _init_next; |
| |
| |
| if (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) { |
| return originalFetch(input, init); |
| } |
| return handleFetch(originalFetch, new Request(input, init)); |
| }; |
| return ()=>{ |
| global.fetch = originalFetch; |
| }; |
| } |
|
|
| |