import type axe from 'axe-core';
import { type RunOptions } from './validateAxeRunOptions';
import { type AxeCoreSettings } from './initializeSession';
export interface GitData {
    git_branch?: string | null;
    git_tag?: string | null;
    git_default_branch?: string | null;
    git_commit_message?: string | null;
    git_commit_sha?: string | null;
    git_commit_author?: string | null;
    git_commit_email?: string | null;
    git_url?: string | null;
    git_is_dirty?: boolean;
}
/** User-provided git commit metadata. When supplied, automatic git detection is skipped. All fields are optional; string fields default to `null` when omitted, and `isDirty` defaults to `false`. */
export interface GitConfig {
    /** The commit SHA hash. Optional — defaults to `null` when omitted. */
    commitSha?: string | null;
    /** The commit message. Optional — defaults to `null` when omitted. */
    commitMessage?: string | null;
    /** The commit author name. Optional — defaults to `null` when omitted. */
    commitAuthor?: string | null;
    /** The commit author email. Optional — defaults to `null` when omitted. */
    commitEmail?: string | null;
    /** The current branch name. Optional — defaults to `null` when omitted. */
    branch?: string | null;
    /** The default branch name (e.g. main). Optional — defaults to `null` when omitted. */
    defaultBranch?: string | null;
    /** The repository remote URL. Optional — defaults to `null` when omitted. */
    url?: string | null;
    /** The current tag, if any. Optional — defaults to `null` when omitted. */
    tag?: string | null;
    /** Whether the repository has uncommitted changes. Optional — defaults to `false` when omitted. */
    isDirty?: boolean;
}
type AccessibilityStandard = 'All' | 'WCAG 2.2 AAA' | 'WCAG 2.2 AA' | 'WCAG 2.2 A' | 'WCAG 2.1 AAA' | 'WCAG 2.1 AA' | 'WCAG 2.1 A' | 'WCAG 2.0 AAA' | 'WCAG 2.0 AA' | 'WCAG 2.0 A' | 'Trusted Tester v5' | 'EN-301-549' | 'RGAAv4';
export interface ConfigurationOverrides {
    accessibilityStandard?: AccessibilityStandard;
    axeCoreVersion?: string;
    bestPractices?: boolean;
    experimentalRules?: boolean;
}
interface Timeouts {
    start?: number;
    stop?: number;
    flush?: number;
    analyze?: number;
}
interface AxeConfiguration {
    /** Your axe API key. */
    apiKey: string;
    /** Custom axe server URL. */
    serverURL?: string;
    /** @deprecated Please use `buildID` instead */
    sessionId?: string;
    /**
     * Whether or not to automatically run axe on the page when loaded and
     * when changes are made.
     */
    autoAnalyze?: boolean;
    /**
     * By default we'll scan the entire page. Provide a context object to limit
     * the scope of the scan.
     *
     * @see https://www.deque.com/axe/core-documentation/api-documentation/#context-parameter
     */
    runContext?: axe.ElementContext;
    /**
     * Provide options on how to run axe.
     * - `rules`: Enable or disable rules using the enabled property
     * - `runOnly`: Limit which rules are executed, based on names or tags
     * - `ancestry`: Return CSS selector for elements, with all the element's ancestors
     *
     * @remarks For advanced usage only. Consider using `configurationOverrides` for most cases.
     * @see https://www.deque.com/axe/core-documentation/api-documentation/#options-parameter
     */
    runOptions?: RunOptions;
    /**
     * Exclude URLs from being scanned by axe-core/watcher by providing an array of minimatch patterns.
     *
     * @example
     * ```js
     * excludeUrlPatterns: ['example.com', 'example.org']
     * excludeUrlPatterns: ['example.com/*', 'example.org/*']
     * ```
     */
    excludeUrlPatterns?: string[];
    /**
     * A unique identifier for the build or test run. This is useful for:
     *
     * - Grouping `@axe-core/watcher` runs across multiple workers running in parallel
     * - Grouping `@axe-core/watcher` runs across multiple axe Developer Hub projects
     *
     * @example
     * ```js
     * buildID: ${ process.env.GITHUB.RUN_ID }
     * buildID: ${ process.env.CIRCLE_PIPELINE_ID }
     *```
     */
    buildID?: string;
    takeScreenshots?: boolean;
    screenshotDir?: string;
    /** Run experimental advanced rules */
    /**
     * Duration in milliseconds after which the appropriate `controller.method' will throw a timeout error if it hasn't completed
     * @example
     * ```js
     *    timeout: {
     *        analyze: 60000,
     *        flush: 60000,
     *        start: 60000,
     *        stop: 60000
     *    }
     * */
    timeout?: Timeouts;
    /**
     * Allows a user to override org-wide settings configured in axe Account
     * @example
     * ```js
     *    configurationOverrides: {
     *       accessibilityStandard: 'WCAG 2.2 AAA',
     *       axeCoreVersion: '4.10.2',
     *       bestPractices: true,
     *       experimentalRules: false
     *     }
     * ```
     */
    configurationOverrides?: ConfigurationOverrides;
    /**
     * Associates the test run with a specific project.
     * Should be the UUID provided in your Axe account.
     */
    projectId?: string;
    /**
     * Configure Git info collection.
     *
     * - When set to `false`, disables automatic Git info collection.
     * - When set to an object, uses the provided values as git commit metadata
     *   and skips automatic detection entirely.
     * - When `undefined` or `true`, automatic Git info collection is used.
     *
     * @example
     * ```js
     * // Disable git info collection
     * git: false
     *
     * // Provide custom git info (all fields are optional)
     * git: {
     *   branch: 'main',
     *   defaultBranch: 'main',
     *   url: 'https://github.com/org/repo',
     *   isDirty: false
     * }
     * ```
     */
    git?: boolean | GitConfig;
}
export type CypressTestingType = 'e2e' | 'component';
export interface CypressAxeConfiguration extends AxeConfiguration {
    /**
     * Which Cypress Testing Type(s) (e2e or component) to enable @axe-core/watcher for.
     * Default: 'e2e'
     */
    testingTypes?: CypressTestingType | CypressTestingType[];
}
export interface CypressConfiguration {
    axe: CypressAxeConfiguration;
}
export interface Configuration {
    axe: AxeConfiguration;
}
interface WriteVariablesParams extends AxeConfiguration {
    cypress?: boolean;
    isPlaywrightTest?: boolean;
    isWdioTestrunner?: boolean;
    experimentalAdvancedRules?: boolean;
}
/** variables.json shape. */
export interface Variables {
    api_key: string;
    project_id: string | null;
    server_url: string;
    auto_analyze: boolean;
    cypress: boolean;
    session_id?: string;
    run_context: axe.ElementContext | null;
    run_options: RunOptions | null;
    git_data?: GitData;
    take_screenshots?: boolean;
    screenshot_dir?: string;
    experimental_advanced_rules?: boolean;
    exclude_url_patterns: string[] | null;
    axe_core_settings?: AxeCoreSettings | null;
    timeout: Required<Timeouts>;
}
/** Write the user's settings to the disk, so the extension can load them. */
declare function writeVariables({ apiKey, autoAnalyze, configurationOverrides, cypress, isPlaywrightTest, isWdioTestrunner, serverURL, sessionId, runContext, runOptions, excludeUrlPatterns, buildID, timeout, takeScreenshots, screenshotDir, experimentalAdvancedRules, projectId, git: gitConfig }: WriteVariablesParams): void;
export default writeVariables;
