import { Application, CSRPluginManager, FPPackage, FPPackageResponse, Logger, PackageFetchOption, PackageFreshOption, PackageNamedVersion, PrePackage, Relations, ResourceUpdateInfo } from '@foxpage/foxpage-types';
import { ManagerBaseImpl } from '../common';
import { PluginInstance } from './plugin';
/**
 * plugin manager for csr
 *
 * @export
 * @class CSRPluginManagerImpl
 * @implements {CSRPluginManager}
 */
export declare class CSRPluginManagerImpl extends ManagerBaseImpl<PrePackage> implements CSRPluginManager {
    /**
     * cache plugin name & versions
     * key: plugin name, value: version list
     * @private
     */
    private pluginVersionsMap;
    /**
     * plugin id map
     * key: plugin id, value: plugin name
     *
     * @private
     */
    private pluginIdMap;
    /**
     * component resource config
     */
    private resourceConfig;
    /**
     * package config
     */
    private config;
    /**
     * logger
     */
    logger: Logger;
    constructor(app: Application);
    /**
     * add plugin to manager
     *
     * @param {PrePackage} pkg
     */
    addPlugin(pkg: FPPackage): PluginInstance | null;
    /**
     * remove plugin from manager via plugin names
     *
     * @param {string[]} names plugin names
     */
    removePlugins(names: string[]): void;
    /**
     * get plugin by plugin name
     * will return the live versions
     * @param {string} type
     * @return {*} {PrePackage | undefined}
     */
    getPlugin(name: string): Promise<PrePackage | undefined>;
    /**
     * get all libraries by plugin names
     * will return the live versions
     * @param {string[]} names
     * @return {*}  {Promise<PrePackage[]>}
     */
    getPlugins(names: string[]): Promise<PrePackage[]>;
    getPluginsById(ids: string[]): Promise<PrePackage[]>;
    /**
     * select one version
     *
     * @param {string} name plugin name
     * @return {*}
     */
    getPluginLiveVersion(name: string): string | undefined;
    /**
     * update plugin live version
     *
     * @param {string} pkg plugin content
     */
    updatePluginLiveVersion(pkg: FPPackage): void;
    /**
     * get plugin sync from hot
     * @param name plugin name
     * @param version plugin version
     * @returns pkg
     */
    getPluginSync(name: string, version?: string): PrePackage | null;
    /**
     * get local plugin
     *
     * @param {string} name plugin name
     * @param {string} version plugin version
     * @return {*}  {(PrePackage | null)}
     */
    getLocalPlugin(name: string, version?: string): Promise<PrePackage | null>;
    /**
     * fetch libraries, instance libraries and install libraries then add to local
     * note: return contains plugin dependencies contents
     * @param {PackageFreshOption} [params]
     * @return {*}
     */
    freshPlugins(params?: PackageFreshOption): Promise<PluginInstance[]>;
    /**
     * install libraries
     *
     * @param {FPPackage[]} libraries
     * @param {{ cache: boolean; ignoreLocal:boolean }} [opt] {cache: will add libraries instance to manager}
     * @return {*}
     */
    install(libraries: FPPackage[], opt?: {
        cache: boolean;
        ignoreLocal?: boolean;
    }): Promise<PluginInstance[]>;
    /**
     * fetch libraries from server
     *
     * @param {string[]} [pluginIds]
     * @return {*}
     */
    fetchPlugins(packageIds?: string[], opt?: Pick<PackageFreshOption, 'strategy'>): Promise<FPPackage[]>;
    /**
     * fetch libraries with name and version from server
     *
     * @param {PackageNamedVersion[]} nameVersions
     * @param {PackageFreshOption} opt {isCanary,...}
     * @return {Promise<FPPackageResponse[]>}
     */
    fetchPluginsByNamedVersions(nameVersions: PackageNamedVersion[], opt?: PackageFetchOption): Promise<FPPackageResponse[]>;
    /**
     * listen the "ON_PULL" event
     * updates & removes is the plugin content id list
     * @protected
     * @param {ResourceUpdateInfo} data
     * @return {*}  {Promise<void>}
     */
    protected onPull(data: ResourceUpdateInfo): Promise<void>;
    /**
     * on stash
     * @param data
     */
    protected onStash(data: Relations): void;
    /**
     * on fetch
     * list: the manager keys
     * @protected
     * @param {string[]} list
     * @return {*}  {Promise<PackageImpl[]>}
     */
    protected onFetch(list: string[]): Promise<PrePackage[]>;
    protected createInstance(data: FPPackage): Promise<PluginInstance>;
    private newPlugin;
    private resolvePlugin;
    /**
     * init need install libraries instances
     *
     * @private
     * @param {FPPackage[]} libraries
     * @param {{ cache: boolean, ignoreLocal:boolean }} [opt]
     * @return {*}
     */
    private initInstalls;
    /**
     * get plugin versions
     *
     * @private
     * @param {string[]} names plugin names
     * @return {*} {[key]: plugin name, [value]: versions}
     */
    private getPluginVersionsByNames;
    private updatePluginVersionsMap;
    private generateKey;
    private splitKey;
    /**
     * destroy
     */
    destroy(): void;
}
