123 lines
4.1 KiB
Plaintext
123 lines
4.1 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "proxyRequest", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return proxyRequest;
|
|
}
|
|
});
|
|
const _cookies = require("next/dist/compiled/@edge-runtime/cookies");
|
|
const _nexturl = require("../../../../web/next-url");
|
|
const _cleanurl = require("./clean-url");
|
|
function proxyRequest(request, { dynamic }, hooks) {
|
|
function handleNextUrlBailout(prop) {
|
|
switch(prop){
|
|
case "search":
|
|
case "searchParams":
|
|
case "toString":
|
|
case "href":
|
|
case "origin":
|
|
hooks.staticGenerationBailout(`nextUrl.${prop}`);
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
const cache = {};
|
|
const handleForceStatic = (url, prop)=>{
|
|
switch(prop){
|
|
case "search":
|
|
return "";
|
|
case "searchParams":
|
|
if (!cache.searchParams) cache.searchParams = new URLSearchParams();
|
|
return cache.searchParams;
|
|
case "url":
|
|
case "href":
|
|
if (!cache.url) cache.url = (0, _cleanurl.cleanURL)(url);
|
|
return cache.url;
|
|
case "toJSON":
|
|
case "toString":
|
|
if (!cache.url) cache.url = (0, _cleanurl.cleanURL)(url);
|
|
if (!cache.toString) cache.toString = ()=>cache.url;
|
|
return cache.toString;
|
|
case "headers":
|
|
if (!cache.headers) cache.headers = new Headers();
|
|
return cache.headers;
|
|
case "cookies":
|
|
if (!cache.headers) cache.headers = new Headers();
|
|
if (!cache.cookies) cache.cookies = new _cookies.RequestCookies(cache.headers);
|
|
return cache.cookies;
|
|
case "clone":
|
|
if (!cache.url) cache.url = (0, _cleanurl.cleanURL)(url);
|
|
return ()=>new _nexturl.NextURL(cache.url);
|
|
default:
|
|
break;
|
|
}
|
|
};
|
|
const wrappedNextUrl = new Proxy(request.nextUrl, {
|
|
get (target, prop) {
|
|
handleNextUrlBailout(prop);
|
|
if (dynamic === "force-static" && typeof prop === "string") {
|
|
const result = handleForceStatic(target.href, prop);
|
|
if (result !== undefined) return result;
|
|
}
|
|
const value = target[prop];
|
|
if (typeof value === "function") {
|
|
return value.bind(target);
|
|
}
|
|
return value;
|
|
},
|
|
set (target, prop, value) {
|
|
handleNextUrlBailout(prop);
|
|
target[prop] = value;
|
|
return true;
|
|
}
|
|
});
|
|
const handleReqBailout = (prop)=>{
|
|
switch(prop){
|
|
case "headers":
|
|
hooks.headerHooks.headers();
|
|
return;
|
|
// if request.url is accessed directly instead of
|
|
// request.nextUrl we bail since it includes query
|
|
// values that can be relied on dynamically
|
|
case "url":
|
|
case "body":
|
|
case "blob":
|
|
case "json":
|
|
case "text":
|
|
case "arrayBuffer":
|
|
case "formData":
|
|
hooks.staticGenerationBailout(`request.${prop}`);
|
|
return;
|
|
default:
|
|
return;
|
|
}
|
|
};
|
|
return new Proxy(request, {
|
|
get (target, prop) {
|
|
handleReqBailout(prop);
|
|
if (prop === "nextUrl") {
|
|
return wrappedNextUrl;
|
|
}
|
|
if (dynamic === "force-static" && typeof prop === "string") {
|
|
const result = handleForceStatic(target.url, prop);
|
|
if (result !== undefined) return result;
|
|
}
|
|
const value = target[prop];
|
|
if (typeof value === "function") {
|
|
return value.bind(target);
|
|
}
|
|
return value;
|
|
},
|
|
set (target, prop, value) {
|
|
handleReqBailout(prop);
|
|
target[prop] = value;
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
//# sourceMappingURL=proxy-request.js.map |