import { Pathy } from '@bscotch/pathy';
import { ChildProcess } from 'child_process';
import { GameMakerComponent } from './GameMakerComponent.js';
import type { GameMakerInstalledVersion } from './GameMakerLauncher.types.js';
import { TracedClass } from '@bscotch/utility/browser';
export interface GameMakerIde extends TracedClass {
}
export interface GameMakerIdeInstallOptions {
    /**
     * Specify a non-default program files directory
     * if your IDE installs do not go to the default.
     *
     * This is required if you've ever manually installed
     * GameMaker and chosen a non-default program files
     * root directory.
     *
     * @default process.env.PROGRAMFILES
     */
    programFiles?: string;
    /**
     * If true, the installer will be downloaded
     * and run even if it is already evailable
     */
    force?: boolean;
}
export declare class GameMakerRunningIde {
    readonly exePath: string;
    readonly projectYypPath: string;
    readonly runtimeVersion: string;
    protected process: ChildProcess;
    constructor(exePath: string, projectYypPath: string, runtimeVersion: string);
    waitForClose<T>(cb?: () => T): Promise<T>;
    close(): void;
}
export type GameMakerIdeErrorCode = 'LOGIN_REQUIRED' | 'RUNTIME_NOT_FOUND' | 'IDE_NOT_FOUND' | 'UNKNOWN';
export declare class GameMakerIdeError extends Error {
    readonly code: GameMakerIdeErrorCode;
    constructor(message: string, code: GameMakerIdeErrorCode);
}
export declare function assert(claim: any, message?: string, code?: GameMakerIdeErrorCode): asserts claim;
export declare class GameMakerIde extends GameMakerComponent {
    static readonly error: typeof GameMakerIdeError;
    constructor(info: GameMakerInstalledVersion);
    openProject(projectYypPath: string | Pathy, runtimeVersion?: string): Promise<GameMakerRunningIde>;
    /**
     * Each GameMaker IDE lists the runtime version
     * that it is paired with. In theory this is the
     * most-compatible runtime version.
     */
    pairedRuntimeVersion(): Promise<string>;
    /**
     * Install the specified IDE version. Only
     * one IDE version can be installed at a time
     * (per stable and beta channels), so this
     * may clobber the currently-installed IDE.
     *
     * If this version is already installed, no action
     * is taken. If this version's installer is already
     * downloaded, it will not be re-downloaded. If it
     * is *not* downloaded, then it will be downloaded.
     */
    static install(version: string, options?: GameMakerIdeInstallOptions): Promise<GameMakerIde>;
    static findInstalled(version: string): Promise<GameMakerIde | undefined>;
    static listInstalled(): Promise<GameMakerIde[]>;
    /**
     * Prevent the IDE from showing an update prompt on boot.
     */
    protected static disableUpdatePrompt(): Promise<void>;
    protected static findDirectlyInstalled(version: string, programFiles?: string): Promise<GameMakerIde | undefined>;
    /**
     * Check PROGRAMFILES for installed IDE versions. These are the result of running
     * the GameMaker IDE installers. The installed
     * content end up being separately cached by
     * Stitch to allow parallel installs
     * (see {@link listInstalled}).
     */
    protected static listDirectlyInstalled(programFiles?: string): Promise<GameMakerIde[]>;
    protected static listInstalledInDir(parentDir: string | Pathy): Promise<GameMakerIde[]>;
    /**
     * The parent folder inside of which all IDE
     * installs are cached in their own separate
     * folders. For the path to a specific IDE
     * version, use {@link cachedIdeDirectory}.
     */
    static get defaultCachedIdeParentDirectory(): Pathy<unknown>;
    static cachedIdeInstallerPath(version: string): Pathy<unknown>;
    static cachedIdeDirectory(version: string): Pathy<unknown>;
}
//# sourceMappingURL=GameMakerIde.d.ts.map