@gmod/bbi 5.0.2 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +5 -5
- package/dist/bbi.d.ts +15 -16
- package/dist/bbi.js +194 -221
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.js +138 -161
- package/dist/bigbed.js.map +1 -1
- package/dist/bigwig.js +11 -22
- package/dist/bigwig.js.map +1 -1
- package/dist/block-view.d.ts +2 -3
- package/dist/block-view.js +188 -209
- package/dist/block-view.js.map +1 -1
- package/dist/unzip-pako.d.ts +1 -2
- package/dist/unzip-pako.js.map +1 -1
- package/dist/util.js +3 -14
- package/dist/util.js.map +1 -1
- package/esm/bbi.d.ts +15 -16
- package/esm/bbi.js +62 -68
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.js +44 -39
- package/esm/bigbed.js.map +1 -1
- package/esm/bigwig.js +2 -2
- package/esm/bigwig.js.map +1 -1
- package/esm/block-view.d.ts +2 -3
- package/esm/block-view.js +29 -40
- package/esm/block-view.js.map +1 -1
- package/esm/unzip-pako.d.ts +1 -2
- package/esm/unzip-pako.js.map +1 -1
- package/package.json +5 -7
- package/src/bbi.ts +74 -97
- package/src/bigbed.ts +44 -61
- package/src/bigwig.ts +1 -2
- package/src/block-view.ts +36 -54
- package/src/unzip-pako.ts +1 -2
package/dist/bigbed.js
CHANGED
|
@@ -1,31 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
4
|
};
|
|
25
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
6
|
exports.BigBed = void 0;
|
|
27
7
|
exports.filterUndef = filterUndef;
|
|
28
|
-
const buffer_1 = require("buffer");
|
|
29
8
|
const rxjs_1 = require("rxjs");
|
|
30
9
|
const operators_1 = require("rxjs/operators");
|
|
31
10
|
const abortable_promise_cache_1 = __importDefault(require("@gmod/abortable-promise-cache"));
|
|
@@ -40,20 +19,18 @@ class BigBed extends bbi_1.BBI {
|
|
|
40
19
|
super(...arguments);
|
|
41
20
|
this.readIndicesCache = new abortable_promise_cache_1.default({
|
|
42
21
|
cache: new quick_lru_1.default({ maxSize: 1 }),
|
|
43
|
-
fill: (args, signal) => this._readIndices(
|
|
22
|
+
fill: (args, signal) => this._readIndices({ ...args, signal }),
|
|
44
23
|
});
|
|
45
24
|
}
|
|
46
25
|
readIndices(opts = {}) {
|
|
47
|
-
const { signal
|
|
26
|
+
const { signal, ...rest } = opts;
|
|
48
27
|
return this.readIndicesCache.get(JSON.stringify(rest), opts, signal);
|
|
49
28
|
}
|
|
50
29
|
/*
|
|
51
30
|
* retrieve unzoomed view for any scale
|
|
52
31
|
*/
|
|
53
|
-
getView(_scale, opts) {
|
|
54
|
-
return
|
|
55
|
-
return this.getUnzoomedView(opts);
|
|
56
|
-
});
|
|
32
|
+
async getView(_scale, opts) {
|
|
33
|
+
return this.getUnzoomedView(opts);
|
|
57
34
|
}
|
|
58
35
|
/*
|
|
59
36
|
* parse the bigbed extraIndex fields
|
|
@@ -62,137 +39,137 @@ class BigBed extends bbi_1.BBI {
|
|
|
62
39
|
* @return a Promise for an array of Index data structure since there can be
|
|
63
40
|
* multiple extraIndexes in a bigbed, see bedToBigBed documentation
|
|
64
41
|
*/
|
|
65
|
-
_readIndices(opts) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
42
|
+
async _readIndices(opts) {
|
|
43
|
+
const { extHeaderOffset } = await this.getHeader(opts);
|
|
44
|
+
const b = await this.bbi.read(64, Number(extHeaderOffset));
|
|
45
|
+
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
46
|
+
let offset = 0;
|
|
47
|
+
// const _size = dataView.getUint16(offset, true)
|
|
48
|
+
offset += 2;
|
|
49
|
+
const count = dataView.getUint16(offset, true);
|
|
50
|
+
offset += 2;
|
|
51
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
52
|
+
offset += 8;
|
|
53
|
+
// no extra index is defined if count==0
|
|
54
|
+
if (count === 0) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const blocklen = 20;
|
|
58
|
+
const len = blocklen * count;
|
|
59
|
+
const buffer = await this.bbi.read(len, Number(dataOffset));
|
|
60
|
+
const indices = [];
|
|
61
|
+
for (let i = 0; i < count; i += 1) {
|
|
62
|
+
const b = buffer.subarray(i * blocklen);
|
|
71
63
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
72
64
|
let offset = 0;
|
|
73
|
-
|
|
65
|
+
const type = dataView.getInt16(offset, true);
|
|
74
66
|
offset += 2;
|
|
75
|
-
const
|
|
67
|
+
const fieldcount = dataView.getInt16(offset, true);
|
|
76
68
|
offset += 2;
|
|
77
|
-
const dataOffset = Number(dataView.getBigUint64(offset,
|
|
78
|
-
offset += 8;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const blocklen = 20;
|
|
84
|
-
const len = blocklen * count;
|
|
85
|
-
const { buffer } = yield this.bbi.read(buffer_1.Buffer.alloc(len), 0, len, Number(dataOffset));
|
|
86
|
-
const indices = [];
|
|
87
|
-
for (let i = 0; i < count; i += 1) {
|
|
88
|
-
const b = buffer.subarray(i * blocklen);
|
|
89
|
-
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
90
|
-
let offset = 0;
|
|
91
|
-
const type = dataView.getInt16(offset, le);
|
|
92
|
-
offset += 2;
|
|
93
|
-
const fieldcount = dataView.getInt16(offset, le);
|
|
94
|
-
offset += 2;
|
|
95
|
-
const dataOffset = Number(dataView.getBigUint64(offset, le));
|
|
96
|
-
offset += 8 + 4; //4 skip
|
|
97
|
-
const field = dataView.getInt16(offset, le);
|
|
98
|
-
indices.push({ type, fieldcount, offset: Number(dataOffset), field });
|
|
99
|
-
}
|
|
100
|
-
return indices;
|
|
101
|
-
});
|
|
69
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
70
|
+
offset += 8 + 4; //4 skip
|
|
71
|
+
const field = dataView.getInt16(offset, true);
|
|
72
|
+
indices.push({ type, fieldcount, offset: Number(dataOffset), field });
|
|
73
|
+
}
|
|
74
|
+
return indices;
|
|
102
75
|
}
|
|
103
76
|
/*
|
|
104
77
|
* perform a search in the bigbed extraIndex to find which blocks in the
|
|
105
78
|
* bigbed data to look for the actual feature data
|
|
106
79
|
*
|
|
107
80
|
* @param name - the name to search for
|
|
81
|
+
*
|
|
108
82
|
* @param opts - a SearchOptions argument with optional signal
|
|
83
|
+
*
|
|
109
84
|
* @return a Promise for an array of bigbed block Loc entries
|
|
110
85
|
*/
|
|
111
|
-
searchExtraIndexBlocks(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
86
|
+
async searchExtraIndexBlocks(name, opts = {}) {
|
|
87
|
+
const indices = await this.readIndices(opts);
|
|
88
|
+
if (indices.length === 0) {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
const decoder = new TextDecoder('utf8');
|
|
92
|
+
const locs = indices.map(async (index) => {
|
|
93
|
+
const { offset: offset2, field } = index;
|
|
94
|
+
const b = await this.bbi.read(32, offset2, opts);
|
|
95
|
+
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
96
|
+
let offset = 0;
|
|
97
|
+
// const _magic = dataView.getInt32(offset, true)
|
|
98
|
+
offset += 4;
|
|
99
|
+
const blockSize = dataView.getInt32(offset, true);
|
|
100
|
+
offset += 4;
|
|
101
|
+
const keySize = dataView.getInt32(offset, true);
|
|
102
|
+
offset += 4;
|
|
103
|
+
const valSize = dataView.getInt32(offset, true);
|
|
104
|
+
offset += 4;
|
|
105
|
+
// const _itemCount = Number(dataView.getBigUint64(offset, true))
|
|
106
|
+
offset += 8;
|
|
107
|
+
const bptReadNode = async (nodeOffset) => {
|
|
108
|
+
const val = Number(nodeOffset);
|
|
109
|
+
const len = 4 + blockSize * (keySize + valSize);
|
|
110
|
+
const buffer = await this.bbi.read(len, val, opts);
|
|
111
|
+
const b = buffer;
|
|
123
112
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
124
113
|
let offset = 0;
|
|
125
|
-
|
|
126
|
-
offset +=
|
|
127
|
-
const
|
|
128
|
-
offset +=
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
offset += 2; //skip 1
|
|
144
|
-
const cnt = dataView.getInt16(offset, le);
|
|
145
|
-
offset += 2;
|
|
146
|
-
const keys = [];
|
|
147
|
-
if (nodeType === 0) {
|
|
148
|
-
const leafkeys = [];
|
|
149
|
-
for (let i = 0; i < cnt; i++) {
|
|
150
|
-
const key = b
|
|
151
|
-
.subarray(offset, offset + keySize)
|
|
152
|
-
.toString()
|
|
153
|
-
.replaceAll('\0', '');
|
|
154
|
-
offset += keySize;
|
|
155
|
-
const dataOffset = Number(dataView.getBigUint64(offset, le));
|
|
156
|
-
offset += 8;
|
|
157
|
-
leafkeys.push({ key, offset: dataOffset });
|
|
158
|
-
}
|
|
159
|
-
let lastOffset = 0;
|
|
160
|
-
for (const { key, offset } of leafkeys) {
|
|
161
|
-
if (name.localeCompare(key) < 0 && lastOffset) {
|
|
162
|
-
return bptReadNode(lastOffset);
|
|
163
|
-
}
|
|
164
|
-
lastOffset = offset;
|
|
165
|
-
}
|
|
166
|
-
return bptReadNode(lastOffset);
|
|
114
|
+
const nodeType = dataView.getInt8(offset);
|
|
115
|
+
offset += 2; //skip 1
|
|
116
|
+
const cnt = dataView.getInt16(offset, true);
|
|
117
|
+
offset += 2;
|
|
118
|
+
const keys = [];
|
|
119
|
+
if (nodeType === 0) {
|
|
120
|
+
const leafkeys = [];
|
|
121
|
+
for (let i = 0; i < cnt; i++) {
|
|
122
|
+
const key = decoder
|
|
123
|
+
.decode(b.subarray(offset, offset + keySize))
|
|
124
|
+
.replaceAll('\0', '');
|
|
125
|
+
offset += keySize;
|
|
126
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
127
|
+
offset += 8;
|
|
128
|
+
leafkeys.push({
|
|
129
|
+
key,
|
|
130
|
+
offset: dataOffset,
|
|
131
|
+
});
|
|
167
132
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
.toString()
|
|
173
|
-
.replaceAll('\0', '');
|
|
174
|
-
offset += keySize;
|
|
175
|
-
const dataOffset = Number(dataView.getBigUint64(offset, le));
|
|
176
|
-
offset += 8;
|
|
177
|
-
const length = dataView.getUint32(offset, le);
|
|
178
|
-
offset += 4;
|
|
179
|
-
const reserved = dataView.getUint32(offset, le);
|
|
180
|
-
offset += 4;
|
|
181
|
-
keys.push({ key, offset: dataOffset, length, reserved });
|
|
133
|
+
let lastOffset = 0;
|
|
134
|
+
for (const { key, offset } of leafkeys) {
|
|
135
|
+
if (name.localeCompare(key) < 0 && lastOffset) {
|
|
136
|
+
return bptReadNode(lastOffset);
|
|
182
137
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
138
|
+
lastOffset = offset;
|
|
139
|
+
}
|
|
140
|
+
return bptReadNode(lastOffset);
|
|
141
|
+
}
|
|
142
|
+
else if (nodeType === 1) {
|
|
143
|
+
for (let i = 0; i < cnt; i++) {
|
|
144
|
+
const key = decoder
|
|
145
|
+
.decode(b.subarray(offset, offset + keySize))
|
|
146
|
+
.replaceAll('\0', '');
|
|
147
|
+
offset += keySize;
|
|
148
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
149
|
+
offset += 8;
|
|
150
|
+
const length = dataView.getUint32(offset, true);
|
|
151
|
+
offset += 4;
|
|
152
|
+
const reserved = dataView.getUint32(offset, true);
|
|
153
|
+
offset += 4;
|
|
154
|
+
keys.push({
|
|
155
|
+
key,
|
|
156
|
+
offset: dataOffset,
|
|
157
|
+
length,
|
|
158
|
+
reserved,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
for (const n of keys) {
|
|
162
|
+
if (n.key === name) {
|
|
163
|
+
return { ...n, field };
|
|
187
164
|
}
|
|
188
|
-
return undefined;
|
|
189
165
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
const rootNodeOffset = 32;
|
|
170
|
+
return bptReadNode(offset2 + rootNodeOffset);
|
|
195
171
|
});
|
|
172
|
+
return filterUndef(await Promise.all(locs));
|
|
196
173
|
}
|
|
197
174
|
/*
|
|
198
175
|
* retrieve the features from the bigbed data that were found through the
|
|
@@ -200,31 +177,31 @@ class BigBed extends bbi_1.BBI {
|
|
|
200
177
|
* the BigBed specification and the -extraIndex argument to bedToBigBed
|
|
201
178
|
*
|
|
202
179
|
* @param name - the name to search for
|
|
203
|
-
*
|
|
204
|
-
* @
|
|
180
|
+
*
|
|
181
|
+
* @param opts - options object with optional AboutSignal
|
|
182
|
+
*
|
|
183
|
+
* @return array of Feature
|
|
205
184
|
*/
|
|
206
|
-
searchExtraIndex(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}));
|
|
224
|
-
});
|
|
225
|
-
const ret = yield (0, rxjs_1.firstValueFrom)((0, rxjs_1.merge)(...res));
|
|
226
|
-
return ret.filter(f => { var _a; return ((_a = f.rest) === null || _a === void 0 ? void 0 : _a.split('\t')[(f.field || 0) - 3]) === name; });
|
|
185
|
+
async searchExtraIndex(name, opts = {}) {
|
|
186
|
+
const blocks = await this.searchExtraIndexBlocks(name, opts);
|
|
187
|
+
if (blocks.length === 0) {
|
|
188
|
+
return [];
|
|
189
|
+
}
|
|
190
|
+
const view = await this.getUnzoomedView(opts);
|
|
191
|
+
const res = blocks.map(block => {
|
|
192
|
+
return new rxjs_1.Observable(observer => {
|
|
193
|
+
view.readFeatures(observer, [block], opts).catch((e) => {
|
|
194
|
+
observer.error(e);
|
|
195
|
+
});
|
|
196
|
+
}).pipe((0, operators_1.reduce)((acc, curr) => acc.concat(curr)), (0, operators_1.map)(x => {
|
|
197
|
+
for (const element of x) {
|
|
198
|
+
element.field = block.field;
|
|
199
|
+
}
|
|
200
|
+
return x;
|
|
201
|
+
}));
|
|
227
202
|
});
|
|
203
|
+
const ret = await (0, rxjs_1.firstValueFrom)((0, rxjs_1.merge)(...res));
|
|
204
|
+
return ret.filter(f => f.rest?.split('\t')[(f.field || 0) - 3] === name);
|
|
228
205
|
}
|
|
229
206
|
}
|
|
230
207
|
exports.BigBed = BigBed;
|
package/dist/bigbed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"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"}
|
package/dist/bigwig.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.BigWig = void 0;
|
|
13
4
|
const block_view_1 = require("./block-view");
|
|
@@ -21,20 +12,18 @@ class BigWig extends bbi_1.BBI {
|
|
|
21
12
|
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair)
|
|
22
13
|
* or scale used to infer the zoomLevel to use
|
|
23
14
|
*/
|
|
24
|
-
getView(scale, opts) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return new block_view_1.BlockView(this.bbi, refsByName, zh.indexOffset, isBigEndian, uncompressBufSize > 0, 'summary');
|
|
34
|
-
}
|
|
15
|
+
async getView(scale, opts) {
|
|
16
|
+
const { zoomLevels, refsByName, uncompressBufSize } = await this.getHeader(opts);
|
|
17
|
+
const basesPerPx = 1 / scale;
|
|
18
|
+
const maxLevel = zoomLevels.length - 1;
|
|
19
|
+
for (let i = maxLevel; i >= 0; i -= 1) {
|
|
20
|
+
const zh = zoomLevels[i];
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
22
|
+
if (zh && zh.reductionLevel <= 2 * basesPerPx) {
|
|
23
|
+
return new block_view_1.BlockView(this.bbi, refsByName, zh.indexOffset, uncompressBufSize > 0, 'summary');
|
|
35
24
|
}
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
}
|
|
26
|
+
return this.getUnzoomedView(opts);
|
|
38
27
|
}
|
|
39
28
|
}
|
|
40
29
|
exports.BigWig = BigWig;
|
package/dist/bigwig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AACxC,+BAA2C;AAE3C,MAAa,MAAO,SAAQ,SAAG;IAC7B;;;;;;;OAOG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,GACjD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAEtC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACxB,uEAAuE;YACvE,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;gBAC9C,OAAO,IAAI,sBAAS,CAClB,IAAI,CAAC,GAAG,EACR,UAAU,EACV,EAAE,CAAC,WAAW,EACd,iBAAiB,GAAG,CAAC,EACrB,SAAS,CACV,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;CACF;AA9BD,wBA8BC"}
|
package/dist/block-view.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Observer } from 'rxjs';
|
|
2
|
-
import { GenericFilehandle } from 'generic-
|
|
2
|
+
import { GenericFilehandle } from 'generic-filehandle2';
|
|
3
3
|
import { Feature } from './bbi';
|
|
4
4
|
interface CoordRequest {
|
|
5
5
|
chrId: number;
|
|
@@ -21,12 +21,11 @@ export declare class BlockView {
|
|
|
21
21
|
private bbi;
|
|
22
22
|
private refsByName;
|
|
23
23
|
private cirTreeOffset;
|
|
24
|
-
private isBigEndian;
|
|
25
24
|
private isCompressed;
|
|
26
25
|
private blockType;
|
|
27
26
|
private cirTreePromise?;
|
|
28
27
|
private featureCache;
|
|
29
|
-
constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number,
|
|
28
|
+
constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, isCompressed: boolean, blockType: string);
|
|
30
29
|
readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts?: Options): Promise<void>;
|
|
31
30
|
private parseSummaryBlock;
|
|
32
31
|
private parseBigBedBlock;
|