import { type ValidationLevel } from '../../../utils/config/validate-wave-config'; import type { CliFlagOptions, CliOptions, DeepReadonly, FrozenResolvedCliOptions, ResolvedCliOptions } from '../../../utils/config/cli-options'; import type { AppFunctionsBuildPlatform } from '../../../build/app-functions-build-platform'; import { type ResolvedConfigEntry } from '../../../utils/reporting/reported-config'; export declare const globalConfigModule: { /** * Initialize the config module: validate inputs, merge options, run post-merge * enrichment, and freeze the result. * Can only be called once. Subsequent calls will throw an error. * After calling, retrieve the config via {@link getConfig}. * @throws Error if already initialized */ init(argsConfig: Partial, fileConfig: CliOptions, envConfig?: Record, validationLevel?: ValidationLevel, isDev?: boolean, beforeConfigFreeze?: (options: ResolvedCliOptions) => Promise): Promise; /** * Get the stored config. * @returns The immutable config object * @throws Error if not yet initialized */ getConfig(): FrozenResolvedCliOptions; /** * Check if the config module has been initialized. * @returns True if initialized, false otherwise */ isInitialized(): boolean; /** * Get the resolved config provenance report (source + value per allowlisted path). * Never throws — returns an empty array before initialization so telemetry can * never crash a command. * @returns The config provenance report, or `[]` if not yet initialized */ getConfigReport(): ResolvedConfigEntry[]; /** * Invalidate the config module state in runtime. * Subsequent getConfig() calls will require re-initialization via init(). */ invalidate(): void; }; /** * Recursively freezes an object and all its nested properties. * This ensures deep immutability across the entire object tree. * * @param obj - The object to deep freeze * @returns The deeply frozen readonly object */ export declare function deepFreeze(obj: T): DeepReadonly;