UNPKG

@gmod/bam

Version:

Parser for BAM and BAM index (bai) files

45 lines (44 loc) 1.86 kB
import type Chunk from './chunk.ts'; import type { BaseOpts } from './util.ts'; import type { Offset, VirtualOffset } from './virtualOffset.ts'; import type { GenericFilehandle } from 'generic-filehandle2'; export interface Region { refId: number; start: number; end: number; } export interface RefIndex { binIndex: Record<number, Chunk[]>; stats?: { lineCount: number; }; } export interface ParsedIndexBase<R extends RefIndex = RefIndex> { firstDataLine: VirtualOffset | undefined; refCount: number; maxBlockSize: number; indices: (refId: number) => R | undefined; } export declare function memoizeByRefId<T>(getIndices: (refId: number) => T | undefined, maxSize?: number): (refId: number) => T | undefined; export default abstract class IndexFile<TParsed extends ParsedIndexBase = ParsedIndexBase> { filehandle: GenericFilehandle; renameRefSeq: (s: string) => string; private setupP?; constructor({ filehandle, renameRefSeq, }: { filehandle: GenericFilehandle; renameRefSeq?: (a: string) => string; }); protected abstract _parse(opts: BaseOpts): Promise<TParsed>; abstract indexCov(refId: number, start?: number, end?: number): Promise<{ start: number; end: number; score: number; }[]>; protected abstract reg2bins(min: number, max: number): readonly (readonly [number, number])[]; protected abstract getLowestChunk(refIndex: RefIndex, min: number): Offset | undefined; blocksForRange(refId: number, min: number, max: number, opts?: BaseOpts): Promise<Chunk[]>; parse(opts?: BaseOpts): Promise<TParsed>; lineCount(refId: number, opts?: BaseOpts): Promise<number>; hasRefSeq(seqId: number, opts?: BaseOpts): Promise<boolean>; estimatedBytesForRegions(regions: Region[], opts?: BaseOpts): Promise<number>; }