import { createPromptModule } from 'inquirer';
import type { Logger, PromptAnswers, PromptQuestions, QueuedAdapter, Task } from '../../types/index.js';
type PromptModule = ReturnType<typeof createPromptModule>;
type TestQuestion = {
    name: string;
    message: string;
    type: string;
    default?: any;
};
type PromptCalls = {
    question: TestQuestion;
    answer: any;
};
export type DummyPromptCallback = (answer: any, { question, answers }: {
    question: TestQuestion;
    answers: PromptAnswers;
}) => any;
export type DummyPromptOptions = {
    mockedAnswers?: PromptAnswers;
    callback?: DummyPromptCallback;
    throwOnMissingAnswer?: boolean;
};
type SpyFactory<SpyType = any> = ({ returns }: {
    returns?: any;
}) => SpyType;
export type TestAdapterOptions<SpyType = any> = DummyPromptOptions & {
    log?: any;
    spyFactory?: SpyFactory<SpyType>;
};
export type DefineTestAdapterConfig = Pick<TestAdapterOptions, 'log' | 'spyFactory' | 'throwOnMissingAnswer'>;
export declare const defineConfig: (config: DefineTestAdapterConfig) => DefineTestAdapterConfig;
export declare const getConfig: () => {
    log?: any;
    spyFactory?: SpyFactory<any> | undefined;
    throwOnMissingAnswer?: boolean | undefined;
};
/**
 * @experimental
 */
export declare class TestAdapter<LogType extends Logger = Logger, SpyType = any> implements QueuedAdapter {
    promptModule: PromptModule;
    diff: any & SpyType;
    log: LogType & SpyType;
    registerDummyPrompt: (promptName: string, customPromptOptions?: DummyPromptOptions) => PromptModule;
    readonly mockedAnswers: PromptAnswers;
    readonly calls: PromptCalls[];
    private abortController;
    private readonly spyFactory;
    constructor(options?: TestAdapterOptions<SpyType>);
    queue<TaskResultType>(function_: Task<TaskResultType>): Promise<TaskResultType>;
    progress<ReturnType>(function_: (progress: {
        step: (prefix: string, message: string, ...arguments_: any[]) => void;
    }) => ReturnType, _options?: {
        disabled?: boolean | undefined;
        name?: string | undefined;
    } | undefined): Promise<ReturnType>;
    close(): void;
    prompt<A extends PromptAnswers = PromptAnswers>(questions: PromptQuestions<A>, initialAnswers?: Partial<A> | undefined): Promise<A>;
    /**
     * Add answers to the mocked answers.
     */
    addAnswers(answers: PromptAnswers): void;
}
export {};
