import { ProjectAnalyzer } from "@atomist/sdm-pack-analysis";
import { ProjectAnalysisResult } from "../../ProjectAnalysisResult";
import { ProjectAnalysisResultStore } from "../persist/ProjectAnalysisResultStore";
import { SpideredRepo } from "../SpideredRepo";
import { ScmSearchCriteria } from "./ScmSearchCriteria";
export declare type ProjectAnalysisResultFilter = (pa: ProjectAnalysisResult) => Promise<boolean>;
/**
 * Options for spidering source code hosts
 */
export interface SpiderOptions {
    workspaceId: string;
    persister: ProjectAnalysisResultStore;
    poolSize: number;
    /**
     * Is this record OK or should it be refreshed?
     */
    keepExistingPersisted: ProjectAnalysisResultFilter;
    /**
     * Invoked after the repo is persisted to perform any additional actions.
     */
    onPersisted?: (repo: SpideredRepo) => Promise<void>;
}
export declare type RepoUrl = string;
export declare type PersistenceResult = string;
export interface SpiderFailure {
    repoUrl: string;
    whileTryingTo: string;
    message: string;
}
export interface SpiderResult {
    repositoriesDetected: number;
    projectsDetected: number;
    failed: SpiderFailure[];
    keptExisting: RepoUrl[];
    persistedAnalyses: PersistenceResult[];
}
export declare const EmptySpiderResult: SpiderResult;
/**
 * Spider a data source and progressively persist what we find.
 */
export interface Spider {
    spider(criteria: ScmSearchCriteria, analyzer: ProjectAnalyzer, opts: SpiderOptions): Promise<SpiderResult>;
}
//# sourceMappingURL=Spider.d.ts.map