import { ParallelConfig } from "../commands/parallel/index.cts";
import { TransformConfig } from "../commands/transform/index.cts";
import { AbsolutePath } from "../utils/path.cts";
import { ReleaseConfig } from "../commands/release/index.cts";
import { Locale } from "./common.cts";
import { DeepPartial } from "./types.cts";
import { LogConfig } from "./log.cts";
import { DeepReadonly } from "ts-essentials";
import { CommitConfig } from "./../commands/commit/config.cts";
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;