/**
 * By convention, exit codes in this base class are below 100
 */
import Command from '@oclif/command';
export interface UriLocation {
    uri: string;
    locationType: 'UriLocation';
}
export interface LocalPathLocation {
    localPath: string;
    locationType: 'LocalPathLocation';
}
export interface Gff3TabixAdapter {
    type: 'Gff3TabixAdapter';
    gffGzLocation: UriLocation | LocalPathLocation;
}
export interface Gff3Adapter {
    type: 'Gff3Adapter';
    gffLocation: UriLocation | LocalPathLocation;
}
export interface GtfAdapter {
    type: 'GtfAdapter';
    gtfLocation: UriLocation;
}
export interface VcfTabixAdapter {
    type: 'VcfTabixAdapter';
    vcfGzLocation: UriLocation | LocalPathLocation;
}
export interface VcfAdapter {
    type: 'VcfAdapter';
    vcfLocation: UriLocation | LocalPathLocation;
}
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 {
    displayName?: string;
    name: string;
    aliases?: string[];
    sequence: Sequence;
    refNameAliases?: {
        adapter: RefNameAliasAdapter | CustomRefNameAliasAdapter;
    };
    refNameColors?: string[];
}
export interface TrixTextSearchAdapter {
    type: string;
    textSearchAdapterId: string;
    ixFilePath: UriLocation;
    ixxFilePath: UriLocation;
    metaFilePath: UriLocation;
    assemblyNames: string[];
}
export interface TextSearching {
    indexingFeatureTypesToExclude?: string[];
    indexingAttributes?: string[];
    textSearchAdapter: TrixTextSearchAdapter;
}
export interface Track {
    trackId: string;
    name: string;
    assemblyNames: string[];
    adapter: Gff3TabixAdapter | GtfAdapter | VcfTabixAdapter | Gff3Adapter | VcfAdapter;
    textSearching?: TextSearching;
}
export interface Config {
    assemblies?: Assembly[];
    assembly?: Assembly;
    configuration?: {};
    aggregateTextSearchAdapters?: TrixTextSearchAdapter[];
    connections?: unknown[];
    defaultSession?: {};
    tracks?: Track[];
}
interface GithubRelease {
    tag_name: string;
    prerelease: boolean;
    assets?: [
        {
            browser_download_url: string;
            name: string;
        }
    ];
}
export default abstract class JBrowseCommand extends Command {
    init(): Promise<void>;
    readFile(location: string): Promise<string>;
    readJsonFile(location: string): Promise<Record<string, unknown>>;
    writeJsonFile(location: string, contents: any): Promise<void>;
    resolveFileLocation(location: string, check?: boolean, inPlace?: boolean): Promise<string>;
    readInlineOrFileJson(inlineOrFileName: string): Promise<any>;
    fetchGithubVersions(): Promise<GithubRelease[]>;
    getLatest(): Promise<string>;
    fetchVersions(): AsyncGenerator<GithubRelease[], void, unknown>;
    getTag(tag: string): Promise<string>;
    getBranch(branch: string): Promise<string>;
}
export {};
