import { IPackagesListPackage, Package } from './package.ts';
export interface IPackageUpdated {
    /**
     * Package name.
     */
    name: string;
    /**
     * File name.
     */
    file: string;
    /**
     * File size.
     */
    size: number;
    /**
     * SHA256 hash of the file contents.
     */
    sha256: string;
}
export interface IPackagesList {
    /**
     * Format version.
     */
    format: string;
    /**
     * Package list.
     */
    packages: IPackagesListPackage[];
}
/**
 * Packages object.
 */
export declare class Packages {
    /**
     * Packages data.
     */
    protected _packagesList: IPackagesList | null;
    /**
     * Packages array.
     */
    protected _packages: Set<Package>;
    /**
     * Packages mapped by name.
     */
    protected _packagesByName: Map<string, Package>;
    /**
     * Packages mapped by sha256.
     */
    protected _packagesBySha256: Map<string, Package>;
    /**
     * Packages mapped by sha1.
     */
    protected _packagesBySha1: Map<string, Package>;
    /**
     * Packages mapped by md5.
     */
    protected _packagesByMd5: Map<string, Package>;
    /**
     * Packages mapped by unique.
     */
    protected _packagesByUnique: Map<string, Package>;
    /**
     * The path to the packages file.
     */
    protected readonly _path: string;
    /**
     * Format version.
     */
    static readonly FORMAT: string;
    /**
     * Packages constructor.
     *
     * @param path The path to the packages file.
     */
    constructor(path: string);
    /**
     * Get path of the packages file.
     *
     * @returns The path.
     */
    get path(): string;
    /**
     * Get if packages loaded.
     *
     * @returns Is loaded.
     */
    get loaded(): boolean;
    /**
     * Update packages.
     *
     * @param data Encoded data.
     * @returns Update report.
     */
    update(data: string): {
        updated: IPackageUpdated[];
        added: IPackageUpdated[];
        removed: IPackageUpdated[];
    };
    /**
     * Assert loaded.
     */
    assertLoaded(): void;
    /**
     * Check if the file path exists.
     *
     * @returns Does exist.
     */
    exists(): Promise<boolean>;
    /**
     * Read the file path.
     */
    read(): Promise<void>;
    /**
     * Write packages to the file path.
     */
    write(): Promise<void>;
    /**
     * Read the file path if the file exists.
     *
     * @returns Did exist.
     */
    readIfExists(): Promise<boolean>;
    /**
     * Itterate over the packages.
     *
     * @yields Package object.
     */
    packages(): Generator<Package, void, unknown>;
    /**
     * Check if package is in this collection.
     *
     * @param pkg Package instance.
     * @returns If the package instance is present.
     */
    has(pkg: Package): boolean;
    /**
     * Assert the package is in this collection.
     *
     * @param pkg Package instance.
     */
    assertHas(pkg: Package): void;
    /**
     * Get package by the unique name.
     *
     * @param name Package name.
     * @returns The package or null.
     */
    byName(name: string): Package | null;
    /**
     * Get package by the sha256 hash.
     *
     * @param sha256 Package sha256.
     * @returns The package or null.
     */
    bySha256(sha256: string): Package | null;
    /**
     * Get package by the sha1 hash.
     *
     * @param sha1 Package sha1.
     * @returns The package or null.
     */
    bySha1(sha1: string): Package | null;
    /**
     * Get package by the md5 hash.
     *
     * @param md5 Package md5.
     * @returns The package or null.
     */
    byMd5(md5: string): Package | null;
    /**
     * Get package by the unique value.
     *
     * @param unique Package unique.
     * @returns The package or null.
     */
    byUnique(unique: string): Package | null;
    /**
     * Create a package instance.
     *
     * @param info Package info.
     * @returns Package instance.
     */
    protected _createPackage(info: Readonly<IPackagesListPackage>): Package;
    /**
     * Set the packages list.
     *
     * @param packagesList Parsed list.
     */
    protected _setPackagesList(packagesList: Readonly<IPackagesList>): void;
    /**
     * Validate format version string.
     *
     * @param format The format version string.
     */
    protected _validateFormat(format: string): void;
    /**
     * Parse the packages list.
     *
     * @param packages Packages list.
     * @returns Parsed list.
     */
    protected _parsePackages(packages: readonly Readonly<IPackagesListPackage>[]): Package[];
    /**
     * List all packages deep.
     *
     * @param packages A list of packages.
     * @returns A set of all packages and their children.
     */
    protected _listPackages(packages: readonly Package[]): Set<Package>;
    /**
     * Map out package list by name.
     * Throws on any duplicates.
     *
     * @param packages Packages list.
     * @returns Map from package name to package.
     */
    protected _packagesMapName(packages: Readonly<Set<Package>>): Map<string, Package>;
    /**
     * Map out package list by sha256.
     * Throws on any duplicates.
     *
     * @param packages Packages list.
     * @returns Map from package sha256 to package.
     */
    protected _packagesMapSha256(packages: Readonly<Set<Package>>): Map<string, Package>;
    /**
     * Map out package list by sha1.
     * Throws on any duplicates.
     *
     * @param packages Packages list.
     * @returns Map from package sha256 to package.
     */
    protected _packagesMapSha1(packages: Readonly<Set<Package>>): Map<string, Package>;
    /**
     * Map out package list by md5.
     * Throws on any duplicates.
     *
     * @param packages Packages list.
     * @returns Map from package sha256 to package.
     */
    protected _packagesMapMd5(packages: Readonly<Set<Package>>): Map<string, Package>;
    /**
     * Map out package list by unique.
     * Throws on any duplicates.
     *
     * @param packages Packages list.
     * @returns Map from package unique to package.
     */
    protected _packagesMapUnique(packages: Readonly<Set<Package>>): Map<string, Package>;
    /**
     * Parse and cast the encoded data.
     *
     * @param data Encoded data.
     * @returns Parsed and cast data.
     */
    protected _parseData(data: string): IPackagesList;
    /**
     * Cast the parsed data.
     *
     * @param packages Parsed data.
     * @returns Cast data.
     */
    protected _castData(packages: unknown): IPackagesList;
}
