import { GitProject } from "@atomist/automation-client";
import { AnalysisTracking } from "../../../tracking/analysisTracker";
import { ScmSearchCriteria } from "../ScmSearchCriteria";
import { Analyzer, PersistenceResult, Spider, SpiderFailure, SpiderOptions, SpiderResult } from "../Spider";
/**
 * Implementating this allows control over cloning
 */
export interface Cloner {
    clone(sourceData: GitHubSearchResult): Promise<GitProject>;
}
/**
 * Spider GitHub. Ensure that GITHUB_TOKEN environment variable is set.
 */
export declare class GitHubSpider implements Spider {
    private readonly cloner;
    private readonly queryFunction;
    spider(criteria: ScmSearchCriteria, analyzer: Analyzer, analysisTracking: AnalysisTracking, opts: SpiderOptions): Promise<SpiderResult>;
    constructor(cloner: Cloner, queryFunction?: (token: string, criteria: ScmSearchCriteria) => AsyncIterable<GitHubSearchResult>);
}
export interface AnalyzeResult {
    failedToCloneOrAnalyze: SpiderFailure[];
    repoCount: number;
    projectCount: number;
    millisTaken: number;
}
export interface AnalyzeAndPersistResult extends AnalyzeResult {
    failedToPersist: SpiderFailure[];
    persisted: PersistenceResult[];
}
/**
 * Result row in a GitHub search
 */
export interface GitHubSearchResult {
    owner: {
        login: string;
    };
    name: string;
    url: string;
    html_url: string;
    timestamp: Date;
    query: string;
}
//# sourceMappingURL=GitHubSpider.d.ts.map