/**
 * Client-side breakdown of the paths a `DESTRUCTIVE_SITE_BULK_REMOVAL`
 * warning lists in `affected`.
 *
 * The gateway counts every removed static path toward its bulk-removal
 * threshold. A framework rebuild renames every content-hashed bundle
 * (`_astro/Foo.Ds5BwtTY.js` → `_astro/Foo.<newhash>.js`), so a routine
 * redeploy can trip the warning without removing a single page. This
 * summary lets a reviewer tell the two cases apart without diffing
 * releases by hand. It is a heuristic and never changes whether the
 * warning blocks; the gateway stays authoritative.
 *
 * Current gateways already leave out removed fingerprinted bundles that
 * the build replaces in the same directory (`details.replaced_fingerprinted`),
 * so `affected` holds only the removals still counted; this summary then
 * splits those into pages and other files.
 */
import type { WarningEntry } from "./deploy.types.js";
export declare const SITE_BULK_REMOVAL_WARNING_CODE = "DESTRUCTIVE_SITE_BULK_REMOVAL";
export interface SiteRemovalSummary {
    /** Number of removed paths the warning listed. */
    total: number;
    /** Removed `.html` / `.htm` files — pages that stop being served. */
    pages: number;
    /** Removed files whose name carries a build content hash (bundler output). */
    content_hashed_build_assets: number;
    /** Removed files that are neither pages nor content-hashed build assets. */
    other: number;
    /** True when every removed path is a content-hashed build asset. */
    only_content_hashed_build_assets: boolean;
    /**
     * Removed path count per top-level directory (`"."` for root files).
     * Omitted when the gateway already sends `details.counted_removed_by_dir`.
     */
    by_top_level_dir?: Record<string, number>;
    /** Up to 20 removed page paths. */
    page_paths: string[];
    /** Up to 20 removed paths that are neither pages nor hashed assets. */
    other_paths: string[];
    confidence: "heuristic";
}
/**
 * A content hash is a `.`- or `-`-separated basename segment of at least
 * eight `[A-Za-z0-9_]` characters that contains a digit or mixes upper
 * and lower case (`Ds5BwtTY`, `CzEebLVq`, `a3f9c2e1`). Plain words such as
 * `component` or `profile` do not qualify.
 */
export declare function isContentHashedPath(path: string): boolean;
export declare function summarizeSiteRemoval(paths: readonly string[], opts?: {
    includeByTopLevelDir?: boolean;
}): SiteRemovalSummary;
/**
 * Adds `details.removed_paths_summary` to each bulk-removal warning that
 * lists its paths and does not already carry a summary. Other warnings
 * pass through untouched.
 */
export declare function withSiteRemovalSummaries(warnings: WarningEntry[]): WarningEntry[];
//# sourceMappingURL=site-removal-summary.d.ts.map