import { Application, FPPackage, FPPackageResponse, Package, PackageFetchOption, PackageFreshOption, PackageManager, PackageNamedVersion, ResourceUpdateInfo } from '@foxpage/foxpage-types';
import { ManagerBaseImpl } from '../common';
import { PackageInstance } from './package';
/**
 * package manager
 * component
 *
 * @export
 * @class PackageManager
 */
export declare class PackageManagerImpl extends ManagerBaseImpl<Package> implements PackageManager {
    /**
     * cache package name & versions
     * key: package name, value: version list
     * @private
     */
    private packageVersionsMap;
    /**
     * package id map
     * key: package id, value: package name
     *
     * @private
     */
    private packageIdMap;
    /**
     * component resource config
     */
    private resourceConfig;
    /**
     * package config
     */
    private config;
    constructor(app: Application);
    /**
     * add package to manager
     *
     * @param {Package} pkg
     */
    addPackage(pkg: FPPackage): PackageInstance | null;
    /**
     * remove package from manager via package names
     *
     * @param {string[]} names package names
     */
    removePackages(names: string[]): void;
    /**
     * get package by package name
     * will return the live versions
     * @param {string} type
     * @return {*} {Package | undefined}
     */
    getPackage(name: string): Promise<Package | undefined>;
    /**
     * get package count
     * @returns count
     */
    getPackageCount(): number;
    /**
     * get all packages by package names
     * will return the live versions
     * @param {string[]} names
     * @return {*}  {Promise<Package[]>}
     */
    getPackages(names: string[]): Promise<Package[]>;
    /**
     * select one version
     *
     * @param {string} name package name
     * @return {*}
     */
    getPackageLiveVersion(name: string): string | undefined;
    /**
     * update package live version
     *
     * @param {string} pkg package content
     */
    updatePackageLiveVersion(pkg: FPPackage): void;
    /**
     * get package sync from hot
     * @param name package name
     * @param version package version
     * @returns pkg
     */
    getPackageSync(name: string, version?: string): Package | null;
    /**
     * get local package
     *
     * @param {string} name package name
     * @param {string} version package version
     * @return {*}  {(Package | null)}
     */
    getLocalPackage(name: string, version?: string): Promise<Package | null>;
    /**
     * fetch packages, instance packages and install packages then add to local
     * note: return contains package dependencies contents
     * @param {PackageFreshOption} [params]
     * @return {*}
     */
    freshPackages(params?: PackageFreshOption): Promise<PackageInstance[]>;
    /**
     * install packages
     *
     * @param {FPPackage[]} packages
     * @param {{ cache: boolean; ignoreLocal:boolean }} [opt] {cache: will add package instance to manager}
     * @return {*}
     */
    install(packages: FPPackage[], opt?: {
        cache: boolean;
        ignoreLocal?: boolean;
        reInstall?: boolean;
    }): Promise<PackageInstance[]>;
    /**
     * fetch packages from server
     *
     * @param {string[]} [packageIds]
     * @return {*}
     */
    fetchPackages(packageIds?: string[], opt?: Pick<PackageFreshOption, 'strategy' | 'semver'>): Promise<FPPackage[]>;
    /**
     * fetch packages with name and version from server
     *
     * @param {PackageNamedVersion[]} nameVersions
     * @param {PackageFreshOption} opt {isCanary,...}
     * @return {Promise<FPPackageResponse[]>}
     */
    fetchPackagesByNamedVersions(nameVersions: PackageNamedVersion[], opt?: PackageFetchOption): Promise<FPPackageResponse[]>;
    /**
     * listen the "ON_PULL" event
     * updates & removes is the package content id list
     * @protected
     * @param {ResourceUpdateInfo} data
     * @return {*}  {Promise<void>}
     */
    protected onPull(data: ResourceUpdateInfo): Promise<void>;
    /**
     * on fetch
     * list: the manager keys
     * @protected
     * @param {string[]} list
     * @return {*}  {Promise<PackageImpl[]>}
     */
    protected onFetch(list: string[]): Promise<PackageInstance[]>;
    protected createInstance(data: FPPackage): Promise<PackageInstance>;
    private newPackage;
    private resolvePackage;
    /**
     * init need install package instances
     *
     * @private
     * @param {FPPackage[]} packages
     * @param {{ cache: boolean, ignoreLocal:boolean }} [opt]
     * @return {*}
     */
    private initInstalls;
    /**
     * get package versions
     *
     * @private
     * @param {string[]} names package names
     * @return {*} {[key]: package name, [value]: versions}
     */
    private getPackageVersionsByNames;
    private updatePackageVersionsMap;
    private generateKey;
    private splitKey;
    destroy(): void;
}
