import { IWatchService } from "./i-watch-service";
import { WatchCallback } from "./watch-callback";
import { IObserver } from "../../observable/i-observer";
import { IThrottleUtil } from "../../util/throttle-util/i-throttle-util";
/**
 * A class that helps with watching files and directories
 */
export declare class WatchService implements IWatchService {
    private readonly throttleUtil;
    /**
     * A Map between file watchers and the Set of callbacks to invoke when the files change
     * @type {Map<string, Set<WatchCallback>>}
     */
    private readonly watchMap;
    /**
     * A Map between keys to paths and file watchers bound from Chokidar
     * @type {Map<string, FSWatcher>}
     */
    private readonly keyToWatcherMap;
    /**
     * The Set of all paths that has changed
     * @type {Set<string>}
     */
    private readonly changedPaths;
    /**
     * How much to throttle the watch handler
     * @type {number}
     */
    private readonly THROTTLE_TIME;
    constructor(throttleUtil: IThrottleUtil);
    /**
     * Watches the given path and invokes the given observer when it changes
     * @param {string[]|string} paths
     * @param {WatchCallback} callback
     * @returns {IObserver}
     */
    watch(paths: string[] | string, callback: WatchCallback): IObserver;
    /**
     * Stringifies the given paths
     * @param {string[] | string} paths
     * @returns {string}
     */
    private stringifyPaths(paths);
    /**
     * Watches the given paths with the given callback
     * @param {string[] | string} paths
     * @param {WatchCallback} callback
     */
    private watchPaths(paths, callback);
    /**
     * Returns true if there is a file watcher for the given paths
     * @param {string[] | string} paths
     * @returns {boolean}
     */
    private isPathsWatched(paths);
}
