import { type CacheDirContext } from "./cacheDir.js";
import { type Logger, type SpawnFn } from "./loader.js";
import { type BrowserAssetName, type BrowserDeps } from "./browsers.js";
export type InstallAction = "installed" | "updated" | "already-up-to-date" | "forced" | "dry-run";
export interface InstallReport {
    assetId: string;
    kind: "npm" | "browser";
    action: InstallAction;
    installedVersion?: string;
    notes?: string[];
}
export interface InstallerDeps {
    logger?: Logger;
    spawn?: SpawnFn;
    browserDeps?: BrowserDeps;
}
export interface InstallRuntimeOptions {
    packages?: string[];
    ctx?: CacheDirContext;
    deps?: InstallerDeps;
    force?: boolean;
    dryRun?: boolean;
}
/**
 * Install the heavy npm packages into <cacheDir>/runtime. With no
 * `packages` filter, installs the full HEAVY_NPM_DEPS set. Returns one
 * structured report per package — the action describes whether the install
 * actually fired or whether the package was already current.
 */
export declare function installRuntime(options?: InstallRuntimeOptions): Promise<InstallReport[]>;
export interface InstallBrowsersOptions {
    names?: BrowserAssetName[];
    ctx?: CacheDirContext;
    deps?: InstallerDeps;
    force?: boolean;
    dryRun?: boolean;
}
/**
 * Install (or refresh) browser assets into <cacheDir>/browsers. Without
 * `names`, installs every supported asset.
 */
export declare function installBrowsers(options?: InstallBrowsersOptions): Promise<InstallReport[]>;
export interface StatusRow {
    assetId: string;
    kind: "npm" | "browser";
    installed: boolean;
    installedVersion?: string;
    expectedVersion?: string;
    latestKnownVersion?: string;
    outdated: boolean;
}
/**
 * Diff what's recorded in <cacheDir>/installed.json against the shim's
 * declared expectations (`package.json#optionalDependencies` for npm deps,
 * `latestKnownVersion` from the cache for browsers). The semver-range
 * check used here lives in `heavyDeps.ts` and is shared with the lazy
 * installer so both code paths see "satisfies the declared constraint"
 * the same way.
 */
export declare function status(ctx?: CacheDirContext): StatusRow[];
//# sourceMappingURL=installer.d.ts.map