import { Application, FPPackage, FPPackageResponse, LibraryManager, PackageFetchOption, PackageFreshOption, PackageNamedVersion, PrePackage, Relations, ResourceUpdateInfo } from '@foxpage/foxpage-types';
import { ManagerBaseImpl } from '../common';
import { LibraryInstance } from './library';
/**
 * library manager
 * library
 *
 * @export
 * @class PackageManager
 */
export declare class LibraryManagerImpl extends ManagerBaseImpl<PrePackage> implements LibraryManager {
    /**
     * cache library name & versions
     * key: library name, value: version list
     * @private
     */
    private libraryVersionsMap;
    /**
     * library id map
     * key: library id, value: library name
     *
     * @private
     */
    private libraryIdMap;
    /**
     * component resource config
     */
    private resourceConfig;
    /**
     * package config
     */
    private config;
    constructor(app: Application);
    /**
     * add library to manager
     *
     * @param {PrePackage} pkg
     */
    addLibrary(pkg: FPPackage): LibraryInstance | null;
    /**
     * remove library from manager via library names
     *
     * @param {string[]} names library names
     */
    removeLibraries(names: string[]): void;
    /**
     * get library by library name
     * will return the live versions
     * @param {string} type
     * @return {*} {PrePackage | undefined}
     */
    getLibrary(name: string): Promise<PrePackage | undefined>;
    /**
     * get all libraries by library names
     * will return the live versions
     * @param {string[]} names
     * @return {*}  {Promise<PrePackage[]>}
     */
    getLibraries(names: string[]): Promise<PrePackage[]>;
    /**
     * get libraries by id
     * @param ids library ids
     * @returns
     */
    getLibrariesById(ids: string[]): Promise<PrePackage[]>;
    /**
     * select one version
     *
     * @param {string} name library name
     * @return {*}
     */
    getLibraryLiveVersion(name: string): string | undefined;
    /**
     * update library live version
     *
     * @param {string} pkg library content
     */
    updateLibraryLiveVersion(pkg: FPPackage): void;
    /**
     * get library sync from hot
     * @param name library name
     * @param version library version
     * @returns pkg
     */
    getLibrarySync(name: string, version?: string): PrePackage | null;
    /**
     * get local library
     *
     * @param {string} name library name
     * @param {string} version library version
     * @return {*}  {(PrePackage | null)}
     */
    getLocalLibrary(name: string, version?: string): Promise<PrePackage | null>;
    /**
     * fetch libraries, instance libraries and install libraries then add to local
     * note: return contains library dependencies contents
     * @param {PackageFreshOption} [params]
     * @return {*}
     */
    freshLibraries(params?: PackageFreshOption): Promise<LibraryInstance[]>;
    /**
     * 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<LibraryInstance[]>;
    /**
     * fetch libraries from server
     *
     * @param {string[]} [libraryIds]
     * @return {*}
     */
    fetchLibraries(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[]>}
     */
    fetchLibrariesByNamedVersions(nameVersions: PackageNamedVersion[], opt?: PackageFetchOption): Promise<FPPackageResponse[]>;
    /**
     * listen the "ON_PULL" event
     * updates & removes is the library 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<LibraryInstance>;
    private newLibrary;
    private resolveLibrary;
    /**
     * init need install libraries instances
     *
     * @private
     * @param {FPPackage[]} libraries
     * @param {{ cache: boolean, ignoreLocal:boolean }} [opt]
     * @return {*}
     */
    private initInstalls;
    /**
     * get library versions
     *
     * @private
     * @param {string[]} names library names
     * @return {*} {[key]: library name, [value]: versions}
     */
    private getLibraryVersionsByNames;
    private updateLibraryVersionsMap;
    private generateKey;
    private splitKey;
    destroy(): void;
}
