import QuickLRU from '@jbrowse/quick-lru'; import CramContainer from './container/index.ts'; import CramRecord from './record.ts'; import { BlockHeader, CompressionMethod } from './sectionParsers.ts'; import type { GenericFilehandle } from 'generic-filehandle2'; export interface CramFileSource { filehandle?: GenericFilehandle; url?: string; path?: string; } export type SeqFetch = (seqId: number, start: number, end: number) => Promise; export type CramFileArgs = CramFileSource & { checkSequenceMD5?: boolean; cacheSize?: number; seqFetch?: SeqFetch; }; export type CramFileBlock = BlockHeader & { _endPosition: number; contentPosition: number; _size: number; content: Uint8Array; crc32?: number; }; export default class CramFile { private file; validateChecksums: boolean; fetchReferenceSequenceCallback?: SeqFetch; options: { checkSequenceMD5?: boolean; cacheSize: number; }; featureCache: QuickLRU>; private header; private _sectionParsers?; constructor(args: CramFileArgs); read(length: number, position: number): Promise>; getDefinition(): Promise<{ magic: string; majorVersion: number; minorVersion: number; fileId: string; }>; getSamHeader(): Promise<{ tag: string; data: { tag: string; value: string; }[]; }[]>; getHeaderText(): Promise; getContainerById(containerNumber: number): Promise; checkCrc32(position: number, length: number, recordedCrc32: number, description: string): Promise; /** * @returns {Promise[number]} the number of containers in the file * * note: this is currently used only in unit tests, and after removing file * length check, relies on a try catch to read return an error to break */ containerCount(): Promise; getContainerAtPosition(position: number): CramContainer; readBlockHeader(position: number): Promise; _parseSection(section: { maxLength: number; parser: (buffer: Uint8Array, offset: number) => { offset: number; value: T; }; }, position: number, size?: number, preReadBuffer?: Uint8Array): Promise; _uncompressPre(compressionMethod: CompressionMethod, inputBuffer: Uint8Array, uncompressedSize: number): Promise>; _uncompress(compressionMethod: CompressionMethod, inputBuffer: Uint8Array, uncompressedSize: number): Promise>; readBlock(position: number): Promise; readBlockFromBuffer(buffer: Uint8Array, bufferOffset: number, filePosition: number): Promise; }