import { AppConfig, AppEvents, Application, ApplicationOption, AppScheduleDataType, BlockManager, ConditionManager, ContentDetail, CSRPluginManager, FileManager, FPApplication, FunctionManager, GetContentRelationInfoOpt, LibraryManager, Logger, MaterialManager, MockManager, PackageManager, PageManager, PluginManager, RelationInfo, Router, SecurityManager, TagManager, TemplateManager, VariableManager } from '@foxpage/foxpage-types';
import { FPEventEmitterInstance } from '../common';
import { Schedule } from './schedule';
/**
 * application
 * same to appContext that contains all resource(content,plugins,hooks...) of this application
 * @export
 * @class ApplicationImpl
 * @extends {AppEventsImpl}
 * @implements {Application}
 */
export declare class ApplicationImpl extends FPEventEmitterInstance<AppEvents> implements Application {
    /**
     * application id
     *
     * @type {string}
     */
    readonly appId: string;
    /**
     * application slug
     *
     * @type {string}
     */
    readonly slug: string;
    /**
     * foxpage application info
     *
     * @type {FPApplication}
     */
    readonly app: FPApplication;
    /**
     * file manager
     *
     * @type {FileManager}
     */
    readonly fileManager: FileManager;
    /**
     * tag resource manager
     *
     * @type {TagManager}
     */
    readonly tagManager: TagManager;
    /**
     * page resource manager
     *
     * @type {PageManager}
     */
    readonly pageManager: PageManager;
    /**
     * package resource manager
     *
     * @type {PackageManager}
     */
    readonly packageManager: PackageManager;
    /**
     * variable manager
     *
     * @type {VariableManager}
     */
    readonly variableManager: VariableManager;
    /**
     * material manager
     *
     * @type {MaterialManager}
     */
    readonly materialManager: MaterialManager;
    /**
     * condition manager
     *
     * @type {ConditionManager}
     */
    readonly conditionManager: ConditionManager;
    /**
     * template resource manager
     *
     * @type {TemplateManager}
     */
    readonly templateManager: TemplateManager;
    /**
     * function manager
     *
     * @type {FunctionManager}
     */
    readonly functionManager: FunctionManager;
    /**
     * plugin manager
     *
     * @type {PluginManager}
     */
    readonly pluginManager: PluginManager;
    /**
     * plugin manager
     *
     * @type {CSRPluginManager}
     */
    readonly csrPluginManager: CSRPluginManager;
    /**
     * libraryManager
     */
    readonly libraryManager: LibraryManager;
    /**
     * mock manager
     *
     * @type {MockManager}
     */
    readonly mockManager: MockManager;
    /**
     * block manager
     *
     * @type {BlockManager}
     */
    readonly blockManager: BlockManager;
    /**
     * router
     *
     * @type {Router}
     */
    readonly routeManager: Router;
    /**
     * ticket checker
     */
    readonly securityManager: SecurityManager;
    /**
     * logger
     *
     * @type {Logger}
     */
    readonly logger: Logger;
    /**
     * source update schedule
     *
     * @type {Schedule<AppScheduleDataType>}
     */
    readonly schedule?: Schedule<AppScheduleDataType>;
    /**
     * application configs
     *
     * @type {AppConfig}
     */
    readonly configs: AppConfig;
    readonly hooks: ApplicationOption['hooks'];
    readonly resourceMap?: ApplicationOption['resourceMap'];
    private reporter;
    constructor(app: FPApplication, opt: ApplicationOption);
    /**
     * application prepare
     * fresh templates and packages
     */
    prepare(): Promise<void>;
    /**
     * listen schedule
     *
     */
    onScheduled(): void;
    /**
     * get schedule status
     *
     * @return {boolean}
     */
    enableSchedule(): boolean;
    /**
     * refresh data
     *
     * @param {ResourceUpdateInfo} updateInfos
     */
    refresh(updateInfos: AppScheduleDataType): Promise<void>;
    /**
     * get content relation data
     * contain the deps of variable,condition,functions
     * @template T
     * @param {ContentDetail<T>} content
     * @return {*}  {(Promise<RelationInfo | null>)}
     */
    getContentRelationInfo(content: ContentDetail, opt?: GetContentRelationInfoOpt): Promise<RelationInfo>;
    private getRelations;
    private ComposeSysVariable;
    private relationGetter;
    private relationFilter;
    private checkRelationIn;
    private initEvents;
    /**
     * destroy
     */
    destroy(): void;
}
