import { IInnerApplication, PureObject, IDir, PriorityDefine as IPriority, IDefaultLoaders, NormalizedMiddleware, ICoreLoaderOptions } from '../definitions/core';
import { Loader } from './Loader';
import { Middleware } from 'koa';
/**
 * ## Core Loader
 * - decide how to build application.
 *
 * @author Big Mogician
 * @export
 * @class CoreLoader
 * @extends {Loader<F, A>}
 * @template F
 * @template A
 */
export declare class CoreLoader<F extends PureObject, A extends IInnerApplication<F>> extends Loader<F, A> {
    protected options: Partial<ICoreLoaderOptions<F, A>>;
    protected patterns: IDefaultLoaders;
    protected pluginConfig: PureObject;
    protected astroboy: any;
    protected loaders: PureObject;
    protected coreDirs: IDir[];
    protected loaderQueue: IPriority[];
    protected NODE_ENV: string;
    middlewareList: Middleware[];
    get defaultPatterns(): IDefaultLoaders;
    constructor(options?: Partial<ICoreLoaderOptions<F, A>>);
    /**
     * ### `init` hook
     *
     * @virtual
     * @author Big Mogician
     * @protected
     * @memberof CoreLoader
     */
    protected init(): Promise<void>;
    /**
     * ### `load` hook
     *
     * @virtual
     * @author Big Mogician
     * @memberof CoreLoader
     */
    load(): Promise<void>;
    /**
     * ### 加载核心目录，包括 app、framework，但不包括 plugin
     *
     * @author Big Mogician
     * @protected
     * @param {string} baseDir
     * @memberof CoreLoader
     */
    protected loadCoreDirs(baseDir: string): Promise<void>;
    /**
     * ### 获取插件配置
     *
     * @author Big Mogician
     * @protected
     * @memberof CoreLoader
     */
    protected loadPluginConfig(): Promise<void>;
    /**
     * ### 获取遍历目录
     *
     * @author Big Mogician
     * @protected
     * @memberof CoreLoader
     */
    protected loadFullDirs(): Promise<void>;
    /**
     * ### 获取需要遍历的插件目录
     *
     * @author Big Mogician
     * @protected
     * @param {string} baseDir
     * @returns
     * @memberof CoreLoader
     */
    protected getPluginDirs(baseDir: string): Promise<IDir[]>;
    /**
     * ### 获取需要遍历的插件配置
     *
     * @author Big Mogician
     * @protected
     * @param {string} baseDir
     * @returns
     * @memberof CoreLoader
     */
    protected getPluginConfig(baseDir: string): Promise<PureObject<any>>;
    /**
     * ### 获取加载器执行队列
     *
     * @author Big Mogician
     * @protected
     * @memberof CoreLoader
     */
    protected loadLoaderQueue(): Promise<void>;
    /**
     * ### 获取加载器
     *
     * @author Big Mogician
     * @protected
     * @memberof CoreLoader
     */
    protected loadLoaders(): Promise<void>;
    /**
     * ### 执行加载器
     *
     * @author Big Mogician
     * @protected
     * @memberof CoreLoader
     */
    protected runLoaders(): Promise<void>;
    /**
     * ### Use Middlewares
     *
     * @author Big Mogician
     * @protected
     * @memberof CoreLoader
     */
    protected useMiddlewares(): void;
    /**
     * ### Wrap Middlewares
     *
     * @author Big Mogician
     * @protected
     * @param {NormalizedMiddleware} middleware
     * @param {IPriority} options
     * @returns
     * @memberof CoreLoader
     */
    protected wrapMiddleware(middleware: NormalizedMiddleware, options: IPriority): NormalizedMiddleware<import("../definitions/core").IBaseContext<PureObject<any>, import("../definitions/core").IBaseApplication<PureObject<any>>>>;
}
