| Server IP : 159.203.156.69 / Your IP : 216.73.217.172 Web Server : nginx/1.24.0 System : Linux main-ubuntu 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/tanviranik.com/node_modules/vinext/dist/server/ |
Upload File : |
import { notFoundResponse } from "./http-error-responses.js";
import { callAppPrerenderStaticParams } from "./app-prerender-static-params.js";
//#region src/server/app-prerender-endpoints.ts
const STATIC_PARAMS_ENDPOINT = "/__vinext/prerender/static-params";
const PAGES_STATIC_PATHS_ENDPOINT = "/__vinext/prerender/pages-static-paths";
const JSON_HEADERS = { "content-type": "application/json" };
async function handleAppPrerenderEndpoint(request, options) {
if (options.pathname === STATIC_PARAMS_ENDPOINT) return handleStaticParamsEndpoint(request, options);
if (options.pathname === PAGES_STATIC_PATHS_ENDPOINT) {
if (!options.loadPagesRoutes) return null;
return handlePagesStaticPathsEndpoint(request, options);
}
return null;
}
async function handleStaticParamsEndpoint(request, options) {
if (!isEnabled(options)) return notFoundResponse();
const url = new URL(request.url);
const pattern = url.searchParams.get("pattern");
if (!pattern) return new Response("missing pattern", { status: 400 });
const generateStaticParams = options.staticParamsMap[pattern];
if (typeof generateStaticParams !== "function") return jsonNullResponse();
try {
return jsonResponse(await callAppPrerenderStaticParams({
fn: generateStaticParams,
params: parseParentParams(url.searchParams.get("parentParams")),
pattern,
rootParamNamesByPattern: options.rootParamNamesByPattern ?? {}
}));
} catch (error) {
return jsonResponse({ error: String(error) }, 500);
}
}
async function handlePagesStaticPathsEndpoint(request, options) {
if (!isEnabled(options)) return notFoundResponse();
const url = new URL(request.url);
const pattern = url.searchParams.get("pattern");
if (!pattern) return new Response("missing pattern", { status: 400 });
try {
const getStaticPaths = findPageRoute(await options.loadPagesRoutes?.(), pattern)?.module?.getStaticPaths;
if (typeof getStaticPaths !== "function") return jsonNullResponse();
return jsonResponse(await getStaticPaths({
locales: parseLocales(url.searchParams.get("locales")),
defaultLocale: url.searchParams.get("defaultLocale") ?? ""
}));
} catch (error) {
return jsonResponse({ error: String(error) }, 500);
}
}
function isEnabled(options) {
return options.isPrerenderEnabled?.() ?? false;
}
function jsonResponse(body, status = 200) {
return new Response(JSON.stringify(body), {
headers: JSON_HEADERS,
status
});
}
function jsonNullResponse() {
return new Response("null", {
headers: JSON_HEADERS,
status: 200
});
}
function parseParentParams(raw) {
if (!raw) return {};
const value = JSON.parse(raw);
if (!isPlainObject(value)) return {};
const params = {};
for (const [key, paramValue] of Object.entries(value)) if (typeof paramValue === "string" || paramValue === void 0 || isStringArray(paramValue)) params[key] = paramValue;
return params;
}
function parseLocales(raw) {
if (!raw) return [];
const value = JSON.parse(raw);
if (!Array.isArray(value)) return [];
return value.filter((locale) => typeof locale === "string");
}
function findPageRoute(value, pattern) {
if (!Array.isArray(value)) return void 0;
for (const route of value) if (isPageRoute(route) && route.pattern === pattern) return route;
}
function isPageRoute(value) {
if (!isPlainObject(value) || typeof value.pattern !== "string") return false;
if (value.module === void 0) return true;
if (!isPlainObject(value.module)) return false;
return value.module.getStaticPaths === void 0 || typeof value.module.getStaticPaths === "function";
}
function isPlainObject(value) {
return typeof value === "object" && value !== null && !Array.isArray(value);
}
function isStringArray(value) {
return Array.isArray(value) && value.every((item) => typeof item === "string");
}
//#endregion
export { handleAppPrerenderEndpoint };
//# sourceMappingURL=app-prerender-endpoints.js.map