/// <reference types="node" />
import type { Integration } from '../../lib/Constants';
import type { ChildProcess } from 'node:child_process';
export declare const KEYS: {
    UP: string;
    DOWN: string;
    LEFT: string;
    RIGHT: string;
    ENTER: string;
    SPACE: string;
};
export declare const TEST_ARGS: {
    AUTH_TOKEN: string;
    PROJECT_DSN: string;
    ORG_SLUG: string;
    PROJECT_SLUG: string;
};
export declare const log: {
    success: (message: string) => void;
    info: (message: string) => void;
    error: (message: string) => void;
};
export declare class WizardTestEnv {
    taskHandle: ChildProcess;
    constructor(cmd: string, args: string[], opts?: {
        cwd?: string;
        debug?: boolean;
    });
    sendStdin(input: string): void;
    /**
     * Sends the input and waits for the output.
     * @returns a promise that resolves when the output was found
     * @throws an error when the output was not found within the timeout
     */
    sendStdinAndWaitForOutput(input: string | string[], output: string, options?: {
        timeout?: number;
        optional?: boolean;
    }): Promise<boolean>;
    /**
     * Waits for the task to exit with a given `statusCode`.
     *
     * @returns a promise that resolves to `true` if the run ends with the status
     * code, or it rejects when the `timeout` was reached.
     */
    waitForStatusCode(statusCode: number | null, options?: {
        /** Timeout in ms */
        timeout?: number;
    }): Promise<boolean>;
    /**
     * Waits for the provided output with `.includes()` logic.
     *
     * @returns a promise that resolves to `true` if the output was found, `false` if the output was not found within the
     * timeout and `optional: true` is set, or it rejects when the timeout was reached with `optional: false`
     */
    waitForOutput(output: string, options?: {
        /** Timeout in ms */
        timeout?: number;
        /** Whether to always resolve after the timeout, no matter whether the input was actually found or not. */
        optional?: boolean;
    }): Promise<boolean>;
    kill(): void;
}
/**
 * Initialize a git repository in the given directory
 * @param projectDir
 */
export declare function initGit(projectDir: string): void;
/**
 * Cleanup the git repository in the given directory
 *
 * Caution! Make sure `projectDir` is a test project directory,
 * if in doubt, please commit your local non-test changes first!
 * @param projectDir
 */
export declare function cleanupGit(projectDir: string): void;
/**
 * Revert local changes in the given directory
 *
 * Caution! Make sure `projectDir` is a test project directory,
 * if in doubt, please commit your local non-test changes first!
 *
 * @param projectDir
 */
export declare function revertLocalChanges(projectDir: string): void;
/**
 * Start the wizard instance with the given integration and project directory
 * @param integration
 * @param projectDir
 *
 * @returns WizardTestEnv
 */
export declare function startWizardInstance(integration: Integration, projectDir: string, debug?: boolean): WizardTestEnv;
/**
 * Create a file with the given content
 *
 * @param filePath
 * @param content
 */
export declare function createFile(filePath: string, content?: string): void;
/**
 * Modify the file with the new content
 *
 * @param filePath
 * @param oldContent
 * @param newContent
 */
export declare function modifyFile(filePath: string, replaceMap: Record<string, string>): void;
/**
 * Read the file contents and check if it contains the given content
 *
 * @param {string} filePath
 * @param {(string | string[])} content
 */
export declare function checkFileContents(filePath: string, content: string | string[]): void;
/**
 * Check if the file exists
 *
 * @param filePath
 */
export declare function checkFileExists(filePath: string): void;
/**
 * Check if the package.json contains the given integration
 *
 * @param projectDir
 * @param integration
 */
export declare function checkPackageJson(projectDir: string, integration: Integration): void;
/**
 * Check if the .sentryclirc contains the auth token
 *
 * @param projectDir
 */
export declare function checkSentryCliRc(projectDir: string): void;
/**
 * Check if the .env.sentry-build-plugin contains the auth token
 * @param projectDir
 */
export declare function checkEnvBuildPlugin(projectDir: string): void;
/**
 * Check if the sentry.properties contains the auth token
 * @param projectDir
 */
export declare function checkSentryProperties(projectDir: string): void;
/**
 * Check if the project builds
 * Check if the project builds and ends with status code 0.
 * @param projectDir
 */
export declare function checkIfBuilds(projectDir: string): Promise<void>;
/**
 * Check if the flutter project builds
 * @param projectDir
 */
export declare function checkIfFlutterBuilds(projectDir: string, expectedOutput: string, debug?: boolean): Promise<void>;
/**
 * Check if the project runs on dev mode
 * @param projectDir
 * @param expectedOutput
 */
export declare function checkIfRunsOnDevMode(projectDir: string, expectedOutput: string): Promise<void>;
/**
 * Check if the project runs on prod mode
 * @param projectDir
 * @param expectedOutput
 */
export declare function checkIfRunsOnProdMode(projectDir: string, expectedOutput: string, startCommand?: string): Promise<void>;
