import { Pathy } from '@bscotch/pathy';
import { GameMakerDefaultMacros, GameMakerInstalledVersion, GameMakerLogOptions } from './GameMakerLauncher.types.js';
import { StitchSupportedBuilder } from './GameMakerRuntime.types.js';
import { Debugger } from '@bscotch/utility/browser';
import { z } from 'zod';
export declare const debug: Debugger;
export declare const trace: import("@bscotch/utility/browser").Decorator;
export type RuntimeFeedsFile = z.infer<typeof runtimeFeedsFileSchema>;
export declare const runtimeFeedsFileSchema: z.ZodArray<z.ZodObject<{
    Key: z.ZodString;
    Value: z.ZodString;
}, z.core.$strip>>;
export declare function createStaticTracer(className: string, methodName: string): Debugger;
export declare const bootstrapRuntimeVersion = "2022.300.0.476";
export declare const stitchConfigDir: Pathy<unknown>;
export declare const currentOs: string | undefined;
export declare const currentArchitecture: NodeJS.Architecture;
export declare function artifactExtensionForPlatform(platform: StitchSupportedBuilder): string;
/**
 * Given a .yyp filepath, or a directory that should
 * contain one, return the containing directory only.
 */
export declare function projectFolder(projectPath: string | Pathy): Pathy;
export declare function projectLogDirectory(project?: string | Pathy, options?: GameMakerLogOptions): Promise<Pathy<unknown>>;
/**
 * Sorts *in place*, descending (most recent date first).
 */
export declare function sortByDateField<F extends string, T extends Record<F, Date | undefined>>(entries: T[], dateField: F): T[];
export declare function downloadIfCacheExpired<T>(url: string, filePath: Pathy<T>, maxAgeInSeconds: number, logger?: Logger): Promise<void>;
export declare function cachedFileIsExpired(filePath: Pathy, maxAgeInSeconds: number): Promise<boolean>;
/**
 * Given a version string, ensure it has the correct
 * format for use by this package (4 dot-separated
 * numbers, without a leading 'v').
 */
export declare function cleanVersionString(version: string): string;
export declare function download(url: string, to: Pathy, options?: {
    force: boolean;
}): Promise<unknown>;
export declare function runIdeInstaller(idePath: Pathy): Promise<unknown>;
/**
 * Find the paths to all installed runtime versions.
 * Uses discovery plus some basic heuristics and smoke
 * tests to return paths that are likely to correspond
 * with valid runtime installations.
 *
 * These are stored in `$PROGRAMDATA/GameMakerStudio2(-(Beta|LTS))?/Cache/runtimes/*`
 */
export declare function listInstalledRuntimes(options?: {
    logger?: Logger;
}): Promise<Omit<GameMakerInstalledVersion, 'channel' | 'publishedAt' | 'feedUrl'>[]>;
/**
 * Set the active runtime by updating GameMaker's
 * program data files. This sets the active runtime
 * for *all* installed IDEs!
 */
export declare function setActiveRuntime(runtime: {
    version: string;
    directory: Pathy;
}): Promise<void>;
/**
 * Note that these paths are not populated by
 * default, so they may point to non-existent files.
 */
export declare function listDefaultMacrosPaths(): Promise<Pathy<GameMakerDefaultMacros>[]>;
export declare function listRuntimeFeedsConfigPaths(): Promise<Pathy<RuntimeFeedsFile>[]>;
/**
 * Find GameMaker's program data caches. These store
 * installed Runtimes, current IDE configuration info,
 * and other data.
 *
 * These currently correspond with
 * `$PROGRAMDATA/GameMakerStudio2(-(Beta|LTS))?/`
 */
export declare function listGameMakerDataDirs(): Promise<Pathy[]>;
export declare function listInstalledIdes(parentDir?: string | Pathy): Promise<Pathy<unknown>[]>;
export type Logger = {
    warn: (...args: any[]) => void;
    log: (...args: any[]) => void;
};
//# sourceMappingURL=utility.d.ts.map