import { PushImpactListenerInvocation } from "@atomist/sdm";
import { Project } from "@atomist/automation-client";
import { Aspect, FP } from "@atomist/sdm-pack-fingerprint";
import { Scorer, ScorerReturn, Scores, ScoreWeightings, WeightedScore } from "../../scorer/Score";
import { RepositoryScorer, RepoToScore } from "../AspectRegistry";
/**
 * Aspect that scores pushes or projects
 */
export declare type ScoredAspect = Aspect<WeightedScore>;
export declare function isScoredAspectFingerprint(fp: FP): fp is FP<WeightedScore>;
/**
 * Score the project and the push
 */
export interface PushScorer extends Scorer {
    scorePush: (pili: PushImpactListenerInvocation) => Promise<ScorerReturn>;
}
/**
 * Default properties to configure ScoredAspect
 */
export declare const ScoredAspectDefaults: Pick<ScoredAspect, "stats" | "toDisplayableFingerprint">;
/**
 * Scorer that works with project content
 */
export interface ProjectScorer extends Scorer {
    scoreProject: (p: Project) => Promise<ScorerReturn>;
}
/**
 * Scorer that can be used in an aspect
 */
export declare type AspectCompatibleScorer = RepositoryScorer | ProjectScorer | PushScorer;
export declare function isRepositoryScorer(s: AspectCompatibleScorer): s is RepositoryScorer;
export declare function isPushScorer(scorer: AspectCompatibleScorer): scorer is PushScorer;
export declare function isPushOrProjectScorer(scorer: AspectCompatibleScorer): scorer is (PushScorer | ProjectScorer);
export declare function fingerprintScoresFor(repositoryScorers: RepositoryScorer[], toScore: RepoToScore): Promise<Scores>;
export declare function emitScoringAspect(name: string, scorers: AspectCompatibleScorer[], scoreWeightings: ScoreWeightings): ScoredAspect | undefined;
//# sourceMappingURL=ScoredAspect.d.ts.map