@gmod/bbi
Version:
Parser for BigWig/BigBed files
310 lines (285 loc) • 11.2 kB
JavaScript
let wasm;
export function __wbg_set_wasm(val) {
wasm = val;
}
function addHeapObject(obj) {
if (heap_next === heap.length) heap.push(heap.length + 1);
const idx = heap_next;
heap_next = heap[idx];
heap[idx] = obj;
return idx;
}
function dropObject(idx) {
if (idx < 132) return;
heap[idx] = heap_next;
heap_next = idx;
}
function getArrayU8FromWasm0(ptr, len) {
ptr = ptr >>> 0;
return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
}
let cachedDataViewMemory0 = null;
function getDataViewMemory0() {
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
}
return cachedDataViewMemory0;
}
function getStringFromWasm0(ptr, len) {
ptr = ptr >>> 0;
return decodeText(ptr, len);
}
let cachedUint32ArrayMemory0 = null;
function getUint32ArrayMemory0() {
if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {
cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);
}
return cachedUint32ArrayMemory0;
}
let cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
}
return cachedUint8ArrayMemory0;
}
function getObject(idx) { return heap[idx]; }
let heap = new Array(128).fill(undefined);
heap.push(undefined, null, true, false);
let heap_next = heap.length;
function passArray32ToWasm0(arg, malloc) {
const ptr = malloc(arg.length * 4, 4) >>> 0;
getUint32ArrayMemory0().set(arg, ptr / 4);
WASM_VECTOR_LEN = arg.length;
return ptr;
}
function passArray8ToWasm0(arg, malloc) {
const ptr = malloc(arg.length * 1, 1) >>> 0;
getUint8ArrayMemory0().set(arg, ptr / 1);
WASM_VECTOR_LEN = arg.length;
return ptr;
}
function takeObject(idx) {
const ret = getObject(idx);
dropObject(idx);
return ret;
}
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
cachedTextDecoder.decode();
const MAX_SAFARI_DECODE_BYTES = 2146435072;
let numBytesDecoded = 0;
function decodeText(ptr, len) {
numBytesDecoded += len;
if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
cachedTextDecoder.decode();
numBytesDecoded = len;
}
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
let WASM_VECTOR_LEN = 0;
/**
* Combined decompress + parse for BigWig blocks
* Returns same format as parse_bigwig_block but handles multiple compressed blocks
* @param {Uint8Array} inputs
* @param {Uint32Array} input_offsets
* @param {Uint32Array} input_lengths
* @param {number} max_block_size
* @param {number} req_start
* @param {number} req_end
* @returns {Uint8Array}
*/
export function decompress_and_parse_bigwig(inputs, input_offsets, input_lengths, max_block_size, req_start, req_end) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const ptr0 = passArray8ToWasm0(inputs, wasm.__wbindgen_export);
const len0 = WASM_VECTOR_LEN;
const ptr1 = passArray32ToWasm0(input_offsets, wasm.__wbindgen_export);
const len1 = WASM_VECTOR_LEN;
const ptr2 = passArray32ToWasm0(input_lengths, wasm.__wbindgen_export);
const len2 = WASM_VECTOR_LEN;
wasm.decompress_and_parse_bigwig(retptr, ptr0, len0, ptr1, len1, ptr2, len2, max_block_size, req_start, req_end);
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
if (r3) {
throw takeObject(r2);
}
var v4 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_export2(r0, r1 * 1, 1);
return v4;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
/**
* Combined decompress + parse for summary blocks
* @param {Uint8Array} inputs
* @param {Uint32Array} input_offsets
* @param {Uint32Array} input_lengths
* @param {number} max_block_size
* @param {number} req_chr_id
* @param {number} req_start
* @param {number} req_end
* @returns {Uint8Array}
*/
export function decompress_and_parse_summary(inputs, input_offsets, input_lengths, max_block_size, req_chr_id, req_start, req_end) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const ptr0 = passArray8ToWasm0(inputs, wasm.__wbindgen_export);
const len0 = WASM_VECTOR_LEN;
const ptr1 = passArray32ToWasm0(input_offsets, wasm.__wbindgen_export);
const len1 = WASM_VECTOR_LEN;
const ptr2 = passArray32ToWasm0(input_lengths, wasm.__wbindgen_export);
const len2 = WASM_VECTOR_LEN;
wasm.decompress_and_parse_summary(retptr, ptr0, len0, ptr1, len1, ptr2, len2, max_block_size, req_chr_id, req_start, req_end);
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
if (r3) {
throw takeObject(r2);
}
var v4 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_export2(r0, r1 * 1, 1);
return v4;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
/**
* @param {Uint8Array} input
* @param {number} output_size
* @returns {Uint8Array}
*/
export function inflate_raw(input, output_size) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_export);
const len0 = WASM_VECTOR_LEN;
wasm.inflate_raw(retptr, ptr0, len0, output_size);
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
if (r3) {
throw takeObject(r2);
}
var v2 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_export2(r0, r1 * 1, 1);
return v2;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
/**
* @param {Uint8Array} inputs
* @param {Uint32Array} input_offsets
* @param {Uint32Array} input_lengths
* @param {number} max_block_size
* @returns {Uint8Array}
*/
export function inflate_raw_batch(inputs, input_offsets, input_lengths, max_block_size) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const ptr0 = passArray8ToWasm0(inputs, wasm.__wbindgen_export);
const len0 = WASM_VECTOR_LEN;
const ptr1 = passArray32ToWasm0(input_offsets, wasm.__wbindgen_export);
const len1 = WASM_VECTOR_LEN;
const ptr2 = passArray32ToWasm0(input_lengths, wasm.__wbindgen_export);
const len2 = WASM_VECTOR_LEN;
wasm.inflate_raw_batch(retptr, ptr0, len0, ptr1, len1, ptr2, len2, max_block_size);
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
if (r3) {
throw takeObject(r2);
}
var v4 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_export2(r0, r1 * 1, 1);
return v4;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
/**
* @param {Uint8Array} input
* @returns {Uint8Array}
*/
export function inflate_raw_unknown_size(input) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_export);
const len0 = WASM_VECTOR_LEN;
wasm.inflate_raw_unknown_size(retptr, ptr0, len0);
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
if (r3) {
throw takeObject(r2);
}
var v2 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_export2(r0, r1 * 1, 1);
return v2;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
/**
* Parse a BigWig data block and return packed typed arrays
* Block types: 1 = bedGraph, 2 = varstep, 3 = fixedstep
*
* Returns packed binary: [count: u32][starts: i32*count][ends: i32*count][scores: f32*count]
* @param {Uint8Array} data
* @param {number} req_start
* @param {number} req_end
* @returns {Uint8Array}
*/
export function parse_bigwig_block(data, req_start, req_end) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
const len0 = WASM_VECTOR_LEN;
wasm.parse_bigwig_block(retptr, ptr0, len0, req_start, req_end);
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
var v2 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_export2(r0, r1 * 1, 1);
return v2;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
/**
* Parse a BigWig summary block and return packed typed arrays
* Summary blocks contain: chromId, start, end, validCnt, minScore, maxScore, sumData, sumSqData
*
* Returns: [count: u32][starts: i32*n][ends: i32*n][scores: f32*n][minScores: f32*n][maxScores: f32*n]
* @param {Uint8Array} data
* @param {number} req_chr_id
* @param {number} req_start
* @param {number} req_end
* @returns {Uint8Array}
*/
export function parse_summary_block(data, req_chr_id, req_start, req_end) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
const len0 = WASM_VECTOR_LEN;
wasm.parse_summary_block(retptr, ptr0, len0, req_chr_id, req_start, req_end);
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
var v2 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_export2(r0, r1 * 1, 1);
return v2;
} finally {
wasm.__wbindgen_add_to_stack_pointer(16);
}
}
export function __wbg_Error_52673b7de5a0ca89(arg0, arg1) {
const ret = Error(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
};