import { TupleOf } from '../typescript';
import { DataSeriesEncodingMap } from './codecs/dataSeriesTypes';
import { CramEncoding } from './encoding';
export declare function cramFileDefinition(): {
    parser: (b: Uint8Array, _startOffset?: number) => {
        value: {
            magic: string;
            majorVersion: number;
            minorVersion: number;
            fileId: string;
        };
        offset: number;
    };
    maxLength: number;
};
export declare function cramBlockHeader(): {
    parser: (buffer: Uint8Array, _startOffset?: number) => {
        offset: number;
        value: {
            uncompressedSize: number;
            compressedSize: number;
            contentId: number;
            contentType: "FILE_HEADER" | "COMPRESSION_HEADER" | "MAPPED_SLICE_HEADER" | "UNMAPPED_SLICE_HEADER" | "EXTERNAL_DATA" | "CORE_DATA";
            compressionMethod: CompressionMethod;
        };
    };
    maxLength: number;
};
export declare function cramBlockCrc32(): {
    parser: (buffer: Uint8Array, offset: number) => {
        offset: number;
        value: {
            crc32: number;
        };
    };
    maxLength: number;
};
export type CramTagDictionary = string[][];
export declare function cramTagDictionary(): {
    parser: (buffer: Uint8Array, offset: number) => {
        value: {
            size: number;
            ents: string[][];
        };
        offset: number;
    };
};
export interface CramPreservationMap {
    MI: boolean;
    UI: boolean;
    PI: boolean;
    RN: boolean;
    AP: boolean;
    RR: boolean;
    SM: [number, number, number, number, number];
    TD: CramTagDictionary;
}
export declare function cramPreservationMap(): {
    parser: (buffer: Uint8Array, offset: number) => {
        value: {
            mapSize: number;
            mapCount: number;
            ents: ({
                key: string;
                value: boolean;
            } | {
                key: string;
                value: number[];
            } | {
                key: string;
                value: string[][];
            })[];
        };
        offset: number;
    };
};
export interface MappedSliceHeader {
    refSeqId: number;
    refSeqStart: number;
    refSeqSpan: number;
    numRecords: number;
    recordCounter: number;
    numBlocks: number;
    numContentIds: number;
    contentIds: number[];
    refBaseBlockId: number;
    md5?: TupleOf<number, 16>;
}
export interface UnmappedSliceHeader {
    numRecords: number;
    recordCounter: number;
    numBlocks: number;
    numContentIds: number;
    contentIds: number[];
    md5?: TupleOf<number, 16>;
}
export declare function isMappedSliceHeader(header: unknown): header is MappedSliceHeader;
interface Value {
    codecId: number;
    parametersBytes: number;
    parameters: Record<string, unknown>;
}
export type CompressionMethod = 'raw' | 'gzip' | 'bzip2' | 'lzma' | 'rans' | 'rans4x16' | 'arith' | 'fqzcomp' | 'tok3';
export interface BlockHeader {
    compressionMethod: CompressionMethod;
    contentType: 'FILE_HEADER' | 'COMPRESSION_HEADER' | 'MAPPED_SLICE_HEADER' | 'UNMAPPED_SLICE_HEADER' | 'EXTERNAL_DATA' | 'CORE_DATA';
    contentId: number;
    compressedSize: number;
    uncompressedSize: number;
}
export interface CramCompressionHeader {
    preservation: CramPreservationMap;
    dataSeriesEncoding: DataSeriesEncodingMap;
    tagEncoding: Record<string, CramEncoding>;
    _size: number;
    _endPosition: number;
}
export declare function getSectionParsers(majorVersion: number): {
    cramFileDefinition: {
        parser: (b: Uint8Array, _startOffset?: number) => {
            value: {
                magic: string;
                majorVersion: number;
                minorVersion: number;
                fileId: string;
            };
            offset: number;
        };
        maxLength: number;
    };
    cramBlockHeader: {
        parser: (buffer: Uint8Array, _startOffset?: number) => {
            offset: number;
            value: {
                uncompressedSize: number;
                compressedSize: number;
                contentId: number;
                contentType: "FILE_HEADER" | "COMPRESSION_HEADER" | "MAPPED_SLICE_HEADER" | "UNMAPPED_SLICE_HEADER" | "EXTERNAL_DATA" | "CORE_DATA";
                compressionMethod: CompressionMethod;
            };
        };
        maxLength: number;
    };
    cramBlockCrc32: {
        parser: (buffer: Uint8Array, offset: number) => {
            offset: number;
            value: {
                crc32: number;
            };
        };
        maxLength: number;
    };
    cramDataSeriesEncodingMap: {
        parser: (buffer: Uint8Array, offset: number) => {
            value: {
                mapSize: number;
                ents: {
                    key: string;
                    value: Value;
                }[];
                mapCount: number;
            };
            offset: number;
        };
    };
    cramTagEncodingMap: {
        parser: (buffer: Uint8Array, offset: number) => {
            value: {
                mapSize: number;
                ents: {
                    key: string;
                    value: Value;
                }[];
                mapCount: number;
            };
            offset: number;
        };
    };
    cramCompressionHeader: {
        parser: (buffer: Uint8Array, offset: number) => {
            value: {
                dataSeriesEncoding: DataSeriesEncodingMap;
                preservation: CramPreservationMap;
                tagEncoding: Record<string, CramEncoding>;
            };
            offset: number;
        };
    };
    cramEncoding: {
        parser: (buffer: Uint8Array, offset: number) => {
            value: Value;
            offset: number;
        };
    };
    cramUnmappedSliceHeader: {
        parser: (buffer: Uint8Array, offset: number) => {
            value: {
                recordCounter: number;
                md5: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number] | undefined;
                contentIds: number[];
                numContentIds: number;
                numBlocks: number;
                numRecords: number;
            };
            offset: number;
        };
        maxLength: (numContentIds: number) => number;
    };
    cramMappedSliceHeader: {
        parser: (buffer: Uint8Array, offset: number) => {
            value: {
                md5: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number] | undefined;
                numBlocks: number;
                numRecords: number;
                numContentIds: number;
                refSeqSpan: number;
                refSeqId: number;
                refSeqStart: number;
                recordCounter: number;
                refBaseBlockId: number;
                contentIds: number[];
            };
            offset: number;
        };
        maxLength: (numContentIds: number) => number;
    };
    cramContainerHeader1: {
        maxLength: number;
        parser: (buffer: Uint8Array, offset: number) => {
            value: {
                length: number;
                refSeqId: number;
                refSeqStart: number;
                alignmentSpan: number;
                numBlocks: number;
                numLandmarks: number;
                numBases: number | undefined;
                recordCounter: number;
                numRecords: number;
            };
            offset: number;
        };
    };
    cramContainerHeader2: {
        parser: (buffer: Uint8Array, offset: number) => {
            value: {
                numLandmarks: number;
                landmarks: number[];
                crc32?: number | undefined;
            };
            offset: number;
        };
        maxLength: (numLandmarks: number) => number;
    };
};
export {};
