import FileDescription from '../FileDescription';
import { LoaderDescription } from '../Loader';
import { Message } from '../messages';
/**
 * The options for confinode, without the mode.
 */
interface ConfinodeOptionsWithoutMode {
    /**
     * Indicate if the search or load result should be cached.
     */
    cache: boolean;
    /**
     * The folder where configuration file search should stop.
     */
    searchStop: string;
    /**
     * Extra paths to search for loader modules.
     */
    modulePaths: string | string[];
    /**
     * The logger. Default logger will simply display warnings to the console.
     */
    logger: (message: Message<any>) => void;
    /**
     * Configuration file names, or default file names filter.
     */
    files: FileDescription[] | Array<(files: FileDescription[]) => FileDescription[]>;
    /**
     * The custom loaders, if needed.
     */
    customLoaders: {
        [name: string]: LoaderDescription;
    };
}
/**
 * Type guard to check if file names are actually filters rather than real file descriptions.
 *
 * @param files - The variable to check.
 * @returns True if files are actually a filter array.
 */
export declare function filesAreFilters(files: FileDescription[] | Array<(fileDescriptions: FileDescription[]) => FileDescription[]>): files is Array<(fileDescriptions: FileDescription[]) => FileDescription[]>;
/**
 * Some default configuration options.
 */
export declare const defaultConfig: Partial<ConfinodeOptionsWithoutMode>;
/**
 * The definitive options, ready to be used by the application.
 */
export interface ConfinodeParameters extends ConfinodeOptionsWithoutMode {
    modulePaths: string[];
    files: FileDescription[];
    mode: 'async' | 'sync';
}
/**
 * The options for confinode.
 */
declare type ConfinodeOptions<M extends 'async' | 'sync'> = Partial<ConfinodeOptionsWithoutMode> & (M extends 'async' ? {
    mode?: M;
} : {
    mode: M;
});
export default ConfinodeOptions;
