import { JSONSchemaForNPMPackageJsonFiles } from '@schemastore/package';

declare const ERROR_ID: {
    readonly INVALID_PKG_NAME: "INVALID_PKG_NAME";
    readonly GETTING_PKG_NAME: "GETTING_PKG_NAME";
    readonly GETTING_REGISTRY_DATA: "GETTING_REGISTRY_DATA";
    readonly GETTING_LOCAL_DATA: "GETTING_LOCAL_DATA";
};
declare const LIFE_CYCLE_SCRIPTS: readonly ["preinstall", "install", "postinstall", "prepublish", "preprepare", "prepare", "postprepare"];

type PackageJSON = JSONSchemaForNPMPackageJsonFiles & {
    name: string;
    version: string;
};
type lifeCycleScripts = typeof LIFE_CYCLE_SCRIPTS[number];
type PackageInfo = {
    name: string;
    version: string;
    description?: string;
    license?: string;
    isESM: boolean;
    isCommonJS: boolean;
    types: boolean;
    author?: {
        name: string;
        url: string;
    };
    url: {
        npm: string;
        homepage?: string;
        repository?: string;
        funding?: string;
        unpkg?: string;
    };
    /** Unpacked size in bytes */
    unpackedSize: number;
    unpackedSizeKB: number;
    unpackedSizeMB: number;
    dependencies?: PackageJSON['dependencies'];
    devDependencies?: PackageJSON['devDependencies'];
    lifeCycleScripts?: {
        [key in lifeCycleScripts]?: string;
    };
    installedBy?: string[];
    /** Level of the dependence installation. Main packages is 0 */
    level: number;
};
type SiziumResponse = {
    id: string;
    /** Number of total packages installed */
    packageNum: number;
    /** Size in bytes */
    size: number;
    /** Size in kylobytes */
    sizeKB: number;
    /** Size in megabytes */
    sizeMB: number;
    /** All data from packages */
    packages: PackageInfo[];
};

declare class TypedError<M extends string = string, D = undefined> extends Error {
    data: D | undefined;
    constructor(message: M, data?: D);
}

type SiziumErrorID = typeof ERROR_ID[keyof typeof ERROR_ID];
declare class SiziumError extends TypedError<SiziumErrorID, {
    msg: string;
    e?: unknown;
}> {
}
declare class PackageSuper {
    #private;
    input: string;
    opts?: {
        /** Skip error on package dependence and return undefined  */
        skipError: boolean;
    } | undefined;
    ERROR_ID: {
        readonly INVALID_PKG_NAME: "INVALID_PKG_NAME";
        readonly GETTING_PKG_NAME: "GETTING_PKG_NAME";
        readonly GETTING_REGISTRY_DATA: "GETTING_REGISTRY_DATA";
        readonly GETTING_LOCAL_DATA: "GETTING_LOCAL_DATA";
    };
    Error: typeof SiziumError;
    constructor(input: string, opts?: {
        /** Skip error on package dependence and return undefined  */
        skipError: boolean;
    } | undefined);
    private processedPackages;
    protected LIFE_CYCLE_SCRIPTS: readonly ["preinstall", "install", "postinstall", "prepublish", "preprepare", "prepare", "postprepare"];
    protected getMainPkgData(allPackages: PackageInfo[]): {
        id: string;
        packageNum: number;
        size: number;
        sizeKB: number;
        sizeMB: number;
        packages: PackageInfo[];
    };
    protected getPkgData(data: PackageJSON, level?: number, unpackedSize?: number, installedBy?: string | string[]): PackageInfo;
    protected getRegistryData(packageName: string, version: string, level?: number, installedBy?: string): Promise<PackageInfo>;
    protected getPackagesData(mainPackage: PackageInfo): Promise<PackageInfo[]>;
}

export { type PackageInfo as P, type SiziumResponse as S, type PackageJSON as a, PackageSuper as b };
