import { Aspect, BaseAspect, FingerprintSelector, FP } from "./Aspect";
/**
 * Aspect derived from existing fingerprints.
 * Surfaces as a single fingerprint. Implementations must
 * also support atomic application.
 */
export interface AtomicAspect<FPI extends FP = FP> extends BaseAspect<FPI> {
    /**
     * Function to extract fingerprint(s) from this project
     */
    consolidate: (fps: FP[]) => Promise<FPI>;
}
export declare function isAtomicAspect(aspect: BaseAspect): aspect is AtomicAspect;
/**
 * Create a composite aspect from the given other aspects or extractors.
 * Will use a single fingerprint that is made of many others. Ordering is significant:
 * atomic aspects can only be computed after normal fingerprints have been calculated.
 * @param aspectData identifying data of new composite fingerprint
 * @param narrower function to select fingerprints from the various aspects that we are interested in
 * @param aspect0 first aspect to combine
 * @param aspects other aspects
 */
export declare function atomicAspect(aspectData: Pick<Aspect, "displayName" | "summary" | "comparators" | "toDisplayableFingerprint" | "toDisplayableFingerprintName" | "name">, narrower: FingerprintSelector, aspect0: Aspect, ...aspects: Aspect[]): AtomicAspect;
