import type * as vite from 'vite';
import type { AstroLogger } from '../core/logger/core.js';
import type { AstroSettings } from '../types/astro.js';
/**
 * Outcome of the base-URL evaluation for a dev-server request.
 *
 * - **`rewrite`** — The request URL is the configured `base` path or lies
 *   under it at a path-segment boundary. Strip the base prefix so downstream
 *   handlers see a root-relative URL (e.g. `/docs/about` → `/about` when
 *   `base: '/docs'`).
 * - **`not-found-subpath`** — The user navigated to `/` or `/index.html` but
 *   the project has a non-root `base`. Respond with a 404 explaining that the
 *   site lives under the base path, so the developer knows to update the URL.
 * - **`not-found`** — The URL doesn't start with the base and the browser
 *   expects HTML (`Accept: text/html`). Respond with a generic 404 page.
 * - **`check-public`** — The URL doesn't match the base and the browser is
 *   requesting a non-HTML asset (image, script, font, etc.). The middleware
 *   must do an async `fs.stat` to decide whether the file exists in
 *   `publicDir` (and show a helpful base-path hint) or just pass through.
 *   This variant cannot be resolved purely.
 */
export type BaseRewriteDecision = {
    action: 'rewrite';
    newUrl: string;
} | {
    action: 'not-found-subpath';
    pathname: string;
    devRoot: string;
} | {
    action: 'not-found';
    pathname: string;
} | {
    action: 'check-public';
};
/**
 * Computes the `devRoot` path used to match and strip the base prefix.
 *
 * The `devRoot` is the pathname portion of the base URL (resolved against the
 * `site` if present, otherwise against `http://localhost`). For example:
 * - `base: '/docs'`, no site → `/docs`
 * - `base: '/docs'`, `site: 'https://example.com'` → `/docs`
 * - `base: '/'` → `/`
 */
export declare function resolveDevRoot(base: string, site?: string): {
    devRoot: string;
    devRootReplacement: string;
};
/**
 * Pure decision function for base-URL dev-server rewriting.
 *
 * Evaluates whether the incoming `url` is the project's `base` path or lies
 * under it at a path-segment boundary, and returns the action the middleware
 * should take. The async `fs.stat` branch (checking `publicDir`) is
 * represented as `check-public` and must be handled by the caller.
 */
export declare function evaluateBaseRewrite(url: string, pathname: string, acceptHeader: string | undefined, devRoot: string, devRootReplacement: string): BaseRewriteDecision;
export declare function baseMiddleware(settings: AstroSettings, logger: AstroLogger): vite.Connect.NextHandleFunction;
