import { Channel } from '@bscotch/gamemaker-releases';
import { Pathy } from '@bscotch/pathy';
import { GameMakerChannel, GameMakerInstalledVersion } from './GameMakerLauncher.types.js';
import { GameMakerUser } from './GameMakerUser.js';
export declare class GameMakerComponent {
    protected info: GameMakerInstalledVersion;
    constructor(info: GameMakerInstalledVersion);
    get version(): string;
    get channel(): "lts" | "stable" | "beta" | "unstable" | undefined;
    get executablePath(): Pathy<unknown>;
    get directory(): Pathy<unknown>;
    get publishedAt(): Date | undefined;
    get usersDirectory(): Pathy<unknown>;
    activeUser(): Promise<GameMakerUser>;
    activeUserDirectory(): Promise<Pathy<unknown>>;
    /**
     * List paths to important files and directories.
     */
    static listWellKnownPaths(options?: {
        programFiles?: string;
    }): Promise<{
        id: "gameMakerDataDir" | "defaultMacrosFile" | "runtimeFeedsConfigFile" | "initialDefaultMacrosFile" | "runtimesCacheDir" | "gameMakerIdeDir" | "gameMakerIdeExe" | "gameMakerUserDir" | "activeUserFile" | "uiLogFile" | "activeRuntimeConfigFile";
        path: string;
        name: string;
        description: string;
    }[]>;
    static get releasesCachePath(): Pathy<{
        channel: "lts" | "stable" | "beta" | "unstable";
        publishedAt: string;
        summary: string;
        ide: {
            channel: "lts" | "stable" | "beta" | "unstable";
            type: "runtime" | "ide";
            version: string;
            feedUrl: string;
            publishedAt: string;
            notesUrl: string;
            notes: {
                since: string | null;
                groups: {
                    title: string;
                    changes: string[];
                }[];
            };
            link?: string | undefined;
        };
        runtime: {
            channel: "lts" | "stable" | "beta" | "unstable";
            type: "runtime" | "ide";
            version: string;
            feedUrl: string;
            publishedAt: string;
            notesUrl: string;
            notes: {
                since: string | null;
                groups: {
                    title: string;
                    changes: string[];
                }[];
            };
            link?: string | undefined;
        };
    }[]>;
    static listReleases(options?: {
        /** Max age of the cached releases list */
        maxAgeSeconds?: number;
    }): Promise<{
        channel: "lts" | "stable" | "beta" | "unstable";
        publishedAt: string;
        summary: string;
        ide: {
            channel: "lts" | "stable" | "beta" | "unstable";
            type: "runtime" | "ide";
            version: string;
            feedUrl: string;
            publishedAt: string;
            notesUrl: string;
            notes: {
                since: string | null;
                groups: {
                    title: string;
                    changes: string[];
                }[];
            };
            link?: string | undefined;
        };
        runtime: {
            channel: "lts" | "stable" | "beta" | "unstable";
            type: "runtime" | "ide";
            version: string;
            feedUrl: string;
            publishedAt: string;
            notesUrl: string;
            notes: {
                since: string | null;
                groups: {
                    title: string;
                    changes: string[];
                }[];
            };
            link?: string | undefined;
        };
    }[]>;
    static findRelease(searchOptions: {
        ideVersion?: string;
        runtimeVersion?: string;
        maxAgeSeconds?: number;
    }): Promise<{
        channel: "lts" | "stable" | "beta" | "unstable";
        publishedAt: string;
        summary: string;
        ide: {
            channel: "lts" | "stable" | "beta" | "unstable";
            type: "runtime" | "ide";
            version: string;
            feedUrl: string;
            publishedAt: string;
            notesUrl: string;
            notes: {
                since: string | null;
                groups: {
                    title: string;
                    changes: string[];
                }[];
            };
            link?: string | undefined;
        };
        runtime: {
            channel: "lts" | "stable" | "beta" | "unstable";
            type: "runtime" | "ide";
            version: string;
            feedUrl: string;
            publishedAt: string;
            notesUrl: string;
            notes: {
                since: string | null;
                groups: {
                    title: string;
                    changes: string[];
                }[];
            };
            link?: string | undefined;
        };
    } | undefined>;
    static get userDirectories(): {
        [Channel in GameMakerChannel]: string;
    };
    static get cacheDir(): Pathy;
    /**
     * Ensure that all official runtime feeds are available to the user
     * by adding missing feeds to the appropriate GameMaker configs.
     */
    static ensureOfficialRuntimeFeeds(channels?: Channel[]): Promise<void>;
}
//# sourceMappingURL=GameMakerComponent.d.ts.map