import { IndexedCramFile } from '@gmod/cram';
import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
import CramSlightlyLazyFeature from './CramSlightlyLazyFeature';
import type { FilterBy } from '../shared/types';
import type { CramRecord } from '@gmod/cram';
import type { BaseOptions, BaseSequenceAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
import type { Feature, Region } from '@jbrowse/core/util';
interface Header {
    idToName?: string[];
    nameToId?: Record<string, number>;
    readGroups?: (string | undefined)[];
}
export default class CramAdapter extends BaseFeatureDataAdapter {
    samHeader: Header;
    private setupP?;
    private configureP?;
    private ultraLongFeatureCache;
    private seqIdToRefName;
    private seqIdToOriginalRefName;
    configurePre(): Promise<{
        cram: IndexedCramFile;
        sequenceAdapter: BaseSequenceAdapter;
    }>;
    configure(): Promise<{
        cram: IndexedCramFile;
        sequenceAdapter: BaseSequenceAdapter;
    }>;
    getHeader(_opts?: BaseOptions): Promise<string | undefined>;
    private seqFetch;
    private setupPre;
    private setupPre2;
    setup(opts?: BaseOptions): Promise<{
        samHeader: Header;
        cram: IndexedCramFile;
        sequenceAdapter: BaseSequenceAdapter;
    }>;
    getRefNames(opts?: BaseOptions): Promise<string[]>;
    refNameToId(refName: string): number | undefined;
    refIdToName(refId: number): string | undefined;
    refIdToOriginalName(refId: number): string | undefined;
    getFeatures(region: Region & {
        originalRefName?: string;
    }, opts?: BaseOptions & {
        filterBy: FilterBy;
    }): import("rxjs").Observable<Feature>;
    freeResources(): void;
    cramRecordToFeature(record: CramRecord): CramSlightlyLazyFeature;
    getMultiRegionFeatureDensityStats(regions: Region[], opts?: BaseOptions): Promise<{
        bytes: number;
        fetchSizeLimit: any;
    }>;
    private bytesForRegions;
}
export {};
