@gmod/cram
Version:
read CRAM files with pure Javascript
33 lines (32 loc) • 1.19 kB
TypeScript
import type { CramFileBlock } from '../file.ts';
import type { DataType } from './dataSeriesTypes.ts';
import type CramSlice from '../slice/index.ts';
export interface DataTypeMapping {
byte: number;
int: number;
long: number;
byteArray: Uint8Array;
}
export interface Cursor {
bitPosition: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
bytePosition: number;
}
export interface PreDecodedIntBlock {
values: Int32Array;
index: number;
}
export interface Cursors {
lastAlignmentStart: number;
coreBlock: Cursor;
externalBlocks: {
getCursor: (contentId: number) => Cursor;
};
preDecodedIntBlocks?: Map<number, PreDecodedIntBlock>;
}
export default abstract class CramCodec<TResult extends DataType = DataType, TParameters = unknown> {
parameters: TParameters;
dataType: DataType;
constructor(parameters: TParameters, dataType: TResult);
abstract decode(slice: CramSlice, coreDataBlock: CramFileBlock, blocksByContentId: Record<number, CramFileBlock>, cursors: Cursors): DataTypeMapping[TResult];
getBytesSubarray(_blocksByContentId: Record<number, CramFileBlock>, _cursors: Cursors, _length: number): Uint8Array | undefined;
}