import { type DecodeOptions, type MateRecord, type ReadFeature } from '../record.ts';
import { type SliceHeader } from './index.ts';
import type { CramFileBlock } from '../file.ts';
import type CramSlice from './index.ts';
import type { Cursors } from '../codecs/_base.ts';
import type CramContainerCompressionScheme from '../container/compressionScheme.ts';
export interface BoundDecoders {
    BF(): number;
    CF(): number;
    RI(): number;
    RL(): number;
    AP(): number;
    RG(): number;
    RN(): Uint8Array;
    MF(): number;
    NS(): number;
    NP(): number;
    TS(): number;
    NF(): number;
    TL(): number;
    FN(): number;
    FC(): number;
    FP(): number;
    DL(): number;
    BB(): Uint8Array;
    QQ(): Uint8Array;
    BS(): number;
    IN(): Uint8Array;
    RS(): number;
    PD(): number;
    HC(): number;
    SC(): Uint8Array;
    MQ(): number;
    BA(): number;
    QS(): number;
    TC(): number;
    TN(): number;
}
type RFData = string | number | number[] | [string, number];
export type RFEntry = readonly [code: string, fn: () => RFData];
export declare function buildRFSchema(bd: BoundDecoders, majorVersion: number): (RFEntry | undefined)[];
export type BulkByteRawDecoder = (dataSeriesName: 'QS' | 'BA', length: number) => Uint8Array | undefined;
export type BoundTagDecoders = Record<string, () => Uint8Array | number | undefined>;
export default function decodeRecord(slice: CramSlice, bd: BoundDecoders, rfSchema: (RFEntry | undefined)[], boundTagDecoders: BoundTagDecoders, compressionScheme: CramContainerCompressionScheme, sliceHeader: SliceHeader, coreDataBlock: CramFileBlock, blocksByContentId: Record<number, CramFileBlock>, cursors: Cursors, majorVersion: number, recordNumber: number, uniqueId: number, decodeOptions?: Required<DecodeOptions>, decodeBulkBytesRaw?: BulkByteRawDecoder): {
    readLength: number;
    sequenceId: number;
    cramFlags: number;
    flags: number;
    alignmentStart: number;
    readGroupId: number;
    readNameRaw: Uint8Array<ArrayBufferLike> | undefined;
    mate: MateRecord | undefined;
    templateSize: number | undefined;
    mateRecordNumber: number | undefined;
    readFeatures: ReadFeature[] | undefined;
    lengthOnRef: number | undefined;
    mappingQuality: number | undefined;
    qualityScores: Uint8Array<ArrayBufferLike> | null | undefined;
    readBases: string | null | undefined;
    tags: Record<string, string | number | number[] | undefined>;
    uniqueId: number;
};
export {};
