UNPKG

@gmod/cram

Version:

read CRAM files with pure Javascript

84 lines (83 loc) 3.07 kB
import QuickLRU from '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<string>; 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<string, Promise<CramRecord[]>>; private header; constructor(args: CramFileArgs); read(length: number, position: number): Promise<Uint8Array<ArrayBuffer>>; getDefinition(): Promise<{ magic: string; majorVersion: number; minorVersion: number; fileId: string; }>; getSamHeader(): Promise<{ tag: string; data: { tag: string; value: string; }[]; }[]>; getHeaderText(): Promise<string | undefined>; getContainerById(containerNumber: number): Promise<CramContainer | undefined>; checkCrc32(position: number, length: number, recordedCrc32: number, description: string): Promise<void>; /** * @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<number | undefined>; getContainerAtPosition(position: number): CramContainer; readBlockHeader(position: number): Promise<{ uncompressedSize: number; compressedSize: number; contentId: number; contentType: "FILE_HEADER" | "COMPRESSION_HEADER" | "MAPPED_SLICE_HEADER" | "UNMAPPED_SLICE_HEADER" | "EXTERNAL_DATA" | "CORE_DATA"; compressionMethod: CompressionMethod; } & { _endPosition: number; _size: number; }>; _parseSection<T>(section: { maxLength: number; parser: (buffer: Uint8Array, offset: number) => { offset: number; value: T; }; }, position: number, size?: number, preReadBuffer?: Uint8Array): Promise<T & { _endPosition: number; _size: number; }>; _uncompressPre(compressionMethod: CompressionMethod, inputBuffer: Uint8Array, uncompressedSize: number): Promise<any>; _uncompress(compressionMethod: CompressionMethod, inputBuffer: Uint8Array, uncompressedSize: number): Promise<any>; readBlock(position: number): Promise<CramFileBlock>; }