import { GenericFilehandle } from 'generic-filehandle2';
export default class TwoBitFile {
    private filehandle;
    private version?;
    private headerP;
    private indexP;
    /**
     * @param {object} args
     * @param {string} [args.path] filesystem path for the .2bit file to open
     * @param {Filehandle} [args.filehandle] node fs.promises-like filehandle for the .2bit file.
     *  Only needs to support `filehandle.read(buffer, offset, length, position)`
     */
    constructor({ filehandle, path, }: {
        filehandle?: GenericFilehandle;
        path?: string;
    });
    _detectEndianness(): Promise<void>;
    getHeader(): Promise<{
        version: number;
        magic: number;
        sequenceCount: number;
        reserved: number;
    }>;
    _getHeader(): Promise<{
        version: number;
        magic: number;
        sequenceCount: number;
        reserved: number;
    }>;
    getIndex(): Promise<{
        [k: string]: number;
    }>;
    _getIndex(): Promise<{
        [k: string]: number;
    }>;
    /**
     * @returns for an array of string sequence names that are found in the file
     */
    getSequenceNames(): Promise<string[]>;
    /**
     * @returns object listing the lengths of all sequences like `{seqName:
     * length, ...}`.
     *
     * note: this is a relatively slow operation especially if there are many
     * refseqs in the file, if you can get this information from a different file
     * e.g. a chrom.sizes file, it will be much faster
     */
    getSequenceSizes(): Promise<Record<string, number>>;
    /**
     * @param seqName name of the sequence
     *
     * @returns sequence length, or undefined if it is not in the file
     */
    getSequenceSize(seqName: string): Promise<number | undefined>;
    _getSequenceSize(offset: number): Promise<number>;
    _record1(offset2: number, len?: number): Promise<{
        dnaSize: number;
        nBlockCount: number;
    }>;
    _record2(offset2: number, len: number): Promise<{
        maskBlockCount: number;
        nBlockSizes: number[];
        nBlockStarts: number[];
    }>;
    _record3(offset2: number, len: number): Promise<{
        maskBlockCount: number;
        maskBlockSizes: number[];
        maskBlockStarts: number[];
        reserved: number;
    }>;
    _getSequenceRecord(offset: number): Promise<{
        dnaSize: number;
        nBlocks: {
            starts: number[];
            sizes: number[];
        };
        maskBlocks: {
            starts: number[];
            sizes: number[];
        };
        dnaPosition: number;
    }>;
    /**
     * @param seqName name of the sequence you want
     *
     * @param [regionStart] optional 0-based half-open start of the sequence
     * region to fetch.
     *
     * @param [regionEnd] optional 0-based half-open end of the sequence region
     * to fetch. defaults to end of the sequence
     *
     * @returns for a string of sequence bases
     */
    getSequence(seqName: string, regionStart?: number, regionEnd?: number): Promise<string | undefined>;
    _getOverlappingBlocks(regionStart: number, regionEnd: number, blockStarts: number[], blockSizes: number[]): any[];
}
