import * as magicast from 'magicast';

/**
 * @experimental Update a config file or create a new one.
 */
declare function updateConfig(opts: UpdateConfigOptions): Promise<UpdateConfigResult>;
interface UpdateConfigResult {
    configFile?: string;
    created?: boolean;
}
type MaybePromise<T> = T | Promise<T>;
type MagicAstOptions = Exclude<Parameters<(typeof magicast)["parseModule"]>[1], undefined>;
interface UpdateConfigOptions {
    /**
     * Current working directory
     */
    cwd: string;
    /**
     * Config file name
     */
    configFile: string;
    /**
     * Extension used for new config file.
     */
    createExtension?: string;
    /**
     * Magicast options
     */
    magicast?: MagicAstOptions;
    /**
     * Update function.
     */
    onUpdate?: (config: any) => MaybePromise<void>;
    /**
     * Handle default config creation.
     *
     * Tip: you can use this option as a hook to prompt users about config creation.
     *
     * Context object:
     *  - path: determined full path to the config file
     *
     * Returns types:
     *  - string: custom config template
     *  - true: write the template
     *  - false: abort the operation
     */
    onCreate?: (ctx: {
        configFile: string;
    }) => MaybePromise<string | boolean>;
}

export { type UpdateConfigOptions, type UpdateConfigResult, updateConfig };
