import { Watcher } from "./watch.resolve";
import { CommandTrigger } from "./command.run";
import { TaskReport } from "./task.runner";
import Rx = require("rx");
import { SequenceItem } from "./task.sequence.factories";
import { CrossbowReporter } from "./index";
import { WatchCommandEventTypes } from "./command.watch";
export interface WatchEventWithContext {
    watchEvent: WatchEvent;
    watcher: Watcher;
}
export interface WatchEvent {
    event: string;
    path: string;
    watcherUID: string;
}
export interface WatchTaskReport {
    taskReport: TaskReport;
    watchEvent: WatchEvent;
    count: number;
}
export interface WatchRunnerComplete {
    sequence: SequenceItem[];
    reports: TaskReport[];
    errors: TaskReport[];
    watchEvent: WatchEvent;
    runtime: number;
}
/**
 * Create a stream that is the combination of all watchers
 */
export declare function createObservablesForWatchers(watchers: Watcher[], trigger: CommandTrigger): Rx.Observable<{
    type: WatchCommandEventTypes;
    data: WatchTaskReport | WatchRunnerComplete;
}>;
/**
 * Create a file-system watcher that will emit <WatchEvent>
 */
export declare function createObservableForWatcher(watcher: Watcher, trigger: CommandTrigger): Rx.Observable<WatchEvent>;
export declare function getFileChangeStream(watcher: Watcher, reporter: CrossbowReporter): Rx.Observable<WatchEvent>;
