| 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 { AppElementsWire } from "./app-elements-wire.js";
import "./app-elements.js";
import { ErrorBoundary } from "../shims/error-boundary.js";
import { LayoutSegmentProvider } from "../shims/layout-segment-context.js";
import { MetadataHead, ViewportHead } from "../shims/metadata.js";
import { createAppPageLayoutEntries } from "./app-page-route-wiring.js";
import { buildClientHookErrorMessage } from "../shims/client-hook-error.js";
import { resolveAppPageHead } from "./app-page-head.js";
import { renderAppPageBoundaryResponse, resolveAppPageErrorBoundary, resolveAppPageHttpAccessBoundaryComponent, wrapAppPageBoundaryElement } from "./app-page-boundary.js";
import { createAppPageFontData, renderAppPageHtmlResponse } from "./app-page-stream.js";
import { Fragment, createElement } from "react";
//#region src/server/app-page-boundary-render.ts
function getDefaultExport(module) {
return module?.default ?? null;
}
function wrapRenderedBoundaryElement(options) {
return wrapAppPageBoundaryElement({
element: options.element,
getDefaultExport,
globalErrorComponent: getDefaultExport(options.globalErrorModule),
includeGlobalErrorBoundary: options.includeGlobalErrorBoundary,
isRscRequest: options.isRscRequest,
layoutModules: options.layoutModules,
layoutTreePositions: options.layoutTreePositions,
makeThenableParams: options.makeThenableParams,
matchedParams: options.matchedParams,
renderErrorBoundary(GlobalErrorComponent, children) {
return createElement(ErrorBoundary, {
fallback: GlobalErrorComponent,
children
});
},
renderLayout(LayoutComponent, children, asyncParams) {
return createElement(LayoutComponent, {
children,
params: asyncParams
});
},
renderLayoutSegmentProvider(segmentMap, children) {
return createElement(LayoutSegmentProvider, { segmentMap }, children);
},
resolveChildSegments: options.resolveChildSegments,
routeSegments: options.routeSegments ?? [],
skipLayoutWrapping: options.skipLayoutWrapping
});
}
function createAppPageBoundaryLayoutEntries(route, layoutModules) {
if (!route || layoutModules.length === 0) return [];
return createAppPageLayoutEntries({
errors: route.errors,
layoutTreePositions: route.layoutTreePositions,
layouts: layoutModules,
notFounds: null,
routeSegments: route.routeSegments
});
}
function resolveHttpAccessFallbackHeadRouteSegments(route, layoutModules) {
if (!route?.routeSegments) return;
if (!route.layouts || layoutModules.length >= route.layouts.length) return route.routeSegments;
const lastIncludedLayoutIndex = layoutModules.length - 1;
if (lastIncludedLayoutIndex < 0) return [];
const segmentCount = route.layoutTreePositions?.[lastIncludedLayoutIndex] ?? 0;
return route.routeSegments.slice(0, segmentCount);
}
function resolveHttpAccessFallbackHeadLayoutTreePositions(route, layoutModules) {
if (!route?.layouts || layoutModules.length >= route.layouts.length) return route?.layoutTreePositions;
return route.layoutTreePositions?.slice(0, layoutModules.length);
}
function createAppPageBoundaryRscPayload(options) {
const routeId = AppElementsWire.encodeRouteId(options.pathname, null);
const layoutEntries = createAppPageBoundaryLayoutEntries(options.route, options.layoutModules);
return {
...AppElementsWire.createMetadataEntries({
interceptionContext: null,
layoutIds: layoutEntries.map((entry) => entry.id),
rootLayoutTreePath: layoutEntries[0]?.treePath ?? null,
routeId
}),
[routeId]: options.element
};
}
async function renderAppPageBoundaryElementResponse(options) {
const pathname = new URL(options.requestUrl).pathname;
return renderAppPageBoundaryResponse({
async createHtmlResponse(rscStream, responseStatus) {
const fontData = createAppPageFontData({
getLinks: options.getFontLinks,
getPreloads: options.getFontPreloads,
getStyles: options.getFontStyles
});
const ssrHandler = await options.loadSsrHandler();
return renderAppPageHtmlResponse({
clearRequestContext: options.clearRequestContext,
fontData,
fontLinkHeader: options.buildFontLinkHeader(fontData.preloads),
middlewareHeaders: options.middlewareContext.headers,
navigationContext: options.getNavigationContext(),
rscStream,
scriptNonce: options.scriptNonce,
ssrHandler,
status: responseStatus
});
},
createRscOnErrorHandler() {
return options.createRscOnErrorHandler(pathname, options.routePattern ?? pathname);
},
element: createAppPageBoundaryRscPayload({
element: options.element,
layoutModules: options.layoutModules,
pathname,
route: options.route
}),
isRscRequest: options.isRscRequest,
middlewareHeaders: options.middlewareContext.headers,
renderToReadableStream: options.renderToReadableStream,
status: options.status
});
}
async function renderAppPageHttpAccessFallback(options) {
const boundaryComponent = options.boundaryComponent ?? resolveAppPageHttpAccessBoundaryComponent({
getDefaultExport,
rootForbiddenModule: options.rootForbiddenModule,
rootNotFoundModule: options.rootNotFoundModule,
rootUnauthorizedModule: options.rootUnauthorizedModule,
routeForbiddenModule: options.route?.forbidden,
routeNotFoundModule: options.route?.notFound,
routeUnauthorizedModule: options.route?.unauthorized,
statusCode: options.statusCode
});
if (!boundaryComponent) return null;
const layoutModules = options.layoutModules ?? options.route?.layouts ?? options.rootLayouts;
const routeSegments = resolveHttpAccessFallbackHeadRouteSegments(options.route, layoutModules);
const { metadata, viewport } = await resolveAppPageHead({
layoutModules,
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route, layoutModules),
metadataRoutes: options.metadataRoutes,
params: options.matchedParams,
routePath: options.route?.pattern ?? new URL(options.requestUrl).pathname,
routeSegments
});
const headElements = [createElement("meta", {
charSet: "utf-8",
key: "charset"
}), createElement("meta", {
content: "noindex",
key: "robots",
name: "robots"
})];
if (metadata) headElements.push(createElement(MetadataHead, {
key: "metadata",
metadata
}));
headElements.push(createElement(ViewportHead, {
key: "viewport",
viewport
}));
const element = wrapRenderedBoundaryElement({
element: createElement(Fragment, null, ...headElements, createElement(boundaryComponent)),
globalErrorModule: options.globalErrorModule,
includeGlobalErrorBoundary: true,
isRscRequest: options.isRscRequest,
layoutModules,
layoutTreePositions: options.route?.layoutTreePositions,
makeThenableParams: options.makeThenableParams,
matchedParams: options.matchedParams,
resolveChildSegments: options.resolveChildSegments,
routeSegments: options.route?.routeSegments
});
return renderAppPageBoundaryElementResponse({
...options,
element,
layoutModules,
route: options.route,
routePattern: options.route?.pattern,
status: options.statusCode
});
}
async function renderAppPageErrorBoundary(options) {
const errorBoundary = resolveAppPageErrorBoundary({
getDefaultExport,
errorModules: options.route?.errorPaths,
globalErrorModule: options.globalErrorModule,
layoutErrorModules: options.route?.errors,
pageErrorModule: options.route?.error
});
if (!errorBoundary.component) return null;
const rawError = options.error instanceof Error ? options.error : new Error(String(options.error));
rewriteClientHookError(rawError);
const errorObject = options.sanitizeErrorForClient(rawError);
const matchedParams = options.matchedParams ?? options.route?.params ?? {};
const layoutModules = options.route?.layouts ?? options.rootLayouts;
const pathname = new URL(options.requestUrl).pathname;
const headElements = [createElement("meta", {
charSet: "utf-8",
key: "charset"
})];
if (!errorBoundary.isGlobalError) try {
const { metadata, viewport } = await resolveAppPageHead({
fallbackOnFileMetadataError: true,
layoutModules,
layoutTreePositions: options.route?.layoutTreePositions,
metadataRoutes: options.metadataRoutes,
params: matchedParams,
routePath: options.route?.pattern ?? pathname,
routeSegments: options.route?.routeSegments
});
if (metadata) headElements.push(createElement(MetadataHead, {
key: "metadata",
metadata
}));
headElements.push(createElement(ViewportHead, {
key: "viewport",
viewport
}));
} catch (error) {
console.error(`[vinext] App page error boundary head resolution failed for ${options.route?.pattern ?? pathname}:`, error);
}
const element = wrapRenderedBoundaryElement({
element: createElement(Fragment, null, ...headElements, createElement(errorBoundary.component, { error: errorObject })),
globalErrorModule: options.globalErrorModule,
includeGlobalErrorBoundary: !errorBoundary.isGlobalError,
isRscRequest: options.isRscRequest,
layoutModules,
layoutTreePositions: options.route?.layoutTreePositions,
makeThenableParams: options.makeThenableParams,
matchedParams,
resolveChildSegments: options.resolveChildSegments,
routeSegments: options.route?.routeSegments,
skipLayoutWrapping: errorBoundary.isGlobalError
});
return renderAppPageBoundaryElementResponse({
...options,
element,
layoutModules,
route: options.route,
routePattern: options.route?.pattern,
status: 200
});
}
const _clientHookPattern = /\b(useState|useEffect|useReducer|useRef|useContext|useLayoutEffect|useInsertionEffect|useSyncExternalStore|useTransition|useImperativeHandle|useDeferredValue|useActionState|useOptimistic|useEffectEvent)\b.*is not a function/;
function rewriteClientHookError(error) {
const match = error.message.match(_clientHookPattern);
if (match) error.message = buildClientHookErrorMessage(`${match[1]}()`);
}
//#endregion
export { renderAppPageErrorBoundary, renderAppPageHttpAccessFallback };
//# sourceMappingURL=app-page-boundary-render.js.map