import { RepoRef } from "@atomist/automation-client";
import { FP } from "@atomist/sdm-pack-fingerprints";
import { ProjectAnalysisResult } from "../../ProjectAnalysisResult";
import { CohortAnalysis } from "../spider/analytics";
import { PersistenceResult, SpiderFailure } from "../spider/Spider";
export interface PersistResult {
    attemptedCount: number;
    failed: SpiderFailure[];
    succeeded: PersistenceResult[];
}
export declare function combinePersistResults(r1: PersistResult, r2: PersistResult): PersistResult;
export declare const emptyPersistResult: PersistResult;
export declare type FingerprintKind = Pick<FP, "type" | "name">;
/**
 * Data about the use of a fingerprint in a workspace
 */
export interface FingerprintUsage extends CohortAnalysis {
    name: string;
    type: string;
    categories: string[];
}
/**
 * Interface for basic persistence operations.
 * Implementations can provide additional querying options,
 * e.g. through SQL.
 */
export interface ProjectAnalysisResultStore {
    /**
     * How many repos we've analyzed
     */
    distinctRepoCount(workspaceId: string): Promise<number>;
    latestTimestamp(workspaceId: string): Promise<Date>;
    /**
     * Load in the given workspace
     */
    loadInWorkspace(workspaceId: string): Promise<ProjectAnalysisResult[]>;
    loadByRepoRef(repo: RepoRef): Promise<ProjectAnalysisResult | undefined>;
    /**
     * Load by our database id
     * @param {string} id
     * @return {Promise<ProjectAnalysisResult | undefined>}
     */
    loadById(id: string): Promise<ProjectAnalysisResult | undefined>;
    persist(repos: ProjectAnalysisResult | AsyncIterable<ProjectAnalysisResult> | ProjectAnalysisResult[]): Promise<PersistResult>;
    /**
     * Return distinct fingerprint type/name combinations in this workspace
     */
    distinctFingerprintKinds(workspaceId: string): Promise<FingerprintKind[]>;
    fingerprintUsageForType(workspaceId: string, type?: string): Promise<FingerprintUsage[]>;
    /**
     * Persist a record of analytics
     */
    persistAnalytics(params: Array<{
        workspaceId: string;
        kind: FingerprintKind;
        cohortAnalysis: CohortAnalysis;
    }>): Promise<boolean>;
    /**
     * Return all the fingerprints in this workspace, optionally narrowed by type and name
     * @param dedup deduplicate
     */
    fingerprintsInWorkspace(workspaceId: string, type?: string, name?: string, dedup?: boolean): Promise<FP[]>;
    fingerprintsForProject(id: string): Promise<FP[]>;
}
//# sourceMappingURL=ProjectAnalysisResultStore.d.ts.map