import { type ParsedPath } from 'path';
import { type Ignore } from 'ignore';
/**
 * Represents the result of a scan
 */
export interface ScannedDirectory {
    /**
     * Data about the current directory
     */
    dir: ParsedPath;
    /**
     * Only one config file is allowed in a directory, it may be null if no config file is found in
     * the directory
     */
    configFile: ParsedPath | null;
    /**
     * Lintable files in the directory (if any)
     */
    lintableFiles: ParsedPath[];
    /**
     * Subdirectories in the directory (if any)
     */
    subdirectories: ScannedDirectory[];
}
/**
 * Searches for lintable files in a directory recursively. Practically it means files with the
 * supported extensions. It will also search for config files.
 *
 * It will ignore files and directories that are ignored by the ignore file at any level.
 * `.aglintignore` works exactly like `.gitignore`.
 *
 * @param dir Directory to search in
 * @param ignores File ignores
 * @param useIgnoreFiles Use ignore files or not (default: true)
 * @returns The result of the scan (`ScannedDirectory` object)
 * @throws If multiple config files are found in the given directory
 */
export declare function scan(dir: string, ignores?: Ignore[], useIgnoreFiles?: boolean): Promise<ScannedDirectory>;
