import type { BuildSettings } from "./build-settings.ts";
import type { BuildStrategy } from "./build-strategy.ts";
import { type FrameworkBuildType } from "./config/frameworks.ts";
import type { BuildCommandIo } from "./workspace.ts";
/** A concrete framework build type, or `"auto"` to detect it. */
export type BuildType = FrameworkBuildType | "auto";
/**
 * Consumer hooks shared across `createBuildStrategy` / `resolveBuildStrategy`.
 * All optional: the CLI passes none, while a headless consumer injects build
 * `env`, taps output, and requires standalone Next output.
 */
export interface BuildStrategyHooks {
    /** Build `env` and per-line output tap, forwarded to the build command. */
    io?: BuildCommandIo;
    /** Fail instead of falling back to the full-tree Next `next start` artifact. */
    requireStandalone?: boolean;
}
/**
 * Constructs the build strategy for an explicit framework build type, wiring
 * through optional committed build settings and entrypoints for strategies
 * that need one.
 */
export declare function createBuildStrategy(options: {
    appPath: string;
    buildType: FrameworkBuildType;
    entrypoint?: string;
    buildSettings?: BuildSettings;
} & BuildStrategyHooks): BuildStrategy;
/**
 * Resolves the build strategy and the concrete build type for an app. With an
 * explicit `buildType` the matching strategy is returned directly; with
 * `"auto"` (or omitted) each framework is tried in detection order and the
 * first match wins, with bun as the fallback. Returning the resolved build
 * type lets a consumer report what it detected.
 */
export declare function resolveBuildStrategy(options: {
    appPath: string;
    buildType?: BuildType;
    entrypoint?: string;
    buildSettings?: BuildSettings;
    signal?: AbortSignal;
} & BuildStrategyHooks): Promise<{
    strategy: BuildStrategy;
    buildType: FrameworkBuildType;
}>;
//# sourceMappingURL=build.d.ts.map