import Chunk from './chunk.ts';
import type { Offset, VirtualOffset } from './virtualOffset.ts';
export interface TagFilter {
    tag: string;
    value?: string;
}
export interface FilterBy {
    flagInclude?: number;
    flagExclude?: number;
    tagFilter?: TagFilter;
}
export interface BamOpts {
    viewAsPairs?: boolean;
    pairAcrossChr?: boolean;
    maxInsertSize?: number;
    signal?: AbortSignal;
    filterBy?: FilterBy;
}
export interface BaseOpts {
    signal?: AbortSignal;
}
export declare function optimizeChunks(chunks: Chunk[], lowest?: Offset): Chunk[];
export declare function parsePseudoBin(bytes: Uint8Array, offset: number): {
    lineCount: number;
};
export declare function parseRefSeqs(uncba: Uint8Array, start: number, renameRefSeq: (s: string) => string): {
    chrToIndex: Record<string, number>;
    indexToChr: {
        refName: string;
        length: number;
    }[];
} | undefined;
export declare function findFirstData(firstDataLine: VirtualOffset | undefined, virtualOffset: VirtualOffset): VirtualOffset;
export declare function parseNameBytes(namesBytes: Uint8Array, renameRefSeq?: (arg: string) => string): {
    refNameToId: Record<string, number>;
    refIdToName: string[];
};
export declare function concatUint8Array(args: Uint8Array[]): Uint8Array<ArrayBuffer>;
export declare function filterReadFlag(flags: number, flagInclude: number, flagExclude: number): boolean;
export declare function filterTagValue(readVal: unknown, filterVal?: string): boolean;
export declare function filterCacheKey(filterBy?: FilterBy): string;
interface Filterable {
    flags: number;
    tags: Record<string, unknown>;
}
export declare function applyFilters<T extends Filterable>(records: T[], filterBy: FilterBy): T[];
interface Positioned {
    ref_id: number;
    start: number;
    end: number;
}
export declare function appendInRange<T extends Positioned>(records: T[], chrId: number, min: number, max: number, out?: T[]): T[];
export {};
