import { ParallelConfig } from "../commands/parallel";
import { TransformConfig } from "../commands/transform";
import { AbsolutePath } from "../utils/path";
import { ReleaseConfig } from "../commands/release";
import { Locale } from "./common";
import { DeepPartial } from "./types";
import { LogConfig } from "./log";
import { DeepReadonly } from "ts-essentials";
import { CommitConfig } from "./../commands/commit/config";
export type UserConfig = {
    root: string;
    locale: Locale;
    configFileResolvedPath?: string;
    tempDir: string;
    log: LogConfig;
    catch: (error: any) => void;
    transform: TransformConfig;
    parallel: ParallelConfig;
    release: ReleaseConfig;
    commit: CommitConfig;
};
export type FinalUserConfig = DeepReadonly<UserConfig>;
export type UserConfigOptional = DeepPartial<Omit<UserConfig, "configFileResolvedPath">>;
export declare const useDefaultConfig: () => UserConfig;
export declare const defineUserConfig: (config: UserConfigOptional) => UserConfigOptional;
export declare const resolveUserConfig: (options: {
    root: AbsolutePath;
    filePath?: string;
    locale: Locale;
}) => Promise<(UserConfigOptional & {
    configFileResolvedPath: string;
}) | undefined>;
export declare function loadUserConfigFromFile(absoluteFilePath: AbsolutePath): Promise<(UserConfigOptional & {
    configFileResolvedPath: string;
}) | undefined>;
export declare const mergeDefaultConfig: (userConfig?: UserConfigOptional) => UserConfig;
export declare const mergeConfig: <T, D extends DeepPartial<T>>(defaults: T, overrides: D) => T;
export declare const deepFreezeConfig: (userConfig: UserConfig) => FinalUserConfig;
