import type { RoutesList } from '../../types/astro.js'; import type { RemotePattern, RouteData } from '../../types/public/index.js'; import { type Pipeline } from '../base-pipeline.js'; import { getSetCookiesFromResponse } from '../cookies/index.js'; import { AstroIntegrationLogger, type AstroLogger } from '../logger/core.js'; import type { FetchHandler } from '../fetch/types.js'; import type { ErrorHandler } from '../errors/handler.js'; import type { WaitUntilHook } from '../wait-until.js'; import type { AppPipeline } from './pipeline.js'; import type { SSRManifest } from './types.js'; export interface DevMatch { routeData: RouteData; resolvedPathname: string; } export interface RenderOptions { /** * Whether to automatically add all cookies written by `Astro.cookie.set()` to the response headers. * * When set to `true`, they will be added to the `Set-Cookie` header as comma-separated key=value pairs. You can use the standard `response.headers.getSetCookie()` API to read them individually. * * When set to `false`, the cookies will only be available from `App.getSetCookieFromResponse(response)`. * * @default {false} */ addCookieHeader?: boolean; /** * The client IP address that will be made available as `Astro.clientAddress` in pages, and as `ctx.clientAddress` in API routes and middleware. * * Default: `request[Symbol.for("astro.clientAddress")]` */ clientAddress?: string; /** * The mutable object that will be made available as `Astro.locals` in pages, and as `ctx.locals` in API routes and middleware. */ locals?: object; /** * A custom fetch function for retrieving prerendered pages - 404 or 500. * * If not provided, Astro will fall back to its default behavior for fetching error pages. * * When a dynamic route is matched but ultimately results in a 404, this function will be used * to fetch the prerendered 404 page if available. Similarly, it may be used to fetch a * prerendered 500 error page when necessary. * * @param {ErrorPagePath} url - The URL of the prerendered 404 or 500 error page to fetch. * @returns {Promise} A promise resolving to the prerendered response. */ prerenderedErrorPageFetch?: (url: ErrorPagePath) => Promise; /** * Optional platform hook to keep background work alive after the response is sent. * * Adapters can pass this through so runtime cache providers can schedule cache writes * without blocking the response path. */ waitUntil?: WaitUntilHook; /** * **Advanced API**: you probably do not need to use this. * * Default: `app.match(request)` */ routeData?: RouteData; } type RequiredRenderOptions = Required; export interface ResolvedRenderOptions { addCookieHeader: RequiredRenderOptions['addCookieHeader']; clientAddress: RequiredRenderOptions['clientAddress'] | undefined; prerenderedErrorPageFetch: RequiredRenderOptions['prerenderedErrorPageFetch'] | undefined; locals: RequiredRenderOptions['locals'] | undefined; routeData: RequiredRenderOptions['routeData'] | undefined; waitUntil: RequiredRenderOptions['waitUntil'] | undefined; } export interface RenderErrorOptions extends ResolvedRenderOptions { response?: Response; status: 404 | 500; /** * Whether to skip middleware while rendering the error page. Defaults to false. */ skipMiddleware?: boolean; /** * Allows passing an error to 500.astro. It will be available through `Astro.props.error`. */ error?: unknown; /** * The pathname to use for the error page render context. If omitted, the * error handler computes it from `request` via a short-lived `FetchState`. */ pathname?: string; } type ErrorPagePath = `${string}/404` | `${string}/500` | `${string}/404/` | `${string}/500/` | `${string}404.html` | `${string}500.html`; export declare abstract class BaseApp

{ #private; manifest: SSRManifest; manifestData: { routes: RouteData[]; }; pipeline: P; baseWithoutTrailingSlash: string; get logger(): AstroLogger; get adapterLogger(): AstroIntegrationLogger; constructor(manifest: SSRManifest, streaming?: boolean, ...args: any[]); /** * Override the fetch handler used to dispatch requests. Entrypoints * call this with the default export of `virtual:astro:fetchable` to * plug in a user-authored handler from `src/app.ts`. */ setFetchHandler(handler: { fetch: FetchHandler; }): void; /** * Returns the error handler strategy used by this app. Override to * provide environment-specific behavior (dev overlay, build-time throws, etc.). */ protected createErrorHandler(): ErrorHandler; abstract isDev(): boolean; /** * Resets the cached adapter logger so it picks up a new logger instance. * Used by BuildApp when the logger is replaced via setOptions(). */ protected resetAdapterLogger(): void; getAllowedDomains(): Partial[] | undefined; protected matchesAllowedDomains(forwardedHost: string, protocol?: string): boolean; static validateForwardedHost(forwardedHost: string, allowedDomains?: Partial[], protocol?: string): boolean; /** * Creates a pipeline by reading the stored manifest * * @param streaming * @param manifest * @param args * @private */ abstract createPipeline(streaming: boolean, manifest: SSRManifest, ...args: any[]): P; set setManifestData(newManifestData: RoutesList); removeBase(pathname: string): string; /** * Extracts the base-stripped, decoded pathname from a request. * Used by adapters to compute the pathname for dev-mode route matching. */ getPathnameFromRequest(request: Request): string; /** * Given a `Request`, it returns the `RouteData` that matches its `pathname`. By default, prerendered * routes aren't returned, even if they are matched. * * When `allowPrerenderedRoutes` is `true`, the function returns matched prerendered routes too. * @param request * @param allowPrerenderedRoutes */ match(request: Request, allowPrerenderedRoutes?: boolean): RouteData | undefined; /** * A matching route function to use in the development server. * Contrary to the `.match` function, this function resolves props and params, returning the correct * route based on the priority, segments. It also returns the correct, resolved pathname. * @param pathname */ devMatch(pathname?: string): Promise | undefined; private computePathnameFromDomain; render(request: Request, { addCookieHeader, clientAddress, locals, prerenderedErrorPageFetch, routeData, waitUntil, }?: RenderOptions): Promise; setCookieHeaders(response: Response): Generator; /** * Reads all the cookies written by `Astro.cookie.set()` onto the passed response. * For example, * ```ts * for (const cookie_ of App.getSetCookieFromResponse(response)) { * const cookie: string = cookie_ * } * ``` * @param response The response to read cookies from. * @returns An iterator that yields key-value pairs as equal-sign-separated strings. */ static getSetCookieFromResponse: typeof getSetCookiesFromResponse; /** * If it is a known error code, try sending the according page (e.g. 404.astro / 500.astro). * This also handles pre-rendered /404 or /500 routes. * * Delegates to the app's configured `ErrorHandler`. To customize behavior * for a specific environment, override `createErrorHandler()` rather than * this method. */ renderError(request: Request, options: RenderErrorOptions): Promise; getDefaultStatusCode(routeData: RouteData, pathname: string): number; getManifest(): SSRManifest; logThisRequest({ pathname, method, statusCode, isRewrite, timeStart, }: { pathname: string; method: string; statusCode: number; isRewrite: boolean; timeStart: number; }): void; abstract logRequest(_options: LogRequestPayload): void; } export type LogRequestPayload = { /** * The current path being rendered */ pathname: string; /** * The method of the request */ method: string; /** * The status code of the request */ statusCode: number; /** * If the current request is a rewrite */ isRewrite: boolean; /** * How long it took to render the request */ reqTime: number; }; export {};