import { Slice } from './craiIndex.ts'; import { SeqFetch } from './cramFile/file.ts'; import CramFile from './cramFile/index.ts'; import CramRecord, { DecodeOptions } from './cramFile/record.ts'; import type { GenericFilehandle } from 'generic-filehandle2'; export interface CramFileSource { cramFilehandle?: GenericFilehandle; cramUrl?: string; cramPath?: string; } export interface CramIndexLike { getEntriesForRange: (seqId: number, start: number, end: number) => Promise; hasDataForReferenceSequence: (seqId: number) => Promise; } export default class IndexedCramFile { cram: CramFile; index: CramIndexLike; /** * * @param {object} args * @param {CramFile} args.cram * * @param {Index-like} args.index object that supports * getEntriesForRange(seqId,start,end) -> Promise[Array[index entries]] * * @param {number} [args.cacheSize] optional maximum number of CRAM records * to cache. default 20,000 * * @param {boolean} [args.checkSequenceMD5] - default true. if false, * disables verifying the MD5 checksum of the reference sequence underlying a * slice. In some applications, this check can cause an inconvenient amount * (many megabases) of sequences to be fetched. */ constructor(args: { index: CramIndexLike; } & ({ cram: CramFile; } | ({ cram?: undefined; seqFetch?: SeqFetch; checkSequenceMD5?: boolean; cacheSize?: number; } & CramFileSource))); /** * * @param seq numeric ID of the reference sequence * @param start start of the range of interest. 1-based closed coordinates. * @param end end of the range of interest. 1-based closed coordinates. */ getRecordsForRange(seq: number, start: number, end: number, opts?: { viewAsPairs?: boolean; pairAcrossChr?: boolean; maxInsertSize?: number; } & DecodeOptions): Promise; getRecordsInSlice({ containerStart, sliceStart, sliceBytes, }: { containerStart: number; sliceStart: number; sliceBytes: number; }, filterFunction: (r: CramRecord) => boolean, decodeOptions?: DecodeOptions): Promise; /** * * @param {number} seqId * @returns {Promise} true if the CRAM file contains data for the given * reference sequence numerical ID */ hasDataForReferenceSequence(seqId: number): Promise; }