Spaces:
Running
Running
| ; | |
| 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'); | |
| // Skip the first line and find first non-empty line. | |
| for(let i = 1; i < stack.length; i++){ | |
| if (stack[i].length > 0) { | |
| stack = stack.slice(i); | |
| break; | |
| } | |
| } | |
| // Filter out franmework lines. | |
| stack = stack.filter((f)=>!f.includes('/next/dist/')); | |
| // At most 5 lines. | |
| stack = stack.slice(0, 5); | |
| // Cleanup some internal info and trim. | |
| 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) { | |
| // Passthrough non-test requests. | |
| 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: { | |
| // @ts-ignore | |
| 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; | |
| // Passthrough internal requests. | |
| // @ts-ignore | |
| 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; | |
| }; | |
| } | |
| //# sourceMappingURL=fetch.js.map |