Initial boiler plate project
This commit is contained in:
133
node_modules/next/dist/experimental/testmode/fetch.js
generated
vendored
Normal file
133
node_modules/next/dist/experimental/testmode/fetch.js
generated
vendored
Normal file
@ -0,0 +1,133 @@
|
||||
"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");
|
||||
// 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 new Error(`Proxy request failed: ${resp.status}`);
|
||||
}
|
||||
const proxyResponse = await resp.json();
|
||||
const { api } = proxyResponse;
|
||||
switch(api){
|
||||
case "continue":
|
||||
return originalFetch(request);
|
||||
case "abort":
|
||||
case "unhandled":
|
||||
throw new Error(`Proxy request aborted [${request.method} ${request.url}]`);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return buildResponse(proxyResponse);
|
||||
}
|
||||
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
|
||||
Reference in New Issue
Block a user