/**
 * By convention, exit codes in this base class are below 100
 */
import Command from '@oclif/command';
export interface UriLocation {
    uri: string;
}
export interface IndexedFastaAdapter {
    type: 'IndexedFastaAdapter';
    fastaLocation: UriLocation;
    faiLocation: UriLocation;
}
export interface BgzipFastaAdapter {
    type: 'BgzipFastaAdapter';
    fastaLocation: UriLocation;
    faiLocation: UriLocation;
    gziLocation: UriLocation;
}
export interface TwoBitAdapter {
    type: 'TwoBitAdapter';
    twoBitLocation: UriLocation;
}
export interface ChromeSizesAdapter {
    type: 'ChromSizesAdapter';
    chromSizesLocation: UriLocation;
}
export interface CustomSequenceAdapter {
    type: string;
}
export interface RefNameAliasAdapter {
    type: 'RefNameAliasAdapter';
    location: UriLocation;
}
export interface CustomRefNameAliasAdapter {
    type: string;
}
export interface Sequence {
    type: 'ReferenceSequenceTrack';
    trackId: string;
    adapter: IndexedFastaAdapter | BgzipFastaAdapter | TwoBitAdapter | ChromeSizesAdapter | CustomSequenceAdapter;
}
export interface Assembly {
    name: string;
    aliases?: string[];
    sequence: Sequence;
    refNameAliases?: {
        adapter: RefNameAliasAdapter | CustomRefNameAliasAdapter;
    };
    refNameColors?: string[];
}
export interface Track {
    trackId: string;
    name: string;
}
export interface Config {
    assemblies?: Assembly[];
    configuration?: {};
    connections?: unknown[];
    defaultSession?: {};
    tracks?: Track[];
}
interface GithubRelease {
    tag_name: string;
    prerelease: boolean;
    assets?: [{
        browser_download_url: string;
    }];
}
export default abstract class JBrowseCommand extends Command {
    init(): Promise<void>;
    readFile(location: string): Promise<string>;
    readJsonFile(location: string): Promise<any>;
    writeJsonFile(location: string, contents: any): Promise<void>;
    resolveFileLocation(location: string, check?: boolean, warn?: boolean): Promise<string>;
    readInlineOrFileJson(inlineOrFileName: string): Promise<any>;
    fetchGithubVersions(): Promise<GithubRelease[]>;
    getLatest(): Promise<string>;
    fetchVersions(): AsyncGenerator<GithubRelease[], void, unknown>;
    getTag(tag: string): Promise<any>;
    getBranch(branch: string): Promise<string>;
}
export {};
