import type { Warning } from "@nodesecure/js-x-ray";
import * as Vulnera from "@nodesecure/vulnera";
import type { Payload, Dependency, DependencyVersion, Publisher, Maintainer, Repository, DependencyLinks } from "./types.js";
export interface PayloadComparison {
    title: string;
    warnings: ArrayDiff<string>;
    scannerVersion: ValueComparison<string>;
    vulnerabilityStrategy: ValueComparison<string>;
    dependencies: DependenciesComparison;
}
export interface DependenciesComparison {
    compared: Map<string, DependencyComparison>;
    added: Map<string, Dependency>;
    removed: Map<string, Dependency>;
}
export interface DependencyComparison {
    publishers: ArrayDiff<Publisher>;
    maintainers: ArrayDiff<Maintainer>;
    versions: VersionsComparisonResult;
    vulnerabilities: ArrayDiff<Vulnera.StandardVulnerability>;
}
export interface VersionsComparisonResult {
    compared: Map<string, DependencyVersionComparison>;
    added: Map<string, DependencyVersion>;
    removed: Map<string, DependencyVersion>;
}
export interface DependencyVersionComparison {
    id: ValueComparison<number>;
    size: ValueComparison<number>;
    usedBy: DictionaryComparison<string>;
    isDevDependency: ValueComparison<boolean>;
    existOnRemoteRegistry: ValueComparison<boolean>;
    description: ValueComparison<string>;
    author: ValueComparison<Maintainer>;
    engines: DictionaryComparison<string>;
    repository: ValueComparison<Repository>;
    scripts: DictionaryComparison<string>;
    warnings: ArrayDiff<Warning>;
    composition: CompositionComparison;
    uniqueLicenseIds: ArrayDiff<string>;
    flags: ArrayDiff<string>;
    links: ValueComparison<DependencyLinks>;
}
export interface DictionaryComparison<T> {
    compared: Map<string, ValueComparison<T>>;
    added: Map<string, T>;
    removed: Map<string, T>;
}
export interface CompositionComparison {
    minified: ArrayDiff<string>;
    required_thirdparty: ArrayDiff<string>;
    required_nodejs: ArrayDiff<string>;
    unused: ArrayDiff<string>;
    missing: ArrayDiff<string>;
}
export type ValueComparison<T> = {
    prev: T;
    now: T;
} | undefined;
export interface ArrayDiff<T> {
    added: T[];
    removed: T[];
}
export declare function comparePayloads(payload: Payload, comparedPayload: Payload): PayloadComparison;
export declare function arrayOfObjectsDiffByKey<T extends Record<string, any>>(key: string, original?: T[], toCompare?: T[]): ArrayDiff<T>;
//# sourceMappingURL=comparePayloads.d.ts.map