import { CommandInitPhase, Option } from "clify.js";
import type { Config } from "../config/config-type";
import type { AppResources } from "../utils/app-resources";
import { EnvVars } from "../utils/env-vars";
import { ESBuild } from "../utils/esbuild";
import type { AdditionalPlugins } from "../utils/get-plugins";
export type DeepReadonly<T> = {
    readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];
};
export declare abstract class Program {
    type: "build" | "bundle" | "init" | "start";
    envs: EnvVars;
    config: DeepReadonly<Config>;
    cwd: string;
    resources?: AppResources;
    esbuildCtx: ESBuild;
    readonly args: {
        watch: Option<"boolean", false>;
        mode: Option<"string", true>;
    };
    constructor(init: CommandInitPhase);
    get isDev(): boolean;
    get watchMode(): boolean;
    get appName(): string;
    get appID(): string;
    abstract additionalPlugins(): AdditionalPlugins;
    private populateDefaultEnvVars;
    protected afterBuild?(): void;
    runWith(args: {
        watch?: boolean;
        mode?: "development" | "production";
    }, config: Config, workingDir?: string): Promise<any>;
}
