@gmod/cram
Version:
read CRAM files with pure Javascript
46 lines (39 loc) • 1.02 kB
text/typescript
import { CramFileBlock } from '../file.ts'
import { DataType } from './dataSeriesTypes.ts'
import 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 Cursors {
lastAlignmentStart: number
coreBlock: Cursor
externalBlocks: {
map: Map<any, any>
getCursor: (contentId: number) => Cursor
}
}
// codec base class
export default abstract class CramCodec<
TResult extends DataType = DataType,
TParameters = unknown,
> {
public parameters: TParameters
public dataType: DataType
constructor(parameters: TParameters, dataType: TResult) {
this.parameters = parameters
this.dataType = dataType
}
abstract decode(
slice: CramSlice,
coreDataBlock: CramFileBlock,
blocksByContentId: Record<number, CramFileBlock>,
cursors: Cursors,
): DataTypeMapping[TResult] | undefined
}