import { CommandTrigger } from './command.run';
import { CrossbowConfiguration } from './config';
import { CrossbowInput, CLI, CrossbowReporter } from './index';
import { WatchRunners } from "./watch.runner";
import { WatchTasks } from './watch.resolve';
import { BeforeTasks } from "./watch.before";
import Rx = require('rx');
import { WatchTaskReport, WatchRunnerComplete } from "./watch.file-watcher";
import { ReportTypes } from "./reporter.resolve";
import { TaskReport } from "./task.runner";
export interface CrossbowError extends Error {
    _cb: boolean;
}
export interface WatchCommandSetupErrors {
    type: ReportTypes;
}
export interface WatchCommandOutput {
    setup: WatchCommandSetup;
    update$: Rx.Observable<{
        type: WatchCommandEventTypes;
        data: WatchTaskReport | WatchRunnerComplete;
    }>;
}
export interface WatchCommandSetup {
    beforeTasks?: BeforeTasks;
    watchTasks?: WatchTasks;
    watchRunners?: WatchRunners;
    errors: WatchCommandSetupErrors[];
}
export interface WatchCommandBefore {
    reports: TaskReport[];
    errors: TaskReport[];
}
export declare type WatchCommmandComplete = Rx.Observable<WatchCommandOutput>;
export declare enum WatchCommandEventTypes {
    SetupError,
    FileEvent,
    WatchTaskReport,
    WatchRunnerComplete,
    BeforeTasksComplete,
}
export default function handleIncomingWatchCommand(cli: CLI, input: CrossbowInput, config: CrossbowConfiguration, reporter: CrossbowReporter): WatchCommmandComplete;
export declare function getWatchCommandSetup(trigger: CommandTrigger): WatchCommandSetup;
