/// <reference types="node" />
import { EventEmitter } from 'events';
import { IAstroboyOptions } from '../definitions/core';
import { IAstroboyFrameworkDefine } from '../definitions';
import { IBaseFrameworkDefine } from '../definitions/extends/context';
import { BaseClass as AstroboyBaseClass } from './base/BaseClass';
/**
 * ## Astroboy Framework
 *
 * @author Big Mogician
 * @class Astroboy
 * @extends {EventEmitter}
 * @template DEFINE Framework Definition, defalut is `IAstroboyFrameworkDefine`.
 */
declare class Astroboy<DEFINE extends Partial<IBaseFrameworkDefine> = IAstroboyFrameworkDefine> extends EventEmitter {
    protected app: DEFINE['app'];
    protected options: IAstroboyOptions;
    private loader;
    protected extends: {
        app: null;
        context: null;
        request: null;
        response: null;
    };
    constructor(options?: Partial<IAstroboyOptions>);
    run(): Promise<Astroboy<IAstroboyFrameworkDefine>>;
    initAe(): Promise<void>;
    handleCtx(ctx: any): Promise<void>;
    protected init(): Promise<void>;
    private start;
}
declare namespace Astroboy {
    /** ### Astroboy Base Class */
    const BaseClass: typeof AstroboyBaseClass;
    type BaseClass = AstroboyBaseClass;
    /** ### Astroboy Controller Base */
    const Controller: typeof AstroboyBaseClass;
    type Controller = AstroboyBaseClass;
    /** ### Astroboy Service Base */
    const Service: typeof AstroboyBaseClass;
    type Service = AstroboyBaseClass;
    /** ### Astroboy <Helper&Utils> Base */
    const Helper: typeof AstroboyBaseClass;
    type Helper = AstroboyBaseClass;
}
export = Astroboy;
