import { Messages } from '@foxpage/foxpage-shared';
import { Application, AppResource, FoxRoute, FPApplication, Logger, Manager, ManagerOption } from '@foxpage/foxpage-types';
/**
 * manager
 *
 * @export
 * @class Manager
 */
export declare class ManagerImpl implements Manager {
    /**
     * managed application
     *
     * @type {Map<string, Application>}
     */
    private applicationMap;
    /**
     * application slug map
     * for get app by name fast
     * @private
     * @type {Map<string, string>}
     */
    private applicationSlugMap;
    /**
     * application route & slug maps
     * for get app slug by routes
     * @private
     * @type {Map<string, RouteSlugData[]>}
     */
    private appRouteSlugMap;
    /**
     * message
     *
     * @type {Messages}
     */
    messages: Messages;
    /**
     * logger
     *
     * @type {Logger}
     */
    logger?: Logger;
    settings: ManagerOption['settings'];
    options?: ManagerOption;
    private pluginDir;
    private pluginManager;
    constructor(opt: ManagerOption);
    get hooks(): import("@foxpage/foxpage-types").FoxpageHooks | undefined;
    /**
     * prepare
     * load plugins
     *
     * @memberof ManagerImpl
     */
    prepare(opt?: ManagerOption): Promise<void>;
    /**
     * new applications
     *
     * @param {ManagerOption['apps']} appMates
     */
    registerApplications(appMates: ManagerOption['apps']): Promise<void>;
    /**
     * un register apps
     *
     * @param {string[]} appIds
     */
    unRegisterApplications(appIds: string[]): void;
    /**
     * remove applications from manager
     *
     * @param {string[]} [appIds=[]]
     */
    removeApplications(appIds?: string[]): void;
    /**
     * if exist application
     *
     * @param {string} appId
     * @return {*} {boolean}
     */
    existApplication(appId: string): boolean;
    /**
     * if exist application via app slug
     *
     * @param {string} slug
     * @return {*} {boolean}
     */
    /** */
    existApplicationBySlug(slug: string): boolean;
    /**
     * find application via appId
     *
     * @param {string} appId
     * @return {(Application | undefined)}
     */
    getApplication(appId: string): Application | undefined;
    /**
     * get application via app slug
     *
     * @param {string} slug
     * @return {*}  {(Application | undefined)}
     */
    getApplicationBySlug(slug: string): Application | undefined;
    /**
     * get application via path
     * @param {string} pathname
     * @return {*}  {(Application | undefined)}
     */
    getApplicationByPath(pathname: string): {
        app: Application;
        matchedRoute?: FoxRoute;
    } | undefined;
    /**
     * find application list
     *
     * @param {string[]} [appIds=[]]
     * @return  {Application[]}
     */
    getApplications(appIds?: string[]): Application[];
    /**
     * clear all data
     */
    clear(): void;
    private registerApplication;
    private initAppSourceScheduleStatus;
    private generateAppConfig;
    private cache;
}
/**
 * merge resource
 *
 * @param {FPApplication['resources']} remoteRes
 * @param {AppResource[]} localRes
 * @return {*}  {Map<string, AppResource>}
 */
export declare const mergeResource: (remoteRes: FPApplication['resources'], localRes: AppResource[]) => Map<string, import("@foxpage/foxpage-types").ApplicationResource>;
