import { readConfigFileSnapshotForWrite, type ConfigWriteOptions, type ConfigWriteResult } from "./io.js"; import { type ConfigWriteAfterWrite, type ConfigWriteFollowUp } from "./runtime-snapshot.js"; import type { ConfigFileSnapshot, KlawConfig } from "./types.js"; export type ConfigMutationBase = "runtime" | "source"; export declare class ConfigMutationConflictError extends Error { readonly currentHash: string | null; constructor(message: string, params: { currentHash: string | null; }); } export type ConfigReplaceResult = { path: string; previousHash: string | null; snapshot: ConfigFileSnapshot; nextConfig: KlawConfig; persistedHash: string | null; afterWrite: ConfigWriteAfterWrite; followUp: ConfigWriteFollowUp; }; export type ConfigMutationIO = { readConfigFileSnapshotForWrite: typeof readConfigFileSnapshotForWrite; writeConfigFile: (cfg: KlawConfig, options?: ConfigWriteOptions) => Promise; }; export type ConfigMutationContext = { snapshot: ConfigFileSnapshot; previousHash: string | null; attempt: number; }; export type ConfigTransformResult = { nextConfig: KlawConfig; result?: T; }; export type ConfigMutationCommitParams = { nextConfig: KlawConfig; snapshot: ConfigFileSnapshot; baseHash?: string; writeOptions?: ConfigWriteOptions; afterWrite: ConfigWriteAfterWrite; io?: ConfigMutationIO; }; export type ConfigMutationCommitResult = { config: KlawConfig; persistedHash: string | null; afterWrite?: ConfigWriteAfterWrite; }; export type ConfigMutationCommit = (params: ConfigMutationCommitParams) => Promise; export type TransformConfigFileParams = { base?: ConfigMutationBase; baseHash?: string; afterWrite?: ConfigWriteOptions["afterWrite"]; writeOptions?: ConfigWriteOptions; io?: ConfigMutationIO; commit?: ConfigMutationCommit; transform: (currentConfig: KlawConfig, context: ConfigMutationContext) => Promise> | ConfigTransformResult; }; export type TransformConfigFileWithRetryParams = TransformConfigFileParams & { maxAttempts?: number; }; export type ConfigMutationResult = ConfigReplaceResult & { result: T | undefined; attempts: number; }; export declare function replaceConfigFile(params: { nextConfig: KlawConfig; baseHash?: string; snapshot?: ConfigFileSnapshot; afterWrite?: ConfigWriteOptions["afterWrite"]; writeOptions?: ConfigWriteOptions; io?: ConfigMutationIO; }): Promise; export declare function transformConfigFile(params: TransformConfigFileParams): Promise>; export declare function transformConfigFileWithRetry(params: TransformConfigFileWithRetryParams): Promise>; export declare function mutateConfigFile(params: { base?: ConfigMutationBase; baseHash?: string; afterWrite?: ConfigWriteOptions["afterWrite"]; writeOptions?: ConfigWriteOptions; io?: ConfigMutationIO; mutate: (draft: KlawConfig, context: ConfigMutationContext) => Promise | T | void; }): Promise>; export declare function mutateConfigFileWithRetry(params: { base?: ConfigMutationBase; baseHash?: string; maxAttempts?: number; afterWrite?: ConfigWriteOptions["afterWrite"]; writeOptions?: ConfigWriteOptions; io?: ConfigMutationIO; mutate: (draft: KlawConfig, context: ConfigMutationContext) => Promise | T | void; }): Promise>;