@gmod/tabix 1.5.10 → 1.5.12
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 +15 -5
- package/dist/chunk.d.ts +0 -6
- package/dist/chunk.js +1 -6
- package/dist/chunk.js.map +1 -1
- package/dist/csi.d.ts +7 -16
- package/dist/csi.js +4 -7
- package/dist/csi.js.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/indexFile.d.ts +2 -6
- package/dist/indexFile.js +4 -3
- package/dist/indexFile.js.map +1 -1
- package/dist/tabixIndexedFile.d.ts +3 -4
- package/dist/tabixIndexedFile.js +27 -48
- package/dist/tabixIndexedFile.js.map +1 -1
- package/dist/tbi.d.ts +4 -9
- package/dist/tbi.js +2 -3
- package/dist/tbi.js.map +1 -1
- package/dist/util.js +1 -6
- package/dist/util.js.map +1 -1
- package/dist/virtualOffset.d.ts +1 -0
- package/dist/virtualOffset.js.map +1 -1
- package/esm/chunk.d.ts +0 -6
- package/esm/chunk.js +1 -6
- package/esm/chunk.js.map +1 -1
- package/esm/csi.d.ts +7 -16
- package/esm/csi.js +4 -5
- package/esm/csi.js.map +1 -1
- package/esm/index.d.ts +3 -4
- package/esm/index.js +3 -4
- package/esm/index.js.map +1 -1
- package/esm/indexFile.d.ts +2 -6
- package/esm/indexFile.js +4 -3
- package/esm/indexFile.js.map +1 -1
- package/esm/tabixIndexedFile.d.ts +3 -4
- package/esm/tabixIndexedFile.js +26 -47
- package/esm/tabixIndexedFile.js.map +1 -1
- package/esm/tbi.d.ts +4 -9
- package/esm/tbi.js +2 -3
- package/esm/tbi.js.map +1 -1
- package/esm/util.js +1 -6
- package/esm/util.js.map +1 -1
- package/esm/virtualOffset.d.ts +1 -0
- package/esm/virtualOffset.js.map +1 -1
- package/package.json +16 -16
- package/src/chunk.ts +1 -6
- package/src/csi.ts +7 -7
- package/src/index.ts +3 -5
- package/src/indexFile.ts +4 -4
- package/src/tabixIndexedFile.ts +33 -52
- package/src/tbi.ts +6 -6
- package/src/util.ts +1 -5
- package/src/virtualOffset.ts +1 -0
package/esm/tbi.js
CHANGED
|
@@ -189,9 +189,8 @@ export default class TabixIndex extends IndexFile {
|
|
|
189
189
|
for (const [start, end] of overlappingBins) {
|
|
190
190
|
for (let bin = start; bin <= end; bin++) {
|
|
191
191
|
if (ba.binIndex[bin]) {
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
chunks.push(new Chunk(binChunks[c].minv, binChunks[c].maxv, bin));
|
|
192
|
+
for (const c of ba.binIndex[bin]) {
|
|
193
|
+
chunks.push(new Chunk(c.minv, c.maxv, bin));
|
|
195
194
|
}
|
|
196
195
|
}
|
|
197
196
|
}
|
package/esm/tbi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tbi.js","sourceRoot":"","sources":["../src/tbi.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"tbi.js","sourceRoot":"","sources":["../src/tbi.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACvE,OAAO,SAAsB,MAAM,aAAa,CAAA;AAEhD,MAAM,SAAS,GAAG,QAAQ,CAAA,CAAC,QAAQ;AACnC,MAAM,cAAc,GAAG,EAAE,CAAA;AAEzB;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,GAAG,IAAI,CAAC,CAAA,CAAC,8BAA8B;IACvC,GAAG,IAAI,CAAC,CAAA;IACR,OAAO;QACL,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;KACzC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAS;IAC/C,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,OAAgB,EAAE;QACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,CAAA;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,CAAC,CAAA;QACX,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,SAAS,CAAA;QACxB,CAAC;QACD,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,MAAM,CAAC,OAAgB,EAAE;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE7B,0BAA0B;QAC1B,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACjC,oDAAoD;QACtD,CAAC;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QACxC,MAAM,cAAc,GAClB,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAA;QACnE,MAAM,UAAU,GAA2B;YACzC,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,KAAK;SACT,CAAA;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC,CAAA;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAA;QACrE,CAAC;QACD,MAAM,aAAa,GAAG;YACpB,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1B,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;SAC3B,CAAA;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,CAAC,CAAA;QACf,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACvD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAClE,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAEvC,2BAA2B;QAC3B,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC/C,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,eAAe,CACvD,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,CACxC,CAAA;QAED,+CAA+C;QAC/C,IAAI,UAAU,GAAG,EAAE,GAAG,iBAAiB,CAAA;QACvC,IAAI,aAAwC,CAAA;QAC5C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;YACnD,oBAAoB;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;YAC9C,UAAU,IAAI,CAAC,CAAA;YACf,MAAM,QAAQ,GAA4B,EAAE,CAAA;YAC5C,IAAI,KAAK,CAAA;YACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;gBAC1C,UAAU,IAAI,CAAC,CAAA;gBACf,IAAI,GAAG,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAA;gBACH,CAAC;qBAAM,IAAI,GAAG,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;oBAChD,UAAU,IAAI,CAAC,CAAA;oBACf,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;wBACrB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;oBAChD,CAAC;oBACD,UAAU,IAAI,EAAE,GAAG,UAAU,CAAA;gBAC/B,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;oBAChD,UAAU,IAAI,CAAC,CAAA;oBACf,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;wBACtC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,CAAC,CAAA;wBAC1C,UAAU,IAAI,EAAE,CAAA;wBAChB,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;wBACrD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;oBAClC,CAAC;oBACD,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;gBACxB,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;YACjD,UAAU,IAAI,CAAC,CAAA;YACf,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;gBAC7C,UAAU,IAAI,CAAC,CAAA;gBACf,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;YACpE,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,OAAO;YACP,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,SAAS;YACT,aAAa;YACb,aAAa;YACb,cAAc;YACd,MAAM;YACN,WAAW;YACX,WAAW;YACX,YAAY,EAAE,CAAC,IAAI,EAAE;SACtB,CAAA;IACH,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,MAAc;QAC1C,MAAM,SAAS,GAAG,YAAY,CAC5B,IAAI,CAAC,WAAW,CACd,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAwB,EAC5D,IAAI,CACL,CACF,CAAA;QACD,OAAO,EAAE,SAAS,EAAE,CAAA;IACtB,CAAC;IAED,eAAe,CAAC,UAAkB;QAChC,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,MAAM,WAAW,GAAa,EAAE,CAAA;QAChC,MAAM,WAAW,GAA2B,EAAE,CAAA;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;oBAC3D,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;oBACpC,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAA;oBAChC,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;gBAClC,CAAC;gBACD,aAAa,GAAG,CAAC,GAAG,CAAC,CAAA;gBACrB,SAAS,IAAI,CAAC,CAAA;YAChB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAAe,EACf,GAAW,EACX,GAAW,EACX,OAAgB,EAAE;QAElB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,GAAG,GAAG,CAAC,CAAA;QACT,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM;YACrC,CAAC,CAAC,EAAE,CAAC,WAAW,CACZ,GAAG,IAAI,cAAc,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM;gBAC5C,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAC3B,CAAC,CAAC,GAAG,IAAI,cAAc,CAC1B;YACH,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;QAC1D,CAAC;QAED,4CAA4C;QAE5C,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,uCAAuC;QAClF,MAAM,MAAM,GAAY,EAAE,CAAA;QAE1B,sEAAsE;QACtE,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC;YAC3C,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;gBACxC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBACjC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,mCAAmC;QACnC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAA;QACnC,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7C,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YAC5B,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,GAAG,EAAE,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;CACF"}
|
package/esm/util.js
CHANGED
|
@@ -56,12 +56,7 @@ export function optimizeChunks(chunks, lowest) {
|
|
|
56
56
|
}
|
|
57
57
|
chunks.sort(function (c0, c1) {
|
|
58
58
|
const dif = c0.minv.blockPosition - c1.minv.blockPosition;
|
|
59
|
-
|
|
60
|
-
return dif;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
return c0.minv.dataPosition - c1.minv.dataPosition;
|
|
64
|
-
}
|
|
59
|
+
return dif !== 0 ? dif : c0.minv.dataPosition - c1.minv.dataPosition;
|
|
65
60
|
});
|
|
66
61
|
chunks.forEach(chunk => {
|
|
67
62
|
if (!lowest || chunk.maxv.compareTo(lowest) > 0) {
|
package/esm/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,IACE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EACtC;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/esm/virtualOffset.d.ts
CHANGED
package/esm/virtualOffset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualOffset.js","sourceRoot":"","sources":["../src/virtualOffset.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"virtualOffset.js","sourceRoot":"","sources":["../src/virtualOffset.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,OAAO,OAAO,aAAa;IAGhC,YAAY,aAAqB,EAAE,YAAoB;QACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA,CAAC,wCAAwC;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA,CAAC,sCAAsC;IACzE,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;IACrD,CAAC;IAED,SAAS,CAAC,CAAgB;QACxB,OAAO,CACL,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAC3E,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,IAAqB;QACjC,IAAI,GAAG,CAAA;QACP,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACf,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AACD,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK;IACpE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,IAAI,aAAa,CACtB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa;QAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,WAAW;QAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;QAC7B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO;QAC3B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK;QACzB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EACnB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CACzC,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmod/tabix",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.12",
|
|
4
4
|
"description": "Read Tabix-indexed files, supports both .tbi and .csi indexes",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "GMOD/tabix-js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"scripts": {
|
|
23
23
|
"test": "jest",
|
|
24
24
|
"coverage": "npm test -- --coverage",
|
|
25
|
-
"lint": "eslint --ext .js,.ts src
|
|
25
|
+
"lint": "eslint --ext .js,.ts src",
|
|
26
26
|
"clean": "rimraf dist esm",
|
|
27
27
|
"prebuild": "npm run clean && npm run lint",
|
|
28
28
|
"build:esm": "tsc --target es2018 --outDir esm",
|
|
@@ -46,23 +46,23 @@
|
|
|
46
46
|
"quick-lru": "^4.0.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@types/jest": "^29.5.
|
|
49
|
+
"@types/jest": "^29.5.11",
|
|
50
50
|
"@types/long": "^4.0.0",
|
|
51
|
-
"@types/node": "^
|
|
52
|
-
"@
|
|
53
|
-
"@typescript-eslint/
|
|
54
|
-
"
|
|
55
|
-
"eslint": "^
|
|
56
|
-
"eslint-config-prettier": "^8.8.0",
|
|
51
|
+
"@types/node": "^20.10.5",
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
|
53
|
+
"@typescript-eslint/parser": "^6.15.0",
|
|
54
|
+
"eslint": "^8.40.0",
|
|
55
|
+
"eslint-config-prettier": "^9.1.0",
|
|
57
56
|
"eslint-plugin-import": "^2.27.5",
|
|
58
|
-
"eslint-plugin-prettier": "^
|
|
59
|
-
"
|
|
57
|
+
"eslint-plugin-prettier": "^5.0.1",
|
|
58
|
+
"eslint-plugin-unicorn": "^49.0.0",
|
|
59
|
+
"jest": "^29.7.0",
|
|
60
60
|
"jest-environment-jsdom": "^29.5.0",
|
|
61
|
-
"prettier": "^
|
|
62
|
-
"rimraf": "^
|
|
63
|
-
"standard-changelog": "^
|
|
64
|
-
"ts-jest": "^29.
|
|
65
|
-
"typescript": "^5.
|
|
61
|
+
"prettier": "^3.1.1",
|
|
62
|
+
"rimraf": "^5.0.1",
|
|
63
|
+
"standard-changelog": "^5.0.0",
|
|
64
|
+
"ts-jest": "^29.1.1",
|
|
65
|
+
"typescript": "^5.3.3"
|
|
66
66
|
},
|
|
67
67
|
"publishConfig": {
|
|
68
68
|
"access": "public"
|
package/src/chunk.ts
CHANGED
|
@@ -7,12 +7,6 @@ export default class Chunk {
|
|
|
7
7
|
public bin: number
|
|
8
8
|
public _fetchedSize?: number
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
* @param {VirtualOffset} minv
|
|
12
|
-
* @param {VirtualOffset} maxv
|
|
13
|
-
* @param {number} bin
|
|
14
|
-
* @param {number} [fetchedSize]
|
|
15
|
-
*/
|
|
16
10
|
constructor(
|
|
17
11
|
minv: VirtualOffset,
|
|
18
12
|
maxv: VirtualOffset,
|
|
@@ -26,6 +20,7 @@ export default class Chunk {
|
|
|
26
20
|
}
|
|
27
21
|
|
|
28
22
|
toUniqueString() {
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
29
24
|
return `${this.minv}..${this.maxv} (bin ${
|
|
30
25
|
this.bin
|
|
31
26
|
}, fetchedSize ${this.fetchedSize()})`
|
package/src/csi.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Long from 'long'
|
|
2
|
+
import { Buffer } from 'buffer'
|
|
2
3
|
import { unzip } from '@gmod/bgzf-filehandle'
|
|
3
4
|
|
|
4
5
|
import VirtualOffset, { fromBytes } from './virtualOffset'
|
|
@@ -43,7 +44,7 @@ export default class CSI extends IndexFile {
|
|
|
43
44
|
}
|
|
44
45
|
return -1
|
|
45
46
|
}
|
|
46
|
-
|
|
47
|
+
indexCov() {
|
|
47
48
|
throw new Error('CSI indexes do not support indexcov')
|
|
48
49
|
}
|
|
49
50
|
|
|
@@ -84,7 +85,7 @@ export default class CSI extends IndexFile {
|
|
|
84
85
|
let currRefId = 0
|
|
85
86
|
let currNameStart = 0
|
|
86
87
|
const refIdToName = []
|
|
87
|
-
const refNameToId:
|
|
88
|
+
const refNameToId: Record<string, number> = {}
|
|
88
89
|
for (let i = 0; i < namesBytes.length; i += 1) {
|
|
89
90
|
if (!namesBytes[i]) {
|
|
90
91
|
if (currNameStart < i) {
|
|
@@ -103,7 +104,7 @@ export default class CSI extends IndexFile {
|
|
|
103
104
|
// fetch and parse the index
|
|
104
105
|
|
|
105
106
|
async _parse(opts: Options = {}) {
|
|
106
|
-
const bytes = await unzip(
|
|
107
|
+
const bytes = await unzip(await this.filehandle.readFile(opts))
|
|
107
108
|
|
|
108
109
|
// check TBI magic numbers
|
|
109
110
|
let csiVersion
|
|
@@ -141,7 +142,7 @@ export default class CSI extends IndexFile {
|
|
|
141
142
|
// the binning index
|
|
142
143
|
const binCount = bytes.readInt32LE(currOffset)
|
|
143
144
|
currOffset += 4
|
|
144
|
-
const binIndex:
|
|
145
|
+
const binIndex: Record<string, Chunk[]> = {}
|
|
145
146
|
let stats // < provided by parsing a pseudo-bin, if present
|
|
146
147
|
for (let j = 0; j < binCount; j += 1) {
|
|
147
148
|
const bin = bytes.readUInt32LE(currOffset)
|
|
@@ -223,9 +224,8 @@ export default class CSI extends IndexFile {
|
|
|
223
224
|
for (const [start, end] of overlappingBins) {
|
|
224
225
|
for (let bin = start; bin <= end; bin++) {
|
|
225
226
|
if (ba.binIndex[bin]) {
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
chunks.push(new Chunk(binChunks[c].minv, binChunks[c].maxv, bin))
|
|
227
|
+
for (const c of ba.binIndex[bin]) {
|
|
228
|
+
chunks.push(new Chunk(c.minv, c.maxv, bin))
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export { TabixIndexedFile, TBI, CSI }
|
|
1
|
+
export { default as TabixIndexedFile } from './tabixIndexedFile'
|
|
2
|
+
export { default as CSI } from './csi'
|
|
3
|
+
export { default as TBI } from './tbi'
|
package/src/indexFile.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface Options {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export interface IndexData {
|
|
12
|
-
refNameToId:
|
|
12
|
+
refNameToId: Record<string, number>
|
|
13
13
|
refIdToName: string[]
|
|
14
14
|
metaChar: string | null
|
|
15
15
|
columnNumbers: { ref: number; start: number; end: number }
|
|
@@ -39,8 +39,7 @@ export default abstract class IndexFile {
|
|
|
39
39
|
protected abstract _parse(opts: Options): Promise<IndexData>
|
|
40
40
|
|
|
41
41
|
public async getMetadata(opts: Options = {}) {
|
|
42
|
-
|
|
43
|
-
const { indices, ...rest } = await this.parse(opts)
|
|
42
|
+
const { indices: _indices, ...rest } = await this.parse(opts)
|
|
44
43
|
return rest
|
|
45
44
|
}
|
|
46
45
|
|
|
@@ -75,6 +74,7 @@ export default abstract class IndexFile {
|
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
async hasRefSeq(seqId: number, opts: Options = {}) {
|
|
78
|
-
|
|
77
|
+
const idx = await this.parse(opts)
|
|
78
|
+
return !!idx.indices[seqId]?.binIndex
|
|
79
79
|
}
|
|
80
80
|
}
|
package/src/tabixIndexedFile.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import AbortablePromiseCache from 'abortable-promise-cache'
|
|
2
2
|
import LRU from 'quick-lru'
|
|
3
|
+
import { Buffer } from 'buffer'
|
|
3
4
|
import { GenericFilehandle, LocalFile } from 'generic-filehandle'
|
|
4
5
|
import { unzip, unzipChunkSlice } from '@gmod/bgzf-filehandle'
|
|
5
6
|
import { checkAbortSignal } from './util'
|
|
@@ -12,7 +13,7 @@ import CSI from './csi'
|
|
|
12
13
|
type GetLinesCallback = (line: string, fileOffset: number) => void
|
|
13
14
|
|
|
14
15
|
const decoder =
|
|
15
|
-
typeof TextDecoder !== 'undefined' ? new TextDecoder('
|
|
16
|
+
typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined
|
|
16
17
|
|
|
17
18
|
interface GetLinesOpts {
|
|
18
19
|
[key: string]: unknown
|
|
@@ -131,14 +132,14 @@ export default class TabixIndexedFile {
|
|
|
131
132
|
*/
|
|
132
133
|
async getLines(
|
|
133
134
|
refName: string,
|
|
134
|
-
|
|
135
|
-
|
|
135
|
+
s: number | undefined,
|
|
136
|
+
e: number | undefined,
|
|
136
137
|
opts: GetLinesOpts | GetLinesCallback,
|
|
137
138
|
) {
|
|
138
139
|
let signal: AbortSignal | undefined
|
|
139
140
|
let options: Options = {}
|
|
140
141
|
let callback: (line: string, lineOffset: number) => void
|
|
141
|
-
if (
|
|
142
|
+
if (opts === undefined) {
|
|
142
143
|
throw new TypeError('line callback must be provided')
|
|
143
144
|
}
|
|
144
145
|
if (typeof opts === 'function') {
|
|
@@ -156,12 +157,8 @@ export default class TabixIndexedFile {
|
|
|
156
157
|
|
|
157
158
|
const metadata = await this.index.getMetadata(options)
|
|
158
159
|
checkAbortSignal(signal)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
if (!end) {
|
|
163
|
-
end = metadata.maxRefLength
|
|
164
|
-
}
|
|
160
|
+
const start = s ?? 0
|
|
161
|
+
const end = e ?? metadata.maxRefLength
|
|
165
162
|
if (!(start <= end)) {
|
|
166
163
|
throw new TypeError(
|
|
167
164
|
'invalid start and end coordinates. start must be less than or equal to end',
|
|
@@ -176,8 +173,8 @@ export default class TabixIndexedFile {
|
|
|
176
173
|
|
|
177
174
|
// check the chunks for any that are over the size limit. if
|
|
178
175
|
// any are, don't fetch any of them
|
|
179
|
-
for (
|
|
180
|
-
const size =
|
|
176
|
+
for (const chunk of chunks) {
|
|
177
|
+
const size = chunk.fetchedSize()
|
|
181
178
|
if (size > this.chunkSizeLimit) {
|
|
182
179
|
throw new Error(
|
|
183
180
|
`Too much data. Chunk size ${size.toLocaleString()} bytes exceeds chunkSizeLimit of ${this.chunkSizeLimit.toLocaleString()}.`,
|
|
@@ -187,12 +184,12 @@ export default class TabixIndexedFile {
|
|
|
187
184
|
|
|
188
185
|
// now go through each chunk and parse and filter the lines out of it
|
|
189
186
|
let last = Date.now()
|
|
190
|
-
for (
|
|
187
|
+
for (const c of chunks) {
|
|
191
188
|
let previousStartCoordinate: number | undefined
|
|
192
|
-
const c = chunks[chunkNum]
|
|
193
189
|
const { buffer, cpositions, dpositions } = await this.chunkCache.get(
|
|
194
190
|
c.toString(),
|
|
195
191
|
c,
|
|
192
|
+
signal,
|
|
196
193
|
)
|
|
197
194
|
|
|
198
195
|
checkAbortSignal(signal)
|
|
@@ -204,7 +201,7 @@ export default class TabixIndexedFile {
|
|
|
204
201
|
break
|
|
205
202
|
}
|
|
206
203
|
const b = buffer.slice(blockStart, n)
|
|
207
|
-
const line = decoder?.decode(b)
|
|
204
|
+
const line = decoder?.decode(b) ?? b.toString()
|
|
208
205
|
|
|
209
206
|
if (dpositions) {
|
|
210
207
|
while (blockStart + c.minv.dataPosition >= dpositions[pos++]) {}
|
|
@@ -277,25 +274,15 @@ export default class TabixIndexedFile {
|
|
|
277
274
|
* non-meta line
|
|
278
275
|
*/
|
|
279
276
|
async getHeaderBuffer(opts: Options = {}) {
|
|
280
|
-
const { firstDataLine, metaChar, maxBlockSize } =
|
|
281
|
-
opts
|
|
282
|
-
)
|
|
277
|
+
const { firstDataLine, metaChar, maxBlockSize } =
|
|
278
|
+
await this.getMetadata(opts)
|
|
283
279
|
checkAbortSignal(opts.signal)
|
|
284
280
|
const maxFetch = (firstDataLine?.blockPosition || 0) + maxBlockSize
|
|
285
281
|
// TODO: what if we don't have a firstDataLine, and the header
|
|
286
282
|
// actually takes up more than one block? this case is not covered here
|
|
287
283
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
try {
|
|
291
|
-
bytes = await unzip(bytes)
|
|
292
|
-
} catch (e) {
|
|
293
|
-
console.error(e)
|
|
294
|
-
throw new Error(
|
|
295
|
-
//@ts-ignore
|
|
296
|
-
`error decompressing block ${e.code} at 0 (length ${maxFetch}) ${e}`,
|
|
297
|
-
)
|
|
298
|
-
}
|
|
284
|
+
const buf = await this._readRegion(0, maxFetch, opts)
|
|
285
|
+
const bytes = await unzip(buf)
|
|
299
286
|
|
|
300
287
|
// trim off lines after the last non-meta line
|
|
301
288
|
if (metaChar) {
|
|
@@ -311,7 +298,7 @@ export default class TabixIndexedFile {
|
|
|
311
298
|
lastNewline = i
|
|
312
299
|
}
|
|
313
300
|
}
|
|
314
|
-
|
|
301
|
+
return bytes.slice(0, lastNewline + 1)
|
|
315
302
|
}
|
|
316
303
|
return bytes
|
|
317
304
|
}
|
|
@@ -356,7 +343,7 @@ export default class TabixIndexedFile {
|
|
|
356
343
|
) {
|
|
357
344
|
const { columnNumbers, metaChar, coordinateType, format } = metadata
|
|
358
345
|
// skip meta lines
|
|
359
|
-
if (line.
|
|
346
|
+
if (metaChar && line.startsWith(metaChar)) {
|
|
360
347
|
return { overlaps: false }
|
|
361
348
|
}
|
|
362
349
|
|
|
@@ -411,17 +398,15 @@ export default class TabixIndexedFile {
|
|
|
411
398
|
} else if (format === 'VCF' && currentColumnNumber === 4) {
|
|
412
399
|
refSeq = line.slice(currentColumnStart, i)
|
|
413
400
|
} else if (currentColumnNumber === end) {
|
|
414
|
-
let endCoordinate
|
|
415
401
|
// this will never match if there is no end column
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
}
|
|
402
|
+
const endCoordinate =
|
|
403
|
+
format === 'VCF'
|
|
404
|
+
? this._getVcfEnd(
|
|
405
|
+
startCoordinate,
|
|
406
|
+
refSeq,
|
|
407
|
+
line.slice(currentColumnStart, i),
|
|
408
|
+
)
|
|
409
|
+
: parseInt(line.slice(currentColumnStart, i), 10)
|
|
425
410
|
if (endCoordinate <= regionStart) {
|
|
426
411
|
return { overlaps: false }
|
|
427
412
|
}
|
|
@@ -438,12 +423,12 @@ export default class TabixIndexedFile {
|
|
|
438
423
|
|
|
439
424
|
_getVcfEnd(startCoordinate: number, refSeq: string, info: any) {
|
|
440
425
|
let endCoordinate = startCoordinate + refSeq.length
|
|
441
|
-
// ignore TRA features as they specify CHR2 and END
|
|
442
|
-
//
|
|
443
|
-
//
|
|
444
|
-
//
|
|
445
|
-
// at the end of this one
|
|
446
|
-
const isTRA = info.
|
|
426
|
+
// ignore TRA features as they specify CHR2 and END as being on a different
|
|
427
|
+
// chromosome
|
|
428
|
+
//
|
|
429
|
+
// if CHR2 is on the same chromosome, still ignore it because there should
|
|
430
|
+
// be another pairwise feature at the end of this one
|
|
431
|
+
const isTRA = info.includes('SVTYPE=TRA')
|
|
447
432
|
if (info[0] !== '.' && !isTRA) {
|
|
448
433
|
let prevChar = ';'
|
|
449
434
|
for (let j = 0; j < info.length; j += 1) {
|
|
@@ -498,10 +483,6 @@ export default class TabixIndexedFile {
|
|
|
498
483
|
c.fetchedSize(),
|
|
499
484
|
opts,
|
|
500
485
|
)
|
|
501
|
-
|
|
502
|
-
return unzipChunkSlice(data, c)
|
|
503
|
-
} catch (e) {
|
|
504
|
-
throw new Error(`error decompressing c ${c.toString()} ${e}`)
|
|
505
|
-
}
|
|
486
|
+
return unzipChunkSlice(data, c)
|
|
506
487
|
}
|
|
507
488
|
}
|
package/src/tbi.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Long from 'long'
|
|
2
|
+
import { Buffer } from 'buffer'
|
|
2
3
|
import VirtualOffset, { fromBytes } from './virtualOffset'
|
|
3
4
|
import Chunk from './chunk'
|
|
4
5
|
import { unzip } from '@gmod/bgzf-filehandle'
|
|
@@ -59,7 +60,7 @@ export default class TabixIndex extends IndexFile {
|
|
|
59
60
|
const formatFlags = bytes.readInt32LE(8)
|
|
60
61
|
const coordinateType =
|
|
61
62
|
formatFlags & 0x10000 ? 'zero-based-half-open' : '1-based-closed'
|
|
62
|
-
const formatOpts:
|
|
63
|
+
const formatOpts: Record<number, string> = {
|
|
63
64
|
0: 'generic',
|
|
64
65
|
1: 'SAM',
|
|
65
66
|
2: 'VCF',
|
|
@@ -93,7 +94,7 @@ export default class TabixIndex extends IndexFile {
|
|
|
93
94
|
// the binning index
|
|
94
95
|
const binCount = bytes.readInt32LE(currOffset)
|
|
95
96
|
currOffset += 4
|
|
96
|
-
const binIndex:
|
|
97
|
+
const binIndex: Record<number, Chunk[]> = {}
|
|
97
98
|
let stats
|
|
98
99
|
for (let j = 0; j < binCount; j += 1) {
|
|
99
100
|
const bin = bytes.readUInt32LE(currOffset)
|
|
@@ -166,7 +167,7 @@ export default class TabixIndex extends IndexFile {
|
|
|
166
167
|
let currRefId = 0
|
|
167
168
|
let currNameStart = 0
|
|
168
169
|
const refIdToName: string[] = []
|
|
169
|
-
const refNameToId:
|
|
170
|
+
const refNameToId: Record<string, number> = {}
|
|
170
171
|
for (let i = 0; i < namesBytes.length; i += 1) {
|
|
171
172
|
if (!namesBytes[i]) {
|
|
172
173
|
if (currNameStart < i) {
|
|
@@ -222,9 +223,8 @@ export default class TabixIndex extends IndexFile {
|
|
|
222
223
|
for (const [start, end] of overlappingBins) {
|
|
223
224
|
for (let bin = start; bin <= end; bin++) {
|
|
224
225
|
if (ba.binIndex[bin]) {
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
chunks.push(new Chunk(binChunks[c].minv, binChunks[c].maxv, bin))
|
|
226
|
+
for (const c of ba.binIndex[bin]) {
|
|
227
|
+
chunks.push(new Chunk(c.minv, c.maxv, bin))
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
230
|
}
|
package/src/util.ts
CHANGED
|
@@ -70,11 +70,7 @@ export function optimizeChunks(chunks: Chunk[], lowest: VirtualOffset) {
|
|
|
70
70
|
|
|
71
71
|
chunks.sort(function (c0, c1) {
|
|
72
72
|
const dif = c0.minv.blockPosition - c1.minv.blockPosition
|
|
73
|
-
|
|
74
|
-
return dif
|
|
75
|
-
} else {
|
|
76
|
-
return c0.minv.dataPosition - c1.minv.dataPosition
|
|
77
|
-
}
|
|
73
|
+
return dif !== 0 ? dif : c0.minv.dataPosition - c1.minv.dataPosition
|
|
78
74
|
})
|
|
79
75
|
|
|
80
76
|
chunks.forEach(chunk => {
|
package/src/virtualOffset.ts
CHANGED