import { ReporterOptions } from '../reporters/Reporter';
import { BenchmarkReporterOptions } from '../reporters/Benchmark';
import { TunnelOptions } from '@theintern/digdug/Tunnel';
import { BrowserStackOptions } from '@theintern/digdug/BrowserStackTunnel';
import { SeleniumOptions } from '@theintern/digdug/SeleniumTunnel';
export interface Config extends ResourceConfig {
    bail: boolean;
    baseline: boolean;
    basePath: string;
    benchmark: boolean;
    benchmarkConfig?: BenchmarkConfig;
    browser: ResourceConfig;
    coverageVariable: string;
    debug: boolean;
    defaultTimeout: number;
    description: string;
    filterErrorStack: boolean;
    grep: RegExp;
    internPath: string;
    name: string;
    node: ResourceConfig;
    sessionId: string;
    showConfig: boolean;
    capabilities: {
        name?: string;
        build?: string;
        [key: string]: any;
    };
    connectTimeout: number;
    coverage: false | string[];
    environments: EnvironmentSpec[];
    excludeInstrumentation: never;
    functionalBaseUrl?: string;
    functionalCoverage: boolean;
    functionalSuites: string[];
    functionalTimeouts: {
        connectTimeout?: never;
        find?: number;
        executeAsync?: number;
        pageLoad?: number;
    };
    heartbeatInterval?: number;
    instrumenterOptions: {
        [key: string]: any;
    };
    leaveRemoteOpen: boolean | 'fail';
    maxConcurrency: number;
    proxy?: string;
    runInSync: boolean;
    serveOnly: boolean;
    serverPort: number;
    serverUrl: string;
    socketPort?: number;
    tunnel: string;
    tunnelOptions: TunnelOptions | BrowserStackOptions | SeleniumOptions;
}
export interface ReporterDescriptor {
    name: string;
    options?: ReporterOptions;
}
export interface PluginDescriptor {
    script: string;
    useLoader?: boolean;
    options?: any;
}
export interface Listener<T> {
    (arg: T): void | Promise<void>;
}
export interface ResourceConfig {
    loader: LoaderDescriptor;
    reporters: ReporterDescriptor[];
    plugins: PluginDescriptor[];
    suites: string[];
    require: never;
    requires: never;
    scripts: never;
}
export interface BenchmarkConfig extends BenchmarkReporterOptions {
    id: string;
}
export interface LoaderDescriptor {
    script: string;
    options?: {
        [key: string]: any;
    };
}
export interface EnvironmentSpec {
    browserName: string;
    [key: string]: any;
}
