@gmod/cram
Version:
read CRAM files with pure Javascript
68 lines (67 loc) • 2.43 kB
TypeScript
import { Slice } from './craiIndex.ts';
import { SeqFetch } from './cramFile/file.ts';
import CramFile from './cramFile/index.ts';
import CramRecord 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<Slice[]>;
hasDataForReferenceSequence: (seqId: number) => Promise<boolean>;
}
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;
}): Promise<CramRecord[]>;
getRecordsInSlice({ containerStart, sliceStart, sliceBytes, }: {
containerStart: number;
sliceStart: number;
sliceBytes: number;
}, filterFunction: (r: CramRecord) => boolean): Promise<CramRecord[]>;
/**
*
* @param {number} seqId
* @returns {Promise} true if the CRAM file contains data for the given
* reference sequence numerical ID
*/
hasDataForReferenceSequence(seqId: number): Promise<boolean>;
}