/// <reference types="node" />
import { 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: unknown) => void;
};
/**
 * Creates an isolated test environment by copying a test application to a temporary directory.
 * Each call creates a NEW unique temporary directory, allowing multiple isolated environments
 * per test file (useful for tests that run the wizard multiple times with different configs).
 *
 * @param testAppName - Name of the test application folder (e.g., 'nextjs-16-test-app')
 * @returns Object with projectDir path and cleanup function
 */
export declare function createIsolatedTestEnv(testAppName: string): {
    projectDir: string;
    cleanup: () => void;
};
export declare class ProcessRunner {
    taskHandle: ChildProcess;
    constructor(cmd: string, args: string[], opts?: {
        cwd?: string;
        debug?: 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;
}
export declare function getWizardCommand(integration: Integration): string;
/**
 * 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 does not contain the given content
 *
 * @param {string} filePath
 * @param {(string | string[])} content
 */
export declare function checkFileDoesNotContain(filePath: string, content: 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 file does not exist
 *
 * @param filePath
 */
export declare function checkFileDoesNotExist(filePath: string): void;
/**
 * Check if the package.json lists the given package as a dependency or dev dependency
 *
 * @param projectDir
 * @param integration
 */
export declare function checkPackageJson(projectDir: string, packageName: string, devDependency?: boolean): 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 project lints successfully
 * Runs `npm run lint` and expects status code 0.
 * @param projectDir
 */
export declare function checkIfLints(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 React Native project bundles successfully for the specified platform.
 * Returns a boolean indicating if the process exits with status code 0.
 * @param projectDir The root directory of the React Native project.
 * @param platform The platform to bundle for ('ios' or 'android').
 * @param debug runs the command in debug mode if true
 */
export declare function checkIfReactNativeBundles(projectDir: string, platform: 'ios' | 'android', debug?: boolean): Promise<boolean>;
/**
 * Check if the Expo project exports successfully for the specified platform.
 * Returns a boolean indicating if the process exits with status code 0.
 * @param projectDir The root directory of the Expo project.
 * @param platform The platform to export for ('ios', 'android', or 'web').
 * @param debug runs the command in debug mode if true
 */
export declare function checkIfExpoBundles(projectDir: string, platform: 'ios' | 'android' | 'web', debug?: boolean): Promise<boolean>;
/**
 * 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>;
