Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@gmod/bam

Package Overview
Dependencies
Maintainers
6
Versions
72
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gmod/bam - npm Package Compare versions

Comparing version 1.1.8 to 1.1.9

dist/bai.js.map

8

CHANGELOG.md

@@ -0,1 +1,9 @@

<a name="1.1.9"></a>
## [1.1.9](https://github.com/GMOD/bam-js/compare/v1.1.8...v1.1.9) (2021-12-14)
- Add ESM module export in package.json (smaller bundle size for consumers)
- Cache BAI readFile result for compatibility with node.js native filehandles (which otherwise fail if re-reading the filehandle twice)
<a name="1.1.8"></a>

@@ -2,0 +10,0 @@ ## [1.1.8](https://github.com/GMOD/bam-js/compare/v1.1.7...v1.1.8) (2021-05-21)

2

dist/bai.d.ts

@@ -6,2 +6,3 @@ /// <reference types="node" />

export default class BAI extends IndexFile {
baiP?: Promise<Buffer>;
parsePseudoBin(bytes: Buffer, offset: number): {

@@ -11,2 +12,3 @@ lineCount: number;

lineCount(refId: number, opts?: BaseOpts): Promise<any>;
fetchBai(opts?: BaseOpts): Promise<Buffer>;
_parse(opts?: BaseOpts): Promise<{

@@ -13,0 +15,0 @@ [key: string]: any;

848

dist/bai.js
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty2 = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty2(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _getIterator2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator"));
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _getIteratorMethod2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator-method"));
var _symbol = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/symbol"));
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties"));
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
var _construct = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/reflect/construct"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf"));
var _long = _interopRequireDefault(require("long"));
var _virtualOffset = require("./virtualOffset");
var _chunk = _interopRequireDefault(require("./chunk"));
var _indexFile = _interopRequireDefault(require("./indexFile"));
var _util = require("./util");
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof _symbol.default === "undefined" || (0, _getIteratorMethod2.default)(o) == null) { if ((0, _isArray.default)(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = (0, _getIterator2.default)(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { var _context7; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = (0, _slice.default)(_context7 = Object.prototype.toString.call(o)).call(_context7, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return (0, _from.default)(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function ownKeys(object, enumerableOnly) { var keys = (0, _keys.default)(object); if (_getOwnPropertySymbols.default) { var symbols = (0, _getOwnPropertySymbols.default)(object); if (enumerableOnly) symbols = (0, _filter.default)(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor.default)(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context5; (0, _forEach.default)(_context5 = ownKeys(Object(source), true)).call(_context5, function (key) { (0, _defineProperty3.default)(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors.default) { (0, _defineProperties.default)(target, (0, _getOwnPropertyDescriptors.default)(source)); } else { var _context6; (0, _forEach.default)(_context6 = ownKeys(Object(source))).call(_context6, function (key) { (0, _defineProperty2.default)(target, key, (0, _getOwnPropertyDescriptor.default)(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = (0, _construct.default)(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_construct.default) return false; if (_construct.default.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call((0, _construct.default)(Date, [], function () {})); return true; } catch (e) { return false; } }
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var long_1 = __importDefault(require("long"));
var virtualOffset_1 = require("./virtualOffset");
var chunk_1 = __importDefault(require("./chunk"));
var indexFile_1 = __importDefault(require("./indexFile"));
var util_1 = require("./util");
var BAI_MAGIC = 21578050; // BAI\1
function roundDown(n, multiple) {
return n - n % multiple;
return n - (n % multiple);
}
function roundUp(n, multiple) {
return n - n % multiple + multiple;
return n - (n % multiple) + multiple;
}
var BAI = /*#__PURE__*/function (_IndexFile) {
(0, _inherits2.default)(BAI, _IndexFile);
var _super = _createSuper(BAI);
function BAI() {
(0, _classCallCheck2.default)(this, BAI);
return _super.apply(this, arguments);
}
(0, _createClass2.default)(BAI, [{
key: "parsePseudoBin",
value: function parsePseudoBin(bytes, offset) {
var lineCount = (0, _util.longToNumber)(_long.default.fromBytesLE((0, _slice.default)(Array.prototype).call(bytes, offset + 16, offset + 24), true));
return {
lineCount: lineCount
};
var BAI = /** @class */ (function (_super) {
__extends(BAI, _super);
function BAI() {
return _super !== null && _super.apply(this, arguments) || this;
}
}, {
key: "lineCount",
value: function () {
var _lineCount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(refId) {
var opts,
prom,
index,
ret,
_args = arguments;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
opts = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
_context.next = 3;
return this.parse(opts);
case 3:
prom = _context.sent;
index = prom.indices[refId];
if (index) {
_context.next = 7;
break;
BAI.prototype.parsePseudoBin = function (bytes, offset) {
var lineCount = (0, util_1.longToNumber)(long_1.default.fromBytesLE(Array.prototype.slice.call(bytes, offset + 16, offset + 24), true));
return { lineCount: lineCount };
};
BAI.prototype.lineCount = function (refId, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var prom, index, ret;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parse(opts)];
case 1:
prom = _a.sent();
index = prom.indices[refId];
if (!index) {
return [2 /*return*/, -1];
}
ret = index.stats || {};
return [2 /*return*/, ret.lineCount === undefined ? -1 : ret.lineCount];
}
return _context.abrupt("return", -1);
case 7:
ret = index.stats || {};
return _context.abrupt("return", ret.lineCount === undefined ? -1 : ret.lineCount);
case 9:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function lineCount(_x) {
return _lineCount.apply(this, arguments);
}
return lineCount;
}() // fetch and parse the index
}, {
key: "_parse",
value: function () {
var _parse2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
var opts,
data,
bytes,
depth,
binLimit,
currOffset,
i,
binCount,
stats,
binIndex,
j,
bin,
chunkCount,
chunks,
k,
u,
v,
linearCount,
linearIndex,
_k,
_args2 = arguments;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
opts = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};
data = {
bai: true,
maxBlockSize: 1 << 16
};
_context2.next = 4;
return this.filehandle.readFile(opts);
case 4:
bytes = _context2.sent;
if (!(bytes.readUInt32LE(0) !== BAI_MAGIC)) {
_context2.next = 7;
break;
});
});
};
BAI.prototype.fetchBai = function (opts) {
var _this = this;
if (opts === void 0) { opts = {}; }
if (!this.baiP) {
this.baiP = this.filehandle.readFile(opts).catch(function (e) {
_this.baiP = undefined;
throw e;
});
}
return this.baiP;
};
// fetch and parse the index
BAI.prototype._parse = function (opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var data, bytes, depth, binLimit, currOffset, i, binCount, stats, binIndex, j, bin, chunkCount, chunks, k, u, v, linearCount, linearIndex, k;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
data = { bai: true, maxBlockSize: 1 << 16 };
return [4 /*yield*/, this.fetchBai()
// check BAI magic numbers
];
case 1:
bytes = _a.sent();
// check BAI magic numbers
if (bytes.readUInt32LE(0) !== BAI_MAGIC) {
throw new Error('Not a BAI file');
}
data.refCount = bytes.readInt32LE(4);
depth = 5;
binLimit = ((1 << ((depth + 1) * 3)) - 1) / 7;
// read the indexes for each reference sequence
data.indices = new Array(data.refCount);
currOffset = 8;
i = 0;
_a.label = 2;
case 2:
if (!(i < data.refCount)) return [3 /*break*/, 5];
return [4 /*yield*/, (0, util_1.abortBreakPoint)(opts.signal)
// the binning index
];
case 3:
_a.sent();
binCount = bytes.readInt32LE(currOffset);
stats = void 0;
currOffset += 4;
binIndex = {};
for (j = 0; j < binCount; j += 1) {
bin = bytes.readUInt32LE(currOffset);
currOffset += 4;
if (bin === binLimit + 1) {
currOffset += 4;
stats = this.parsePseudoBin(bytes, currOffset);
currOffset += 32;
}
else if (bin > binLimit + 1) {
throw new Error('bai index contains too many bins, please use CSI');
}
else {
chunkCount = bytes.readInt32LE(currOffset);
currOffset += 4;
chunks = new Array(chunkCount);
for (k = 0; k < chunkCount; k += 1) {
u = (0, virtualOffset_1.fromBytes)(bytes, currOffset);
v = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 8);
currOffset += 16;
this._findFirstData(data, u);
chunks[k] = new chunk_1.default(u, v, bin);
}
binIndex[bin] = chunks;
}
}
linearCount = bytes.readInt32LE(currOffset);
currOffset += 4;
linearIndex = new Array(linearCount);
for (k = 0; k < linearCount; k += 1) {
linearIndex[k] = (0, virtualOffset_1.fromBytes)(bytes, currOffset);
currOffset += 8;
this._findFirstData(data, linearIndex[k]);
}
data.indices[i] = { binIndex: binIndex, linearIndex: linearIndex, stats: stats };
_a.label = 4;
case 4:
i += 1;
return [3 /*break*/, 2];
case 5: return [2 /*return*/, data];
}
throw new Error('Not a BAI file');
case 7:
data.refCount = bytes.readInt32LE(4);
depth = 5;
binLimit = ((1 << (depth + 1) * 3) - 1) / 7; // read the indexes for each reference sequence
data.indices = new Array(data.refCount);
currOffset = 8;
i = 0;
case 13:
if (!(i < data.refCount)) {
_context2.next = 50;
break;
});
});
};
BAI.prototype.indexCov = function (seqId, start, end, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var v, range, indexData, seqIdx, _a, linearIndex, stats, e, s, depths, totalSize, currentPos, i, j;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
v = 16384;
range = start !== undefined;
return [4 /*yield*/, this.parse(opts)];
case 1:
indexData = _b.sent();
seqIdx = indexData.indices[seqId];
if (!seqIdx) {
return [2 /*return*/, []];
}
_a = seqIdx.linearIndex, linearIndex = _a === void 0 ? [] : _a, stats = seqIdx.stats;
if (!linearIndex.length) {
return [2 /*return*/, []];
}
e = end !== undefined ? roundUp(end, v) : (linearIndex.length - 1) * v;
s = start !== undefined ? roundDown(start, v) : 0;
if (range) {
depths = new Array((e - s) / v);
}
else {
depths = new Array(linearIndex.length - 1);
}
totalSize = linearIndex[linearIndex.length - 1].blockPosition;
if (e > (linearIndex.length - 1) * v) {
throw new Error('query outside of range of linear index');
}
currentPos = linearIndex[s / v].blockPosition;
for (i = s / v, j = 0; i < e / v; i++, j++) {
depths[j] = {
score: linearIndex[i + 1].blockPosition - currentPos,
start: i * v,
end: i * v + v,
};
currentPos = linearIndex[i + 1].blockPosition;
}
return [2 /*return*/, depths.map(function (d) {
return __assign(__assign({}, d), { score: (d.score * stats.lineCount) / totalSize });
})];
}
_context2.next = 16;
return (0, _util.abortBreakPoint)(opts.signal);
case 16:
// the binning index
binCount = bytes.readInt32LE(currOffset);
stats = void 0;
currOffset += 4;
binIndex = {};
j = 0;
case 21:
if (!(j < binCount)) {
_context2.next = 42;
break;
}
bin = bytes.readUInt32LE(currOffset);
currOffset += 4;
if (!(bin === binLimit + 1)) {
_context2.next = 30;
break;
}
currOffset += 4;
stats = this.parsePseudoBin(bytes, currOffset);
currOffset += 32;
_context2.next = 39;
break;
case 30:
if (!(bin > binLimit + 1)) {
_context2.next = 34;
break;
}
throw new Error('bai index contains too many bins, please use CSI');
case 34:
chunkCount = bytes.readInt32LE(currOffset);
currOffset += 4;
chunks = new Array(chunkCount);
for (k = 0; k < chunkCount; k += 1) {
u = (0, _virtualOffset.fromBytes)(bytes, currOffset);
v = (0, _virtualOffset.fromBytes)(bytes, currOffset + 8);
currOffset += 16;
this._findFirstData(data, u);
chunks[k] = new _chunk.default(u, v, bin);
}
binIndex[bin] = chunks;
case 39:
j += 1;
_context2.next = 21;
break;
case 42:
linearCount = bytes.readInt32LE(currOffset);
currOffset += 4; // as we're going through the linear index, figure out
// the smallest virtual offset in the indexes, which
// tells us where the BAM header ends
linearIndex = new Array(linearCount);
for (_k = 0; _k < linearCount; _k += 1) {
linearIndex[_k] = (0, _virtualOffset.fromBytes)(bytes, currOffset);
currOffset += 8;
this._findFirstData(data, linearIndex[_k]);
}
data.indices[i] = {
binIndex: binIndex,
linearIndex: linearIndex,
stats: stats
};
case 47:
i += 1;
_context2.next = 13;
break;
case 50:
return _context2.abrupt("return", data);
case 51:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function _parse() {
return _parse2.apply(this, arguments);
}
return _parse;
}()
}, {
key: "indexCov",
value: function () {
var _indexCov = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(seqId, start, end) {
var opts,
v,
range,
indexData,
seqIdx,
_seqIdx$linearIndex,
linearIndex,
stats,
e,
s,
depths,
totalSize,
currentPos,
i,
j,
_args3 = arguments;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
opts = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
v = 16384;
range = start !== undefined;
_context3.next = 5;
return this.parse(opts);
case 5:
indexData = _context3.sent;
seqIdx = indexData.indices[seqId];
if (seqIdx) {
_context3.next = 9;
break;
}
return _context3.abrupt("return", []);
case 9:
_seqIdx$linearIndex = seqIdx.linearIndex, linearIndex = _seqIdx$linearIndex === void 0 ? [] : _seqIdx$linearIndex, stats = seqIdx.stats;
if (linearIndex.length) {
_context3.next = 12;
break;
}
return _context3.abrupt("return", []);
case 12:
e = end !== undefined ? roundUp(end, v) : (linearIndex.length - 1) * v;
s = start !== undefined ? roundDown(start, v) : 0;
if (range) {
depths = new Array((e - s) / v);
} else {
depths = new Array(linearIndex.length - 1);
}
totalSize = linearIndex[linearIndex.length - 1].blockPosition;
if (!(e > (linearIndex.length - 1) * v)) {
_context3.next = 18;
break;
}
throw new Error('query outside of range of linear index');
case 18:
currentPos = linearIndex[s / v].blockPosition;
for (i = s / v, j = 0; i < e / v; i++, j++) {
depths[j] = {
score: linearIndex[i + 1].blockPosition - currentPos,
start: i * v,
end: i * v + v
};
currentPos = linearIndex[i + 1].blockPosition;
}
return _context3.abrupt("return", (0, _map.default)(depths).call(depths, function (d) {
return _objectSpread(_objectSpread({}, d), {}, {
score: d.score * stats.lineCount / totalSize
});
}));
case 21:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function indexCov(_x2, _x3, _x4) {
return _indexCov.apply(this, arguments);
}
return indexCov;
}()
});
});
};
/**

@@ -436,131 +251,68 @@ * calculate the list of bins that may overlap with region [beg,end) (zero-based half-open)

*/
}, {
key: "reg2bins",
value: function reg2bins(beg, end) {
end -= 1;
return [[0, 0], [1 + (beg >> 26), 1 + (end >> 26)], [9 + (beg >> 23), 9 + (end >> 23)], [73 + (beg >> 20), 73 + (end >> 20)], [585 + (beg >> 17), 585 + (end >> 17)], [4681 + (beg >> 14), 4681 + (end >> 14)]];
}
}, {
key: "blocksForRange",
value: function () {
var _blocksForRange = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(refId, min, max) {
var opts,
indexData,
ba,
overlappingBins,
chunks,
_iterator,
_step,
_step$value,
start,
end,
bin,
binChunks,
c,
nintv,
lowest,
minLin,
maxLin,
i,
vp,
_args4 = arguments;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
opts = _args4.length > 3 && _args4[3] !== undefined ? _args4[3] : {};
if (min < 0) {
min = 0;
}
_context4.next = 4;
return this.parse(opts);
case 4:
indexData = _context4.sent;
if (indexData) {
_context4.next = 7;
break;
}
return _context4.abrupt("return", []);
case 7:
ba = indexData.indices[refId];
if (ba) {
_context4.next = 10;
break;
}
return _context4.abrupt("return", []);
case 10:
overlappingBins = this.reg2bins(min, max); // List of bin #s that overlap min, max
chunks = []; // Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
_iterator = _createForOfIteratorHelper(overlappingBins);
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
_step$value = (0, _slicedToArray2.default)(_step.value, 2), start = _step$value[0], end = _step$value[1];
for (bin = start; bin <= end; bin++) {
if (ba.binIndex[bin]) {
binChunks = ba.binIndex[bin];
for (c = 0; c < binChunks.length; ++c) {
chunks.push(new _chunk.default(binChunks[c].minv, binChunks[c].maxv, bin));
BAI.prototype.reg2bins = function (beg, end) {
end -= 1;
return [
[0, 0],
[1 + (beg >> 26), 1 + (end >> 26)],
[9 + (beg >> 23), 9 + (end >> 23)],
[73 + (beg >> 20), 73 + (end >> 20)],
[585 + (beg >> 17), 585 + (end >> 17)],
[4681 + (beg >> 14), 4681 + (end >> 14)],
];
};
BAI.prototype.blocksForRange = function (refId, min, max, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var indexData, ba, overlappingBins, chunks, _i, overlappingBins_1, _a, start, end, bin, binChunks, c, nintv, lowest, minLin, maxLin, i, vp;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
if (min < 0) {
min = 0;
}
}
}
} // Use the linear index to find minimum file position of chunks that could contain alignments in the region
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
return [4 /*yield*/, this.parse(opts)];
case 1:
indexData = _b.sent();
if (!indexData) {
return [2 /*return*/, []];
}
ba = indexData.indices[refId];
if (!ba) {
return [2 /*return*/, []];
}
overlappingBins = this.reg2bins(min, max) // List of bin #s that overlap min, max
;
chunks = [];
// Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
for (_i = 0, overlappingBins_1 = overlappingBins; _i < overlappingBins_1.length; _i++) {
_a = overlappingBins_1[_i], start = _a[0], end = _a[1];
for (bin = start; bin <= end; bin++) {
if (ba.binIndex[bin]) {
binChunks = ba.binIndex[bin];
for (c = 0; c < binChunks.length; ++c) {
chunks.push(new chunk_1.default(binChunks[c].minv, binChunks[c].maxv, bin));
}
}
}
}
nintv = ba.linearIndex.length;
lowest = null;
minLin = Math.min(min >> 14, nintv - 1);
maxLin = Math.min(max >> 14, nintv - 1);
for (i = minLin; i <= maxLin; ++i) {
vp = ba.linearIndex[i];
if (vp) {
if (!lowest || vp.compareTo(lowest) < 0) {
lowest = vp;
}
}
}
return [2 /*return*/, (0, util_1.optimizeChunks)(chunks, lowest)];
}
nintv = ba.linearIndex.length;
lowest = null;
minLin = Math.min(min >> 14, nintv - 1);
maxLin = Math.min(max >> 14, nintv - 1);
for (i = minLin; i <= maxLin; ++i) {
vp = ba.linearIndex[i];
if (vp) {
if (!lowest || vp.compareTo(lowest) < 0) {
lowest = vp;
}
}
}
return _context4.abrupt("return", (0, _util.optimizeChunks)(chunks, lowest));
case 20:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function blocksForRange(_x5, _x6, _x7) {
return _blocksForRange.apply(this, arguments);
}
return blocksForRange;
}()
}]);
return BAI;
}(_indexFile.default);
});
});
};
return BAI;
}(indexFile_1.default));
exports.default = BAI;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYWkudHMiXSwibmFtZXMiOlsiQkFJX01BR0lDIiwicm91bmREb3duIiwibiIsIm11bHRpcGxlIiwicm91bmRVcCIsIkJBSSIsImJ5dGVzIiwib2Zmc2V0IiwibGluZUNvdW50IiwiTG9uZyIsImZyb21CeXRlc0xFIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwicmVmSWQiLCJvcHRzIiwicGFyc2UiLCJwcm9tIiwiaW5kZXgiLCJpbmRpY2VzIiwicmV0Iiwic3RhdHMiLCJ1bmRlZmluZWQiLCJkYXRhIiwiYmFpIiwibWF4QmxvY2tTaXplIiwiZmlsZWhhbmRsZSIsInJlYWRGaWxlIiwicmVhZFVJbnQzMkxFIiwiRXJyb3IiLCJyZWZDb3VudCIsInJlYWRJbnQzMkxFIiwiZGVwdGgiLCJiaW5MaW1pdCIsImN1cnJPZmZzZXQiLCJpIiwic2lnbmFsIiwiYmluQ291bnQiLCJiaW5JbmRleCIsImoiLCJiaW4iLCJwYXJzZVBzZXVkb0JpbiIsImNodW5rQ291bnQiLCJjaHVua3MiLCJrIiwidSIsInYiLCJfZmluZEZpcnN0RGF0YSIsIkNodW5rIiwibGluZWFyQ291bnQiLCJsaW5lYXJJbmRleCIsInNlcUlkIiwic3RhcnQiLCJlbmQiLCJyYW5nZSIsImluZGV4RGF0YSIsInNlcUlkeCIsImxlbmd0aCIsImUiLCJzIiwiZGVwdGhzIiwidG90YWxTaXplIiwiYmxvY2tQb3NpdGlvbiIsImN1cnJlbnRQb3MiLCJzY29yZSIsImQiLCJiZWciLCJtaW4iLCJtYXgiLCJiYSIsIm92ZXJsYXBwaW5nQmlucyIsInJlZzJiaW5zIiwiYmluQ2h1bmtzIiwiYyIsInB1c2giLCJtaW52IiwibWF4diIsIm5pbnR2IiwibG93ZXN0IiwibWluTGluIiwiTWF0aCIsIm1heExpbiIsInZwIiwiY29tcGFyZVRvIiwiSW5kZXhGaWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q3pCcUIsZ0JBQUFBLE0sR0FBUyxJO0FBQ1BDLGdCQUFBQSxNLEdBQVNDLElBQUksQ0FBQ2IsR0FBTCxDQUFTQSxHQUFHLElBQUksRUFBaEIsRUFBb0JVLEtBQUssR0FBRyxDQUE1QixDO0FBQ1RJLGdCQUFBQSxNLEdBQVNELElBQUksQ0FBQ2IsR0FBTCxDQUFTQyxHQUFHLElBQUksRUFBaEIsRUFBb0JTLEtBQUssR0FBRyxDQUE1QixDOztBQUNmLHFCQUFTMUMsQ0FBVCxHQUFhNEMsTUFBYixFQUFxQjVDLENBQUMsSUFBSThDLE1BQTFCLEVBQWtDLEVBQUU5QyxDQUFwQyxFQUF1QztBQUMvQitDLGtCQUFBQSxFQUQrQixHQUMxQmIsRUFBRSxDQUFDbkIsV0FBSCxDQUFlZixDQUFmLENBRDBCOztBQUVyQyxzQkFBSStDLEVBQUosRUFBUTtBQUNOLHdCQUFJLENBQUNKLE1BQUQsSUFBV0ksRUFBRSxDQUFDQyxTQUFILENBQWFMLE1BQWIsSUFBdUIsQ0FBdEMsRUFBeUM7QUFDdkNBLHNCQUFBQSxNQUFNLEdBQUdJLEVBQVQ7QUFDRDtBQUNGO0FBQ0Y7O2tEQUVNLDBCQUFldkMsTUFBZixFQUF1Qm1DLE1BQXZCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTVMc0JNLGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvbmcgZnJvbSAnbG9uZydcbmltcG9ydCB7IGZyb21CeXRlcyB9IGZyb20gJy4vdmlydHVhbE9mZnNldCdcbmltcG9ydCBDaHVuayBmcm9tICcuL2NodW5rJ1xuXG5pbXBvcnQgSW5kZXhGaWxlIGZyb20gJy4vaW5kZXhGaWxlJ1xuaW1wb3J0IHsgbG9uZ1RvTnVtYmVyLCBhYm9ydEJyZWFrUG9pbnQsIG9wdGltaXplQ2h1bmtzLCBCYXNlT3B0cyB9IGZyb20gJy4vdXRpbCdcblxuY29uc3QgQkFJX01BR0lDID0gMjE1NzgwNTAgLy8gQkFJXFwxXG5cbmZ1bmN0aW9uIHJvdW5kRG93bihuOiBudW1iZXIsIG11bHRpcGxlOiBudW1iZXIpIHtcbiAgcmV0dXJuIG4gLSAobiAlIG11bHRpcGxlKVxufVxuZnVuY3Rpb24gcm91bmRVcChuOiBudW1iZXIsIG11bHRpcGxlOiBudW1iZXIpIHtcbiAgcmV0dXJuIG4gLSAobiAlIG11bHRpcGxlKSArIG11bHRpcGxlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJBSSBleHRlbmRzIEluZGV4RmlsZSB7XG4gIHBhcnNlUHNldWRvQmluKGJ5dGVzOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGluZUNvdW50ID0gbG9uZ1RvTnVtYmVyKFxuICAgICAgTG9uZy5mcm9tQnl0ZXNMRShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcywgb2Zmc2V0ICsgMTYsIG9mZnNldCArIDI0KSwgdHJ1ZSksXG4gICAgKVxuICAgIHJldHVybiB7IGxpbmVDb3VudCB9XG4gIH1cblxuICBhc3luYyBsaW5lQ291bnQocmVmSWQ6IG51bWJlciwgb3B0czogQmFzZU9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHByb20gPSBhd2FpdCB0aGlzLnBhcnNlKG9wdHMpXG4gICAgY29uc3QgaW5kZXggPSBwcm9tLmluZGljZXNbcmVmSWRdXG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGNvbnN0IHJldCA9IGluZGV4LnN0YXRzIHx8IHt9XG4gICAgcmV0dXJuIHJldC5saW5lQ291bnQgPT09IHVuZGVmaW5lZCA/IC0xIDogcmV0LmxpbmVDb3VudFxuICB9XG5cbiAgLy8gZmV0Y2ggYW5kIHBhcnNlIHRoZSBpbmRleFxuICBhc3luYyBfcGFyc2Uob3B0czogQmFzZU9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IGJhaTogdHJ1ZSwgbWF4QmxvY2tTaXplOiAxIDw8IDE2IH1cbiAgICBjb25zdCBieXRlcyA9IChhd2FpdCB0aGlzLmZpbGVoYW5kbGUucmVhZEZpbGUob3B0cykpIGFzIEJ1ZmZlclxuXG4gICAgLy8gY2hlY2sgQkFJIG1hZ2ljIG51bWJlcnNcbiAgICBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApICE9PSBCQUlfTUFHSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgQkFJIGZpbGUnKVxuICAgIH1cblxuICAgIGRhdGEucmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KVxuICAgIGNvbnN0IGRlcHRoID0gNVxuICAgIGNvbnN0IGJpbkxpbWl0ID0gKCgxIDw8ICgoZGVwdGggKyAxKSAqIDMpKSAtIDEpIC8gN1xuXG4gICAgLy8gcmVhZCB0aGUgaW5kZXhlcyBmb3IgZWFjaCByZWZlcmVuY2Ugc2VxdWVuY2VcbiAgICBkYXRhLmluZGljZXMgPSBuZXcgQXJyYXkoZGF0YS5yZWZDb3VudClcbiAgICBsZXQgY3Vyck9mZnNldCA9IDhcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucmVmQ291bnQ7IGkgKz0gMSkge1xuICAgICAgYXdhaXQgYWJvcnRCcmVha1BvaW50KG9wdHMuc2lnbmFsKVxuXG4gICAgICAvLyB0aGUgYmlubmluZyBpbmRleFxuICAgICAgY29uc3QgYmluQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KVxuICAgICAgbGV0IHN0YXRzXG5cbiAgICAgIGN1cnJPZmZzZXQgKz0gNFxuICAgICAgY29uc3QgYmluSW5kZXg6IHsgW2tleTogbnVtYmVyXTogQ2h1bmtbXSB9ID0ge31cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmluQ291bnQ7IGogKz0gMSkge1xuICAgICAgICBjb25zdCBiaW4gPSBieXRlcy5yZWFkVUludDMyTEUoY3Vyck9mZnNldClcbiAgICAgICAgY3Vyck9mZnNldCArPSA0XG4gICAgICAgIGlmIChiaW4gPT09IGJpbkxpbWl0ICsgMSkge1xuICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNFxuICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldClcbiAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDMyXG4gICAgICAgIH0gZWxzZSBpZiAoYmluID4gYmluTGltaXQgKyAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWkgaW5kZXggY29udGFpbnMgdG9vIG1hbnkgYmlucywgcGxlYXNlIHVzZSBDU0knKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNodW5rQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KVxuICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNFxuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IG5ldyBBcnJheShjaHVua0NvdW50KVxuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2h1bmtDb3VudDsgayArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KVxuICAgICAgICAgICAgY29uc3QgdiA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDgpXG4gICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2XG4gICAgICAgICAgICB0aGlzLl9maW5kRmlyc3REYXRhKGRhdGEsIHUpXG4gICAgICAgICAgICBjaHVua3Nba10gPSBuZXcgQ2h1bmsodSwgdiwgYmluKVxuICAgICAgICAgIH1cbiAgICAgICAgICBiaW5JbmRleFtiaW5dID0gY2h1bmtzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZWFyQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KVxuICAgICAgY3Vyck9mZnNldCArPSA0XG4gICAgICAvLyBhcyB3ZSdyZSBnb2luZyB0aHJvdWdoIHRoZSBsaW5lYXIgaW5kZXgsIGZpZ3VyZSBvdXRcbiAgICAgIC8vIHRoZSBzbWFsbGVzdCB2aXJ0dWFsIG9mZnNldCBpbiB0aGUgaW5kZXhlcywgd2hpY2hcbiAgICAgIC8vIHRlbGxzIHVzIHdoZXJlIHRoZSBCQU0gaGVhZGVyIGVuZHNcbiAgICAgIGNvbnN0IGxpbmVhckluZGV4ID0gbmV3IEFycmF5KGxpbmVhckNvdW50KVxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lYXJDb3VudDsgayArPSAxKSB7XG4gICAgICAgIGxpbmVhckluZGV4W2tdID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KVxuICAgICAgICBjdXJyT2Zmc2V0ICs9IDhcbiAgICAgICAgdGhpcy5fZmluZEZpcnN0RGF0YShkYXRhLCBsaW5lYXJJbmRleFtrXSlcbiAgICAgIH1cblxuICAgICAgZGF0YS5pbmRpY2VzW2ldID0geyBiaW5JbmRleCwgbGluZWFySW5kZXgsIHN0YXRzIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgYXN5bmMgaW5kZXhDb3YoXG4gICAgc2VxSWQ6IG51bWJlcixcbiAgICBzdGFydD86IG51bWJlcixcbiAgICBlbmQ/OiBudW1iZXIsXG4gICAgb3B0czogQmFzZU9wdHMgPSB7fSxcbiAgKTogUHJvbWlzZTx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBzY29yZTogbnVtYmVyIH1bXT4ge1xuICAgIGNvbnN0IHYgPSAxNjM4NFxuICAgIGNvbnN0IHJhbmdlID0gc3RhcnQgIT09IHVuZGVmaW5lZFxuICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2Uob3B0cylcbiAgICBjb25zdCBzZXFJZHggPSBpbmRleERhdGEuaW5kaWNlc1tzZXFJZF1cbiAgICBpZiAoIXNlcUlkeCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIGNvbnN0IHsgbGluZWFySW5kZXggPSBbXSwgc3RhdHMgfSA9IHNlcUlkeFxuICAgIGlmICghbGluZWFySW5kZXgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gICAgY29uc3QgZSA9IGVuZCAhPT0gdW5kZWZpbmVkID8gcm91bmRVcChlbmQsIHYpIDogKGxpbmVhckluZGV4Lmxlbmd0aCAtIDEpICogdlxuICAgIGNvbnN0IHMgPSBzdGFydCAhPT0gdW5kZWZpbmVkID8gcm91bmREb3duKHN0YXJ0LCB2KSA6IDBcbiAgICBsZXQgZGVwdGhzXG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICBkZXB0aHMgPSBuZXcgQXJyYXkoKGUgLSBzKSAvIHYpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRlcHRocyA9IG5ldyBBcnJheShsaW5lYXJJbmRleC5sZW5ndGggLSAxKVxuICAgIH1cbiAgICBjb25zdCB0b3RhbFNpemUgPSBsaW5lYXJJbmRleFtsaW5lYXJJbmRleC5sZW5ndGggLSAxXS5ibG9ja1Bvc2l0aW9uXG4gICAgaWYgKGUgPiAobGluZWFySW5kZXgubGVuZ3RoIC0gMSkgKiB2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5IG91dHNpZGUgb2YgcmFuZ2Ugb2YgbGluZWFyIGluZGV4JylcbiAgICB9XG4gICAgbGV0IGN1cnJlbnRQb3MgPSBsaW5lYXJJbmRleFtzIC8gdl0uYmxvY2tQb3NpdGlvblxuICAgIGZvciAobGV0IGkgPSBzIC8gdiwgaiA9IDA7IGkgPCBlIC8gdjsgaSsrLCBqKyspIHtcbiAgICAgIGRlcHRoc1tqXSA9IHtcbiAgICAgICAgc2NvcmU6IGxpbmVhckluZGV4W2kgKyAxXS5ibG9ja1Bvc2l0aW9uIC0gY3VycmVudFBvcyxcbiAgICAgICAgc3RhcnQ6IGkgKiB2LFxuICAgICAgICBlbmQ6IGkgKiB2ICsgdixcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRQb3MgPSBsaW5lYXJJbmRleFtpICsgMV0uYmxvY2tQb3NpdGlvblxuICAgIH1cbiAgICByZXR1cm4gZGVwdGhzLm1hcChkID0+IHtcbiAgICAgIHJldHVybiB7IC4uLmQsIHNjb3JlOiAoZC5zY29yZSAqIHN0YXRzLmxpbmVDb3VudCkgLyB0b3RhbFNpemUgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogY2FsY3VsYXRlIHRoZSBsaXN0IG9mIGJpbnMgdGhhdCBtYXkgb3ZlcmxhcCB3aXRoIHJlZ2lvbiBbYmVnLGVuZCkgKHplcm8tYmFzZWQgaGFsZi1vcGVuKVxuICAgKiBAcmV0dXJucyB7QXJyYXlbbnVtYmVyXX1cbiAgICovXG4gIHJlZzJiaW5zKGJlZzogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgIGVuZCAtPSAxXG4gICAgcmV0dXJuIFtcbiAgICAgIFswLCAwXSxcbiAgICAgIFsxICsgKGJlZyA+PiAyNiksIDEgKyAoZW5kID4+IDI2KV0sXG4gICAgICBbOSArIChiZWcgPj4gMjMpLCA5ICsgKGVuZCA+PiAyMyldLFxuICAgICAgWzczICsgKGJlZyA+PiAyMCksIDczICsgKGVuZCA+PiAyMCldLFxuICAgICAgWzU4NSArIChiZWcgPj4gMTcpLCA1ODUgKyAoZW5kID4+IDE3KV0sXG4gICAgICBbNDY4MSArIChiZWcgPj4gMTQpLCA0NjgxICsgKGVuZCA+PiAxNCldLFxuICAgIF1cbiAgfVxuXG4gIGFzeW5jIGJsb2Nrc0ZvclJhbmdlKHJlZklkOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgb3B0czogQmFzZU9wdHMgPSB7fSkge1xuICAgIGlmIChtaW4gPCAwKSB7XG4gICAgICBtaW4gPSAwXG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKVxuICAgIGlmICghaW5kZXhEYXRhKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF1cbiAgICBpZiAoIWJhKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGFwcGluZ0JpbnMgPSB0aGlzLnJlZzJiaW5zKG1pbiwgbWF4KSAvLyBMaXN0IG9mIGJpbiAjcyB0aGF0IG92ZXJsYXAgbWluLCBtYXhcbiAgICBjb25zdCBjaHVua3M6IENodW5rW10gPSBbXVxuXG4gICAgLy8gRmluZCBjaHVua3MgaW4gb3ZlcmxhcHBpbmcgYmlucy4gIExlYWYgYmlucyAoPCA0NjgxKSBhcmUgbm90IHBydW5lZFxuICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykge1xuICAgICAgZm9yIChsZXQgYmluID0gc3RhcnQ7IGJpbiA8PSBlbmQ7IGJpbisrKSB7XG4gICAgICAgIGlmIChiYS5iaW5JbmRleFtiaW5dKSB7XG4gICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXVxuICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgYmluQ2h1bmtzLmxlbmd0aDsgKytjKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgbGluZWFyIGluZGV4IHRvIGZpbmQgbWluaW11bSBmaWxlIHBvc2l0aW9uIG9mIGNodW5rcyB0aGF0IGNvdWxkIGNvbnRhaW4gYWxpZ25tZW50cyBpbiB0aGUgcmVnaW9uXG4gICAgY29uc3QgbmludHYgPSBiYS5saW5lYXJJbmRleC5sZW5ndGhcbiAgICBsZXQgbG93ZXN0ID0gbnVsbFxuICAgIGNvbnN0IG1pbkxpbiA9IE1hdGgubWluKG1pbiA+PiAxNCwgbmludHYgLSAxKVxuICAgIGNvbnN0IG1heExpbiA9IE1hdGgubWluKG1heCA+PiAxNCwgbmludHYgLSAxKVxuICAgIGZvciAobGV0IGkgPSBtaW5MaW47IGkgPD0gbWF4TGluOyArK2kpIHtcbiAgICAgIGNvbnN0IHZwID0gYmEubGluZWFySW5kZXhbaV1cbiAgICAgIGlmICh2cCkge1xuICAgICAgICBpZiAoIWxvd2VzdCB8fCB2cC5jb21wYXJlVG8obG93ZXN0KSA8IDApIHtcbiAgICAgICAgICBsb3dlc3QgPSB2cFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGltaXplQ2h1bmtzKGNodW5rcywgbG93ZXN0KVxuICB9XG59XG4iXX0=
//# sourceMappingURL=bai.js.map

@@ -14,3 +14,2 @@ /// <reference types="node" />

private header;
protected featureCache: any;
protected chrToIndex: any;

@@ -26,3 +25,3 @@ protected indexToChr: any;

*/
constructor({ bamFilehandle, bamPath, bamUrl, baiPath, baiFilehandle, baiUrl, csiPath, csiFilehandle, csiUrl, cacheSize, fetchSizeLimit, chunkSizeLimit, yieldThreadTime, renameRefSeqs, }: {
constructor({ bamFilehandle, bamPath, bamUrl, baiPath, baiFilehandle, baiUrl, csiPath, csiFilehandle, csiUrl, fetchSizeLimit, chunkSizeLimit, yieldThreadTime, renameRefSeqs, }: {
bamFilehandle?: GenericFilehandle;

@@ -37,3 +36,2 @@ bamPath?: string;

csiUrl?: string;
cacheSize?: number;
fetchSizeLimit?: number;

@@ -66,9 +64,9 @@ chunkSizeLimit?: number;

_readChunk({ chunk, opts }: {
chunk: unknown;
chunk: Chunk;
opts: BaseOpts;
}, abortSignal?: AbortSignal): Promise<never[] | {
}): Promise<{
data: any;
cpositions: any;
dpositions: any;
chunk: unknown;
chunk: Chunk;
}>;

@@ -75,0 +73,0 @@ readBamFeatures(ba: Buffer, cpositions: number[], dpositions: number[], chunk: Chunk): Promise<BAMFeature[]>;

"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
Object.defineProperty(exports, "__esModule", { value: true });
// little class representing a chunk in the index
var Chunk = /*#__PURE__*/function () {
/**
* @param {VirtualOffset} minv
* @param {VirtualOffset} maxv
* @param {number} bin
* @param {number} [fetchedSize]
*/
function Chunk(minv, maxv, bin) {
var fetchedSize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
(0, _classCallCheck2.default)(this, Chunk);
(0, _defineProperty2.default)(this, "minv", void 0);
(0, _defineProperty2.default)(this, "maxv", void 0);
(0, _defineProperty2.default)(this, "bin", void 0);
(0, _defineProperty2.default)(this, "_fetchedSize", void 0);
this.minv = minv;
this.maxv = maxv;
this.bin = bin;
this._fetchedSize = fetchedSize;
}
(0, _createClass2.default)(Chunk, [{
key: "toUniqueString",
value: function toUniqueString() {
var _context, _context2, _context3;
return (0, _concat.default)(_context = (0, _concat.default)(_context2 = (0, _concat.default)(_context3 = "".concat(this.minv, "..")).call(_context3, this.maxv, " (bin ")).call(_context2, this.bin, ", fetchedSize ")).call(_context, this.fetchedSize(), ")");
var Chunk = /** @class */ (function () {
/**
* @param {VirtualOffset} minv
* @param {VirtualOffset} maxv
* @param {number} bin
* @param {number} [fetchedSize]
*/
function Chunk(minv, maxv, bin, fetchedSize) {
if (fetchedSize === void 0) { fetchedSize = undefined; }
this.minv = minv;
this.maxv = maxv;
this.bin = bin;
this._fetchedSize = fetchedSize;
}
}, {
key: "toString",
value: function toString() {
return this.toUniqueString();
}
}, {
key: "compareTo",
value: function compareTo(b) {
return this.minv.compareTo(b.minv) || this.maxv.compareTo(b.maxv) || this.bin - b.bin;
}
}, {
key: "fetchedSize",
value: function fetchedSize() {
if (this._fetchedSize !== undefined) {
return this._fetchedSize;
}
return this.maxv.blockPosition + (1 << 16) - this.minv.blockPosition;
}
}]);
return Chunk;
}();
Chunk.prototype.toUniqueString = function () {
return "".concat(this.minv, "..").concat(this.maxv, " (bin ").concat(this.bin, ", fetchedSize ").concat(this.fetchedSize(), ")");
};
Chunk.prototype.toString = function () {
return this.toUniqueString();
};
Chunk.prototype.compareTo = function (b) {
return (this.minv.compareTo(b.minv) ||
this.maxv.compareTo(b.maxv) ||
this.bin - b.bin);
};
Chunk.prototype.fetchedSize = function () {
if (this._fetchedSize !== undefined) {
return this._fetchedSize;
}
return this.maxv.blockPosition + (1 << 16) - this.minv.blockPosition;
};
return Chunk;
}());
exports.default = Chunk;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaHVuay50cyJdLCJuYW1lcyI6WyJDaHVuayIsIm1pbnYiLCJtYXh2IiwiYmluIiwiZmV0Y2hlZFNpemUiLCJ1bmRlZmluZWQiLCJfZmV0Y2hlZFNpemUiLCJ0b1VuaXF1ZVN0cmluZyIsImIiLCJjb21wYXJlVG8iLCJibG9ja1Bvc2l0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0lBQ3FCQSxLO0FBTW5COzs7Ozs7QUFNQSxpQkFBWUMsSUFBWixFQUFpQ0MsSUFBakMsRUFBc0RDLEdBQXRELEVBQTRGO0FBQUEsUUFBekJDLFdBQXlCLHVFQUFYQyxTQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUMxRixTQUFLSixJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLRyxZQUFMLEdBQW9CRixXQUFwQjtBQUNEOzs7O3FDQUVnQjtBQUFBOztBQUNmLHlIQUFVLEtBQUtILElBQWYseUJBQXdCLEtBQUtDLElBQTdCLDZCQUEwQyxLQUFLQyxHQUEvQyxvQ0FBbUUsS0FBS0MsV0FBTCxFQUFuRTtBQUNEOzs7K0JBRVU7QUFDVCxhQUFPLEtBQUtHLGNBQUwsRUFBUDtBQUNEOzs7OEJBRVNDLEMsRUFBVTtBQUNsQixhQUFPLEtBQUtQLElBQUwsQ0FBVVEsU0FBVixDQUFvQkQsQ0FBQyxDQUFDUCxJQUF0QixLQUErQixLQUFLQyxJQUFMLENBQVVPLFNBQVYsQ0FBb0JELENBQUMsQ0FBQ04sSUFBdEIsQ0FBL0IsSUFBOEQsS0FBS0MsR0FBTCxHQUFXSyxDQUFDLENBQUNMLEdBQWxGO0FBQ0Q7OztrQ0FFYTtBQUNaLFVBQUksS0FBS0csWUFBTCxLQUFzQkQsU0FBMUIsRUFBcUM7QUFDbkMsZUFBTyxLQUFLQyxZQUFaO0FBQ0Q7O0FBQ0QsYUFBTyxLQUFLSixJQUFMLENBQVVRLGFBQVYsSUFBMkIsS0FBSyxFQUFoQyxJQUFzQyxLQUFLVCxJQUFMLENBQVVTLGFBQXZEO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlydHVhbE9mZnNldCBmcm9tICcuL3ZpcnR1YWxPZmZzZXQnXG5cbi8vIGxpdHRsZSBjbGFzcyByZXByZXNlbnRpbmcgYSBjaHVuayBpbiB0aGUgaW5kZXhcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rIHtcbiAgcHVibGljIG1pbnY6IFZpcnR1YWxPZmZzZXRcbiAgcHVibGljIG1heHY6IFZpcnR1YWxPZmZzZXRcbiAgcHVibGljIGJpbjogbnVtYmVyXG4gIHB1YmxpYyBfZmV0Y2hlZFNpemU/OiBudW1iZXJcblxuICAvKipcbiAgICogQHBhcmFtIHtWaXJ0dWFsT2Zmc2V0fSBtaW52XG4gICAqIEBwYXJhbSB7VmlydHVhbE9mZnNldH0gbWF4dlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmluXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZmV0Y2hlZFNpemVdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtaW52OiBWaXJ0dWFsT2Zmc2V0LCBtYXh2OiBWaXJ0dWFsT2Zmc2V0LCBiaW46IG51bWJlciwgZmV0Y2hlZFNpemUgPSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm1pbnYgPSBtaW52XG4gICAgdGhpcy5tYXh2ID0gbWF4dlxuICAgIHRoaXMuYmluID0gYmluXG4gICAgdGhpcy5fZmV0Y2hlZFNpemUgPSBmZXRjaGVkU2l6ZVxuICB9XG5cbiAgdG9VbmlxdWVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMubWludn0uLiR7dGhpcy5tYXh2fSAoYmluICR7dGhpcy5iaW59LCBmZXRjaGVkU2l6ZSAke3RoaXMuZmV0Y2hlZFNpemUoKX0pYFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9VbmlxdWVTdHJpbmcoKVxuICB9XG5cbiAgY29tcGFyZVRvKGI6IENodW5rKSB7XG4gICAgcmV0dXJuIHRoaXMubWludi5jb21wYXJlVG8oYi5taW52KSB8fCB0aGlzLm1heHYuY29tcGFyZVRvKGIubWF4dikgfHwgdGhpcy5iaW4gLSBiLmJpblxuICB9XG5cbiAgZmV0Y2hlZFNpemUoKSB7XG4gICAgaWYgKHRoaXMuX2ZldGNoZWRTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mZXRjaGVkU2l6ZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYXh2LmJsb2NrUG9zaXRpb24gKyAoMSA8PCAxNikgLSB0aGlzLm1pbnYuYmxvY2tQb3NpdGlvblxuICB9XG59XG4iXX0=
//# sourceMappingURL=chunk.js.map
"use strict";
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _default = {
// the read is paired in sequencing, no matter whether it is mapped in a pair
BAM_FPAIRED: 1,
// the read is mapped in a proper pair
BAM_FPROPER_PAIR: 2,
// the read itself is unmapped; conflictive with BAM_FPROPER_PAIR
BAM_FUNMAP: 4,
// the mate is unmapped
BAM_FMUNMAP: 8,
// the read is mapped to the reverse strand
BAM_FREVERSE: 16,
// the mate is mapped to the reverse strand
BAM_FMREVERSE: 32,
// this is read1
BAM_FREAD1: 64,
// this is read2
BAM_FREAD2: 128,
// not primary alignment
BAM_FSECONDARY: 256,
// QC failure
BAM_FQCFAIL: 512,
// optical or PCR duplicate
BAM_FDUP: 1024,
// supplementary alignment
BAM_FSUPPLEMENTARY: 2048
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = {
// the read is paired in sequencing, no matter whether it is mapped in a pair
BAM_FPAIRED: 1,
// the read is mapped in a proper pair
BAM_FPROPER_PAIR: 2,
// the read itself is unmapped; conflictive with BAM_FPROPER_PAIR
BAM_FUNMAP: 4,
// the mate is unmapped
BAM_FMUNMAP: 8,
// the read is mapped to the reverse strand
BAM_FREVERSE: 16,
// the mate is mapped to the reverse strand
BAM_FMREVERSE: 32,
// this is read1
BAM_FREAD1: 64,
// this is read2
BAM_FREAD2: 128,
// not primary alignment
BAM_FSECONDARY: 256,
// QC failure
BAM_FQCFAIL: 512,
// optical or PCR duplicate
BAM_FDUP: 1024,
// supplementary alignment
BAM_FSUPPLEMENTARY: 2048,
};
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOlsiQkFNX0ZQQUlSRUQiLCJCQU1fRlBST1BFUl9QQUlSIiwiQkFNX0ZVTk1BUCIsIkJBTV9GTVVOTUFQIiwiQkFNX0ZSRVZFUlNFIiwiQkFNX0ZNUkVWRVJTRSIsIkJBTV9GUkVBRDEiLCJCQU1fRlJFQUQyIiwiQkFNX0ZTRUNPTkRBUlkiLCJCQU1fRlFDRkFJTCIsIkJBTV9GRFVQIiwiQkFNX0ZTVVBQTEVNRU5UQVJZIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7ZUFBZTtBQUNiO0FBQ0FBLEVBQUFBLFdBQVcsRUFBRSxDQUZBO0FBR2I7QUFDQUMsRUFBQUEsZ0JBQWdCLEVBQUUsQ0FKTDtBQUtiO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxDQU5DO0FBT2I7QUFDQUMsRUFBQUEsV0FBVyxFQUFFLENBUkE7QUFTYjtBQUNBQyxFQUFBQSxZQUFZLEVBQUUsRUFWRDtBQVdiO0FBQ0FDLEVBQUFBLGFBQWEsRUFBRSxFQVpGO0FBYWI7QUFDQUMsRUFBQUEsVUFBVSxFQUFFLEVBZEM7QUFlYjtBQUNBQyxFQUFBQSxVQUFVLEVBQUUsR0FoQkM7QUFpQmI7QUFDQUMsRUFBQUEsY0FBYyxFQUFFLEdBbEJIO0FBbUJiO0FBQ0FDLEVBQUFBLFdBQVcsRUFBRSxHQXBCQTtBQXFCYjtBQUNBQyxFQUFBQSxRQUFRLEVBQUUsSUF0Qkc7QUF1QmI7QUFDQUMsRUFBQUEsa0JBQWtCLEVBQUU7QUF4QlAsQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gIHRoZSByZWFkIGlzIHBhaXJlZCBpbiBzZXF1ZW5jaW5nLCBubyBtYXR0ZXIgd2hldGhlciBpdCBpcyBtYXBwZWQgaW4gYSBwYWlyXG4gIEJBTV9GUEFJUkVEOiAxLFxuICAvLyAgdGhlIHJlYWQgaXMgbWFwcGVkIGluIGEgcHJvcGVyIHBhaXJcbiAgQkFNX0ZQUk9QRVJfUEFJUjogMixcbiAgLy8gIHRoZSByZWFkIGl0c2VsZiBpcyB1bm1hcHBlZDsgY29uZmxpY3RpdmUgd2l0aCBCQU1fRlBST1BFUl9QQUlSXG4gIEJBTV9GVU5NQVA6IDQsXG4gIC8vICB0aGUgbWF0ZSBpcyB1bm1hcHBlZFxuICBCQU1fRk1VTk1BUDogOCxcbiAgLy8gIHRoZSByZWFkIGlzIG1hcHBlZCB0byB0aGUgcmV2ZXJzZSBzdHJhbmRcbiAgQkFNX0ZSRVZFUlNFOiAxNixcbiAgLy8gIHRoZSBtYXRlIGlzIG1hcHBlZCB0byB0aGUgcmV2ZXJzZSBzdHJhbmRcbiAgQkFNX0ZNUkVWRVJTRTogMzIsXG4gIC8vICB0aGlzIGlzIHJlYWQxXG4gIEJBTV9GUkVBRDE6IDY0LFxuICAvLyAgdGhpcyBpcyByZWFkMlxuICBCQU1fRlJFQUQyOiAxMjgsXG4gIC8vICBub3QgcHJpbWFyeSBhbGlnbm1lbnRcbiAgQkFNX0ZTRUNPTkRBUlk6IDI1NixcbiAgLy8gIFFDIGZhaWx1cmVcbiAgQkFNX0ZRQ0ZBSUw6IDUxMixcbiAgLy8gIG9wdGljYWwgb3IgUENSIGR1cGxpY2F0ZVxuICBCQU1fRkRVUDogMTAyNCxcbiAgLy8gIHN1cHBsZW1lbnRhcnkgYWxpZ25tZW50XG4gIEJBTV9GU1VQUExFTUVOVEFSWTogMjA0OCxcbn1cbiJdfQ==
//# sourceMappingURL=constants.js.map
"use strict";
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
exports.default = void 0;
var _getIterator2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator"));
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _getIteratorMethod2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator-method"));
var _symbol = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/symbol"));
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
var _construct = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/reflect/construct"));
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _long = _interopRequireDefault(require("long"));
var _bgzfFilehandle = require("@gmod/bgzf-filehandle");
var _virtualOffset = _interopRequireWildcard(require("./virtualOffset"));
var _chunk = _interopRequireDefault(require("./chunk"));
var _util = require("./util");
var _indexFile = _interopRequireDefault(require("./indexFile"));
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof _symbol.default === "undefined" || (0, _getIteratorMethod2.default)(o) == null) { if ((0, _isArray.default)(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = (0, _getIterator2.default)(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { var _context8; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = (0, _slice.default)(_context8 = Object.prototype.toString.call(o)).call(_context8, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return (0, _from.default)(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = (0, _construct.default)(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_construct.default) return false; if (_construct.default.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call((0, _construct.default)(Date, [], function () {})); return true; } catch (e) { return false; } }
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var long_1 = __importDefault(require("long"));
var bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
var virtualOffset_1 = __importStar(require("./virtualOffset"));
var chunk_1 = __importDefault(require("./chunk"));
var util_1 = require("./util");
var indexFile_1 = __importDefault(require("./indexFile"));
var CSI1_MAGIC = 21582659; // CSI\1
var CSI2_MAGIC = 38359875; // CSI\2
function lshift(num, bits) {
return num * Math.pow(2, bits);
return num * Math.pow(2, bits);
}
function rshift(num, bits) {
return Math.floor(num / Math.pow(2, bits));
return Math.floor(num / Math.pow(2, bits));
}
var CSI = /*#__PURE__*/function (_IndexFile) {
(0, _inherits2.default)(CSI, _IndexFile);
var _super = _createSuper(CSI);
function CSI(args) {
var _this;
(0, _classCallCheck2.default)(this, CSI);
_this = _super.call(this, args);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "maxBinNumber", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "depth", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "minShift", void 0);
_this.maxBinNumber = 0;
_this.depth = 0;
_this.minShift = 0;
return _this;
}
(0, _createClass2.default)(CSI, [{
key: "lineCount",
value: function () {
var _lineCount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(refId) {
var indexData, idx, stats;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.parse();
case 2:
indexData = _context.sent;
if (indexData) {
_context.next = 5;
break;
var CSI = /** @class */ (function (_super) {
__extends(CSI, _super);
function CSI(args) {
var _this = _super.call(this, args) || this;
_this.maxBinNumber = 0;
_this.depth = 0;
_this.minShift = 0;
return _this;
}
CSI.prototype.lineCount = function (refId) {
return __awaiter(this, void 0, void 0, function () {
var indexData, idx, stats;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parse()];
case 1:
indexData = _a.sent();
if (!indexData) {
return [2 /*return*/, -1];
}
idx = indexData.indices[refId];
if (!idx) {
return [2 /*return*/, -1];
}
stats = indexData.indices[refId].stats;
if (stats) {
return [2 /*return*/, stats.lineCount];
}
return [2 /*return*/, -1];
}
return _context.abrupt("return", -1);
case 5:
idx = indexData.indices[refId];
if (idx) {
_context.next = 8;
break;
});
});
};
CSI.prototype.indexCov = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, []];
});
});
};
CSI.prototype.parseAuxData = function (bytes, offset, auxLength) {
if (auxLength < 30) {
return {};
}
var data = {};
data.formatFlags = bytes.readInt32LE(offset);
data.coordinateType =
data.formatFlags & 0x10000 ? 'zero-based-half-open' : '1-based-closed';
data.format = { 0: 'generic', 1: 'SAM', 2: 'VCF' }[data.formatFlags & 0xf];
if (!data.format) {
throw new Error("invalid Tabix preset format flags ".concat(data.formatFlags));
}
data.columnNumbers = {
ref: bytes.readInt32LE(offset + 4),
start: bytes.readInt32LE(offset + 8),
end: bytes.readInt32LE(offset + 12),
};
data.metaValue = bytes.readInt32LE(offset + 16);
data.metaChar = data.metaValue ? String.fromCharCode(data.metaValue) : '';
data.skipLines = bytes.readInt32LE(offset + 20);
var nameSectionLength = bytes.readInt32LE(offset + 24);
Object.assign(data, this._parseNameBytes(bytes.slice(offset + 28, offset + 28 + nameSectionLength)));
return data;
};
CSI.prototype._parseNameBytes = function (namesBytes) {
var currRefId = 0;
var currNameStart = 0;
var refIdToName = [];
var refNameToId = {};
for (var i = 0; i < namesBytes.length; i += 1) {
if (!namesBytes[i]) {
if (currNameStart < i) {
var refName = namesBytes.toString('utf8', currNameStart, i);
refName = this.renameRefSeq(refName);
refIdToName[currRefId] = refName;
refNameToId[refName] = currRefId;
}
return _context.abrupt("return", -1);
case 8:
stats = indexData.indices[refId].stats;
if (!stats) {
_context.next = 11;
break;
}
return _context.abrupt("return", stats.lineCount);
case 11:
return _context.abrupt("return", -1);
case 12:
case "end":
return _context.stop();
currNameStart = i + 1;
currRefId += 1;
}
}
}, _callee, this);
}));
function lineCount(_x) {
return _lineCount.apply(this, arguments);
}
return lineCount;
}()
}, {
key: "indexCov",
value: function () {
var _indexCov = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", []);
case 1:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
function indexCov() {
return _indexCov.apply(this, arguments);
}
return indexCov;
}()
}, {
key: "parseAuxData",
value: function parseAuxData(bytes, offset, auxLength) {
if (auxLength < 30) {
return {};
}
var data = {};
data.formatFlags = bytes.readInt32LE(offset);
data.coordinateType = data.formatFlags & 0x10000 ? 'zero-based-half-open' : '1-based-closed';
data.format = {
0: 'generic',
1: 'SAM',
2: 'VCF'
}[data.formatFlags & 0xf];
if (!data.format) {
throw new Error("invalid Tabix preset format flags ".concat(data.formatFlags));
}
data.columnNumbers = {
ref: bytes.readInt32LE(offset + 4),
start: bytes.readInt32LE(offset + 8),
end: bytes.readInt32LE(offset + 12)
};
data.metaValue = bytes.readInt32LE(offset + 16);
data.metaChar = data.metaValue ? String.fromCharCode(data.metaValue) : '';
data.skipLines = bytes.readInt32LE(offset + 20);
var nameSectionLength = bytes.readInt32LE(offset + 24);
(0, _assign.default)(data, this._parseNameBytes((0, _slice.default)(bytes).call(bytes, offset + 28, offset + 28 + nameSectionLength)));
return data;
}
}, {
key: "_parseNameBytes",
value: function _parseNameBytes(namesBytes) {
var currRefId = 0;
var currNameStart = 0;
var refIdToName = [];
var refNameToId = {};
for (var i = 0; i < namesBytes.length; i += 1) {
if (!namesBytes[i]) {
if (currNameStart < i) {
var refName = namesBytes.toString('utf8', currNameStart, i);
refName = this.renameRefSeq(refName);
refIdToName[currRefId] = refName;
refNameToId[refName] = currRefId;
}
currNameStart = i + 1;
currRefId += 1;
}
}
return {
refNameToId: refNameToId,
refIdToName: refIdToName
};
} // fetch and parse the index
}, {
key: "_parse",
value: function () {
var _parse2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(opts) {
var data, buffer, bytes, auxLength, currOffset, i, binCount, binIndex, stats, j, bin, loffset, chunkCount, chunks, k, u, v;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
data = {
csi: true,
maxBlockSize: 1 << 16
};
_context3.next = 3;
return this.filehandle.readFile(opts);
case 3:
buffer = _context3.sent;
_context3.next = 6;
return (0, _bgzfFilehandle.unzip)(buffer);
case 6:
bytes = _context3.sent;
if (!(bytes.readUInt32LE(0) === CSI1_MAGIC)) {
_context3.next = 11;
break;
return { refNameToId: refNameToId, refIdToName: refIdToName };
};
// fetch and parse the index
CSI.prototype._parse = function (opts) {
return __awaiter(this, void 0, void 0, function () {
var data, buffer, bytes, auxLength, currOffset, i, binCount, binIndex, stats // < provided by parsing a pseudo-bin, if present
, j, bin, loffset, chunkCount, chunks, k, u, v;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
data = { csi: true, maxBlockSize: 1 << 16 };
return [4 /*yield*/, this.filehandle.readFile(opts)];
case 1:
buffer = (_a.sent());
return [4 /*yield*/, (0, bgzf_filehandle_1.unzip)(buffer)
// check TBI magic numbers
];
case 2:
bytes = _a.sent();
// check TBI magic numbers
if (bytes.readUInt32LE(0) === CSI1_MAGIC) {
data.csiVersion = 1;
}
else if (bytes.readUInt32LE(0) === CSI2_MAGIC) {
data.csiVersion = 2;
}
else {
throw new Error('Not a CSI file');
// TODO: do we need to support big-endian CSI files?
}
this.minShift = bytes.readInt32LE(4);
this.depth = bytes.readInt32LE(8);
this.maxBinNumber = ((1 << ((this.depth + 1) * 3)) - 1) / 7;
auxLength = bytes.readInt32LE(12);
if (auxLength) {
Object.assign(data, this.parseAuxData(bytes, 16, auxLength));
}
data.refCount = bytes.readInt32LE(16 + auxLength);
// read the indexes for each reference sequence
data.indices = new Array(data.refCount);
currOffset = 16 + auxLength + 4;
i = 0;
_a.label = 3;
case 3:
if (!(i < data.refCount)) return [3 /*break*/, 6];
return [4 /*yield*/, (0, util_1.abortBreakPoint)(opts.signal)
// the binning index
];
case 4:
_a.sent();
binCount = bytes.readInt32LE(currOffset);
currOffset += 4;
binIndex = {};
stats = void 0;
for (j = 0; j < binCount; j += 1) {
bin = bytes.readUInt32LE(currOffset);
if (bin > this.maxBinNumber) {
// this is a fake bin that actually has stats information
// about the reference sequence in it
stats = this.parsePseudoBin(bytes, currOffset + 4);
currOffset += 4 + 8 + 4 + 16 + 16;
}
else {
loffset = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 4);
this._findFirstData(data, loffset);
chunkCount = bytes.readInt32LE(currOffset + 12);
currOffset += 16;
chunks = new Array(chunkCount);
for (k = 0; k < chunkCount; k += 1) {
u = (0, virtualOffset_1.fromBytes)(bytes, currOffset);
v = (0, virtualOffset_1.fromBytes)(bytes, currOffset + 8);
currOffset += 16;
// this._findFirstData(data, u)
chunks[k] = new chunk_1.default(u, v, bin);
}
binIndex[bin] = chunks;
}
}
data.indices[i] = { binIndex: binIndex, stats: stats };
_a.label = 5;
case 5:
i += 1;
return [3 /*break*/, 3];
case 6: return [2 /*return*/, data];
}
data.csiVersion = 1;
_context3.next = 16;
break;
case 11:
if (!(bytes.readUInt32LE(0) === CSI2_MAGIC)) {
_context3.next = 15;
break;
}
data.csiVersion = 2;
_context3.next = 16;
break;
case 15:
throw new Error('Not a CSI file');
case 16:
this.minShift = bytes.readInt32LE(4);
this.depth = bytes.readInt32LE(8);
this.maxBinNumber = ((1 << (this.depth + 1) * 3) - 1) / 7;
auxLength = bytes.readInt32LE(12);
if (auxLength) {
(0, _assign.default)(data, this.parseAuxData(bytes, 16, auxLength));
}
data.refCount = bytes.readInt32LE(16 + auxLength); // read the indexes for each reference sequence
data.indices = new Array(data.refCount);
currOffset = 16 + auxLength + 4;
i = 0;
case 25:
if (!(i < data.refCount)) {
_context3.next = 37;
break;
}
_context3.next = 28;
return (0, _util.abortBreakPoint)(opts.signal);
case 28:
// the binning index
binCount = bytes.readInt32LE(currOffset);
currOffset += 4;
binIndex = {};
stats = void 0; // < provided by parsing a pseudo-bin, if present
for (j = 0; j < binCount; j += 1) {
bin = bytes.readUInt32LE(currOffset);
if (bin > this.maxBinNumber) {
// this is a fake bin that actually has stats information
// about the reference sequence in it
stats = this.parsePseudoBin(bytes, currOffset + 4);
currOffset += 4 + 8 + 4 + 16 + 16;
} else {
loffset = (0, _virtualOffset.fromBytes)(bytes, currOffset + 4);
this._findFirstData(data, loffset);
chunkCount = bytes.readInt32LE(currOffset + 12);
currOffset += 16;
chunks = new Array(chunkCount);
for (k = 0; k < chunkCount; k += 1) {
u = (0, _virtualOffset.fromBytes)(bytes, currOffset);
v = (0, _virtualOffset.fromBytes)(bytes, currOffset + 8);
currOffset += 16; // this._findFirstData(data, u)
chunks[k] = new _chunk.default(u, v, bin);
}
binIndex[bin] = chunks;
}
}
data.indices[i] = {
binIndex: binIndex,
stats: stats
};
case 34:
i += 1;
_context3.next = 25;
break;
case 37:
return _context3.abrupt("return", data);
case 38:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function _parse(_x2) {
return _parse2.apply(this, arguments);
}
return _parse;
}()
}, {
key: "parsePseudoBin",
value: function parsePseudoBin(bytes, offset) {
// const one = Long.fromBytesLE(bytes.slice(offset + 4, offset + 12), true)
// const two = Long.fromBytesLE(bytes.slice(offset + 12, offset + 20), true)
// const three = longToNumber(
// Long.fromBytesLE(bytes.slice(offset + 20, offset + 28), true),
// )
var lineCount = (0, _util.longToNumber)(_long.default.fromBytesLE((0, _slice.default)(Array.prototype).call(bytes, offset + 28, offset + 36), true));
return {
lineCount: lineCount
};
}
}, {
key: "blocksForRange",
value: function () {
var _blocksForRange = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(refId, min, max) {
var opts,
indexData,
ba,
overlappingBins,
chunks,
_iterator,
_step,
_step$value,
start,
end,
bin,
binChunks,
c,
_args4 = arguments;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
opts = _args4.length > 3 && _args4[3] !== undefined ? _args4[3] : {};
if (min < 0) {
min = 0;
}
_context4.next = 4;
return this.parse(opts);
case 4:
indexData = _context4.sent;
if (indexData) {
_context4.next = 7;
break;
}
return _context4.abrupt("return", []);
case 7:
ba = indexData.indices[refId];
if (ba) {
_context4.next = 10;
break;
}
return _context4.abrupt("return", []);
case 10:
overlappingBins = this.reg2bins(min, max); // List of bin #s that overlap min, max
chunks = []; // Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
_iterator = _createForOfIteratorHelper(overlappingBins);
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
_step$value = (0, _slicedToArray2.default)(_step.value, 2), start = _step$value[0], end = _step$value[1];
for (bin = start; bin <= end; bin++) {
if (ba.binIndex[bin]) {
binChunks = ba.binIndex[bin];
for (c = 0; c < binChunks.length; ++c) {
chunks.push(new _chunk.default(binChunks[c].minv, binChunks[c].maxv, bin));
});
});
};
CSI.prototype.parsePseudoBin = function (bytes, offset) {
// const one = Long.fromBytesLE(bytes.slice(offset + 4, offset + 12), true)
// const two = Long.fromBytesLE(bytes.slice(offset + 12, offset + 20), true)
// const three = longToNumber(
// Long.fromBytesLE(bytes.slice(offset + 20, offset + 28), true),
// )
var lineCount = (0, util_1.longToNumber)(long_1.default.fromBytesLE(Array.prototype.slice.call(bytes, offset + 28, offset + 36), true));
return { lineCount: lineCount };
};
CSI.prototype.blocksForRange = function (refId, min, max, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var indexData, ba, overlappingBins, chunks, _i, overlappingBins_1, _a, start, end, bin, binChunks, c;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
if (min < 0) {
min = 0;
}
}
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
return [4 /*yield*/, this.parse(opts)];
case 1:
indexData = _b.sent();
if (!indexData) {
return [2 /*return*/, []];
}
ba = indexData.indices[refId];
if (!ba) {
return [2 /*return*/, []];
}
overlappingBins = this.reg2bins(min, max) // List of bin #s that overlap min, max
;
chunks = [];
// Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
for (_i = 0, overlappingBins_1 = overlappingBins; _i < overlappingBins_1.length; _i++) {
_a = overlappingBins_1[_i], start = _a[0], end = _a[1];
for (bin = start; bin <= end; bin++) {
if (ba.binIndex[bin]) {
binChunks = ba.binIndex[bin];
for (c = 0; c < binChunks.length; ++c) {
chunks.push(new chunk_1.default(binChunks[c].minv, binChunks[c].maxv, bin));
}
}
}
}
return [2 /*return*/, (0, util_1.optimizeChunks)(chunks, new virtualOffset_1.default(0, 0))];
}
return _context4.abrupt("return", (0, _util.optimizeChunks)(chunks, new _virtualOffset.default(0, 0)));
case 15:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function blocksForRange(_x3, _x4, _x5) {
return _blocksForRange.apply(this, arguments);
}
return blocksForRange;
}()
});
});
};
/**

@@ -495,43 +312,28 @@ * calculate the list of bins that may overlap with region [beg,end) (zero-based half-open)

*/
}, {
key: "reg2bins",
value: function reg2bins(beg, end) {
beg -= 1; // < convert to 1-based closed
if (beg < 1) {
beg = 1;
}
if (end > Math.pow(2, 50)) {
end = Math.pow(2, 34);
} // 17 GiB ought to be enough for anybody
end -= 1;
var l = 0;
var t = 0;
var s = this.minShift + this.depth * 3;
var bins = [];
for (; l <= this.depth; s -= 3, t += lshift(1, l * 3), l += 1) {
var b = t + rshift(beg, s);
var e = t + rshift(end, s);
if (e - b + bins.length > this.maxBinNumber) {
var _context5, _context6, _context7;
throw new Error((0, _concat.default)(_context5 = (0, _concat.default)(_context6 = (0, _concat.default)(_context7 = "query ".concat(beg, "-")).call(_context7, end, " is too large for current binning scheme (shift ")).call(_context6, this.minShift, ", depth ")).call(_context5, this.depth, "), try a smaller query or a coarser index binning scheme"));
CSI.prototype.reg2bins = function (beg, end) {
beg -= 1; // < convert to 1-based closed
if (beg < 1) {
beg = 1;
}
bins.push([b, e]);
}
return bins;
}
}]);
return CSI;
}(_indexFile.default);
if (end > Math.pow(2, 50)) {
end = Math.pow(2, 34);
} // 17 GiB ought to be enough for anybody
end -= 1;
var l = 0;
var t = 0;
var s = this.minShift + this.depth * 3;
var bins = [];
for (; l <= this.depth; s -= 3, t += lshift(1, l * 3), l += 1) {
var b = t + rshift(beg, s);
var e = t + rshift(end, s);
if (e - b + bins.length > this.maxBinNumber) {
throw new Error("query ".concat(beg, "-").concat(end, " is too large for current binning scheme (shift ").concat(this.minShift, ", depth ").concat(this.depth, "), try a smaller query or a coarser index binning scheme"));
}
bins.push([b, e]);
}
return bins;
};
return CSI;
}(indexFile_1.default));
exports.default = CSI;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jc2kudHMiXSwibmFtZXMiOlsiQ1NJMV9NQUdJQyIsIkNTSTJfTUFHSUMiLCJsc2hpZnQiLCJudW0iLCJiaXRzIiwicnNoaWZ0IiwiTWF0aCIsImZsb29yIiwiQ1NJIiwiYXJncyIsIm1heEJpbk51bWJlciIsImRlcHRoIiwibWluU2hpZnQiLCJyZWZJZCIsInBhcnNlIiwiaW5kZXhEYXRhIiwiaWR4IiwiaW5kaWNlcyIsInN0YXRzIiwibGluZUNvdW50IiwiYnl0ZXMiLCJvZmZzZXQiLCJhdXhMZW5ndGgiLCJkYXRhIiwiZm9ybWF0RmxhZ3MiLCJyZWFkSW50MzJMRSIsImNvb3JkaW5hdGVUeXBlIiwiZm9ybWF0IiwiRXJyb3IiLCJjb2x1bW5OdW1iZXJzIiwicmVmIiwic3RhcnQiLCJlbmQiLCJtZXRhVmFsdWUiLCJtZXRhQ2hhciIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInNraXBMaW5lcyIsIm5hbWVTZWN0aW9uTGVuZ3RoIiwiX3BhcnNlTmFtZUJ5dGVzIiwibmFtZXNCeXRlcyIsImN1cnJSZWZJZCIsImN1cnJOYW1lU3RhcnQiLCJyZWZJZFRvTmFtZSIsInJlZk5hbWVUb0lkIiwiaSIsImxlbmd0aCIsInJlZk5hbWUiLCJ0b1N0cmluZyIsInJlbmFtZVJlZlNlcSIsIm9wdHMiLCJjc2kiLCJtYXhCbG9ja1NpemUiLCJmaWxlaGFuZGxlIiwicmVhZEZpbGUiLCJidWZmZXIiLCJyZWFkVUludDMyTEUiLCJjc2lWZXJzaW9uIiwicGFyc2VBdXhEYXRhIiwicmVmQ291bnQiLCJBcnJheSIsImN1cnJPZmZzZXQiLCJzaWduYWwiLCJiaW5Db3VudCIsImJpbkluZGV4IiwiaiIsImJpbiIsInBhcnNlUHNldWRvQmluIiwibG9mZnNldCIsIl9maW5kRmlyc3REYXRhIiwiY2h1bmtDb3VudCIsImNodW5rcyIsImsiLCJ1IiwidiIsIkNodW5rIiwiTG9uZyIsImZyb21CeXRlc0xFIiwicHJvdG90eXBlIiwiY2FsbCIsIm1pbiIsIm1heCIsImJhIiwib3ZlcmxhcHBpbmdCaW5zIiwicmVnMmJpbnMiLCJiaW5DaHVua3MiLCJjIiwicHVzaCIsIm1pbnYiLCJtYXh2IiwiVmlydHVhbE9mZnNldCIsImJlZyIsImwiLCJ0IiwicyIsImJpbnMiLCJiIiwiZSIsIkluZGV4RmlsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxVQUFVLEdBQUcsUUFBbkIsQyxDQUE0Qjs7QUFDNUIsSUFBTUMsVUFBVSxHQUFHLFFBQW5CLEMsQ0FBNEI7O0FBRTVCLFNBQVNDLE1BQVQsQ0FBZ0JDLEdBQWhCLEVBQTZCQyxJQUE3QixFQUEyQztBQUN6QyxTQUFPRCxHQUFHLFlBQUcsQ0FBSCxFQUFRQyxJQUFSLENBQVY7QUFDRDs7QUFDRCxTQUFTQyxNQUFULENBQWdCRixHQUFoQixFQUE2QkMsSUFBN0IsRUFBMkM7QUFDekMsU0FBT0UsSUFBSSxDQUFDQyxLQUFMLENBQVdKLEdBQUcsWUFBRyxDQUFILEVBQVFDLElBQVIsQ0FBZCxDQUFQO0FBQ0Q7O0lBRW9CSSxHOzs7OztBQUluQixlQUFZQyxJQUFaLEVBQXVCO0FBQUE7O0FBQUE7QUFDckIsOEJBQU1BLElBQU47QUFEcUI7QUFBQTtBQUFBO0FBRXJCLFVBQUtDLFlBQUwsR0FBb0IsQ0FBcEI7QUFDQSxVQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUNBLFVBQUtDLFFBQUwsR0FBZ0IsQ0FBaEI7QUFKcUI7QUFLdEI7Ozs7O2dIQUNlQyxLOzs7Ozs7O3VCQUNVLEtBQUtDLEtBQUwsRTs7O0FBQWxCQyxnQkFBQUEsUzs7b0JBQ0RBLFM7Ozs7O2lEQUNJLENBQUMsQzs7O0FBRUpDLGdCQUFBQSxHLEdBQU1ELFNBQVMsQ0FBQ0UsT0FBVixDQUFrQkosS0FBbEIsQzs7b0JBQ1BHLEc7Ozs7O2lEQUNJLENBQUMsQzs7O0FBRUZFLGdCQUFBQSxLLEdBQVVILFNB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QUQsRUFBSTBGLENBQUMsR0FBRyxDQUFSLENBQW5CLEVBQStCQSxDQUFDLElBQUksQ0FBNUQsRUFBK0Q7QUFDN0QsWUFBTUksQ0FBQyxHQUFHSCxDQUFDLEdBQUd4RixNQUFNLENBQUNzRixHQUFELEVBQU1HLENBQU4sQ0FBcEI7QUFDQSxZQUFNRyxDQUFDLEdBQUdKLENBQUMsR0FBR3hGLE1BQU0sQ0FBQzJCLEdBQUQsRUFBTThELENBQU4sQ0FBcEI7O0FBQ0EsWUFBSUcsQ0FBQyxHQUFHRCxDQUFKLEdBQVFELElBQUksQ0FBQ2pELE1BQWIsR0FBc0IsS0FBS3BDLFlBQS9CLEVBQTZDO0FBQUE7O0FBQzNDLGdCQUFNLElBQUlrQixLQUFKLG9IQUNLK0QsR0FETCx3QkFDWTNELEdBRFosdUVBQ2tFLEtBQUtwQixRQUR2RSwrQkFDMEYsS0FBS0QsS0FEL0YsOERBQU47QUFHRDs7QUFDRG9GLFFBQUFBLElBQUksQ0FBQ1IsSUFBTCxDQUFVLENBQUNTLENBQUQsRUFBSUMsQ0FBSixDQUFWO0FBQ0Q7O0FBQ0QsYUFBT0YsSUFBUDtBQUNEOzs7RUExTjhCRyxrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb25nIGZyb20gJ2xvbmcnXG5pbXBvcnQgeyB1bnppcCB9IGZyb20gJ0BnbW9kL2JnemYtZmlsZWhhbmRsZSdcbmltcG9ydCBWaXJ0dWFsT2Zmc2V0LCB7IGZyb21CeXRlcyB9IGZyb20gJy4vdmlydHVhbE9mZnNldCdcbmltcG9ydCBDaHVuayBmcm9tICcuL2NodW5rJ1xuaW1wb3J0IHsgbG9uZ1RvTnVtYmVyLCBhYm9ydEJyZWFrUG9pbnQsIG9wdGltaXplQ2h1bmtzLCBCYXNlT3B0cyB9IGZyb20gJy4vdXRpbCdcblxuaW1wb3J0IEluZGV4RmlsZSBmcm9tICcuL2luZGV4RmlsZSdcblxuY29uc3QgQ1NJMV9NQUdJQyA9IDIxNTgyNjU5IC8vIENTSVxcMVxuY29uc3QgQ1NJMl9NQUdJQyA9IDM4MzU5ODc1IC8vIENTSVxcMlxuXG5mdW5jdGlvbiBsc2hpZnQobnVtOiBudW1iZXIsIGJpdHM6IG51bWJlcikge1xuICByZXR1cm4gbnVtICogMiAqKiBiaXRzXG59XG5mdW5jdGlvbiByc2hpZnQobnVtOiBudW1iZXIsIGJpdHM6IG51bWJlcikge1xuICByZXR1cm4gTWF0aC5mbG9vcihudW0gLyAyICoqIGJpdHMpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTSSBleHRlbmRzIEluZGV4RmlsZSB7XG4gIHByaXZhdGUgbWF4QmluTnVtYmVyOiBudW1iZXJcbiAgcHJpdmF0ZSBkZXB0aDogbnVtYmVyXG4gIHByaXZhdGUgbWluU2hpZnQ6IG51bWJlclxuICBjb25zdHJ1Y3RvcihhcmdzOiBhbnkpIHtcbiAgICBzdXBlcihhcmdzKVxuICAgIHRoaXMubWF4QmluTnVtYmVyID0gMFxuICAgIHRoaXMuZGVwdGggPSAwXG4gICAgdGhpcy5taW5TaGlmdCA9IDBcbiAgfVxuICBhc3luYyBsaW5lQ291bnQocmVmSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZSgpXG4gICAgaWYgKCFpbmRleERhdGEpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBjb25zdCBpZHggPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF1cbiAgICBpZiAoIWlkeCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGNvbnN0IHsgc3RhdHMgfSA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXVxuICAgIGlmIChzdGF0cykge1xuICAgICAgcmV0dXJuIHN0YXRzLmxpbmVDb3VudFxuICAgIH1cbiAgICByZXR1cm4gLTFcbiAgfVxuXG4gIGFzeW5jIGluZGV4Q292KCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcGFyc2VBdXhEYXRhKGJ5dGVzOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBhdXhMZW5ndGg6IG51bWJlcikge1xuICAgIGlmIChhdXhMZW5ndGggPCAzMCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9XG4gICAgZGF0YS5mb3JtYXRGbGFncyA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldClcbiAgICBkYXRhLmNvb3JkaW5hdGVUeXBlID0gZGF0YS5mb3JtYXRGbGFncyAmIDB4MTAwMDAgPyAnemVyby1iYXNlZC1oYWxmLW9wZW4nIDogJzEtYmFzZWQtY2xvc2VkJ1xuICAgIGRhdGEuZm9ybWF0ID0gKHsgMDogJ2dlbmVyaWMnLCAxOiAnU0FNJywgMjogJ1ZDRicgfSBhcyB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9KVtcbiAgICAgIGRhdGEuZm9ybWF0RmxhZ3MgJiAweGZcbiAgICBdXG4gICAgaWYgKCFkYXRhLmZvcm1hdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIFRhYml4IHByZXNldCBmb3JtYXQgZmxhZ3MgJHtkYXRhLmZvcm1hdEZsYWdzfWApXG4gICAgfVxuICAgIGRhdGEuY29sdW1uTnVtYmVycyA9IHtcbiAgICAgIHJlZjogYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgNCksXG4gICAgICBzdGFydDogYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgOCksXG4gICAgICBlbmQ6IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDEyKSxcbiAgICB9XG4gICAgZGF0YS5tZXRhVmFsdWUgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxNilcbiAgICBkYXRhLm1ldGFDaGFyID0gZGF0YS5tZXRhVmFsdWUgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGEubWV0YVZhbHVlKSA6ICcnXG4gICAgZGF0YS5za2lwTGluZXMgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAyMClcbiAgICBjb25zdCBuYW1lU2VjdGlvbkxlbmd0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDI0KVxuXG4gICAgT2JqZWN0LmFzc2lnbihcbiAgICAgIGRhdGEsXG4gICAgICB0aGlzLl9wYXJzZU5hbWVCeXRlcyhieXRlcy5zbGljZShvZmZzZXQgKyAyOCwgb2Zmc2V0ICsgMjggKyBuYW1lU2VjdGlvbkxlbmd0aCkpLFxuICAgIClcbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgX3BhcnNlTmFtZUJ5dGVzKG5hbWVzQnl0ZXM6IEJ1ZmZlcikge1xuICAgIGxldCBjdXJyUmVmSWQgPSAwXG4gICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwXG4gICAgY29uc3QgcmVmSWRUb05hbWUgPSBbXVxuICAgIGNvbnN0IHJlZk5hbWVUb0lkOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge31cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICghbmFtZXNCeXRlc1tpXSkge1xuICAgICAgICBpZiAoY3Vyck5hbWVTdGFydCA8IGkpIHtcbiAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoJ3V0ZjgnLCBjdXJyTmFtZVN0YXJ0LCBpKVxuICAgICAgICAgIHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcShyZWZOYW1lKVxuICAgICAgICAgIHJlZklkVG9OYW1lW2N1cnJSZWZJZF0gPSByZWZOYW1lXG4gICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWRcbiAgICAgICAgfVxuICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDFcbiAgICAgICAgY3VyclJlZklkICs9IDFcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH1cbiAgfVxuXG4gIC8vIGZldGNoIGFuZCBwYXJzZSB0aGUgaW5kZXhcbiAgYXN5bmMgX3BhcnNlKG9wdHM6IHsgc2lnbmFsPzogQWJvcnRTaWduYWwgfSkge1xuICAgIGNvbnN0IGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IGNzaTogdHJ1ZSwgbWF4QmxvY2tTaXplOiAxIDw8IDE2IH1cbiAgICBjb25zdCBidWZmZXIgPSAoYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWRGaWxlKG9wdHMpKSBhcyBCdWZmZXJcbiAgICBjb25zdCBieXRlcyA9IGF3YWl0IHVuemlwKGJ1ZmZlcilcblxuICAgIC8vIGNoZWNrIFRCSSBtYWdpYyBudW1iZXJzXG4gICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSA9PT0gQ1NJMV9NQUdJQykge1xuICAgICAgZGF0YS5jc2lWZXJzaW9uID0gMVxuICAgIH0gZWxzZSBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kyX01BR0lDKSB7XG4gICAgICBkYXRhLmNzaVZlcnNpb24gPSAyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgQ1NJIGZpbGUnKVxuICAgICAgLy8gVE9ETzogZG8gd2UgbmVlZCB0byBzdXBwb3J0IGJpZy1lbmRpYW4gQ1NJIGZpbGVzP1xuICAgIH1cblxuICAgIHRoaXMubWluU2hpZnQgPSBieXRlcy5yZWFkSW50MzJMRSg0KVxuICAgIHRoaXMuZGVwdGggPSBieXRlcy5yZWFkSW50MzJMRSg4KVxuICAgIHRoaXMubWF4QmluTnVtYmVyID0gKCgxIDw8ICgodGhpcy5kZXB0aCArIDEpICogMykpIC0gMSkgLyA3XG4gICAgY29uc3QgYXV4TGVuZ3RoID0gYnl0ZXMucmVhZEludDMyTEUoMTIpXG4gICAgaWYgKGF1eExlbmd0aCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0aGlzLnBhcnNlQXV4RGF0YShieXRlcywgMTYsIGF1eExlbmd0aCkpXG4gICAgfVxuICAgIGRhdGEucmVmQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRSgxNiArIGF1eExlbmd0aClcblxuICAgIC8vIHJlYWQgdGhlIGluZGV4ZXMgZm9yIGVhY2ggcmVmZXJlbmNlIHNlcXVlbmNlXG4gICAgZGF0YS5pbmRpY2VzID0gbmV3IEFycmF5KGRhdGEucmVmQ291bnQpXG4gICAgbGV0IGN1cnJPZmZzZXQgPSAxNiArIGF1eExlbmd0aCArIDRcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucmVmQ291bnQ7IGkgKz0gMSkge1xuICAgICAgYXdhaXQgYWJvcnRCcmVha1BvaW50KG9wdHMuc2lnbmFsKVxuICAgICAgLy8gdGhlIGJpbm5pbmcgaW5kZXhcbiAgICAgIGNvbnN0IGJpbkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldClcbiAgICAgIGN1cnJPZmZzZXQgKz0gNFxuICAgICAgY29uc3QgYmluSW5kZXg6IHsgW2tleTogc3RyaW5nXTogQ2h1bmtbXSB9ID0ge31cbiAgICAgIGxldCBzdGF0cyAvLyA8IHByb3ZpZGVkIGJ5IHBhcnNpbmcgYSBwc2V1ZG8tYmluLCBpZiBwcmVzZW50XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHtcbiAgICAgICAgY29uc3QgYmluID0gYnl0ZXMucmVhZFVJbnQzMkxFKGN1cnJPZmZzZXQpXG4gICAgICAgIGlmIChiaW4gPiB0aGlzLm1heEJpbk51bWJlcikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgYSBmYWtlIGJpbiB0aGF0IGFjdHVhbGx5IGhhcyBzdGF0cyBpbmZvcm1hdGlvblxuICAgICAgICAgIC8vIGFib3V0IHRoZSByZWZlcmVuY2Ugc2VxdWVuY2UgaW4gaXRcbiAgICAgICAgICBzdGF0cyA9IHRoaXMucGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIGN1cnJPZmZzZXQgKyA0KVxuICAgICAgICAgIGN1cnJPZmZzZXQgKz0gNCArIDggKyA0ICsgMTYgKyAxNlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGxvZmZzZXQgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA0KVxuICAgICAgICAgIHRoaXMuX2ZpbmRGaXJzdERhdGEoZGF0YSwgbG9mZnNldClcbiAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldCArIDEyKVxuICAgICAgICAgIGN1cnJPZmZzZXQgKz0gMTZcbiAgICAgICAgICBjb25zdCBjaHVua3MgPSBuZXcgQXJyYXkoY2h1bmtDb3VudClcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgdSA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldClcbiAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KVxuICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNlxuICAgICAgICAgICAgLy8gdGhpcy5fZmluZEZpcnN0RGF0YShkYXRhLCB1KVxuICAgICAgICAgICAgY2h1bmtzW2tdID0gbmV3IENodW5rKHUsIHYsIGJpbilcbiAgICAgICAgICB9XG4gICAgICAgICAgYmluSW5kZXhbYmluXSA9IGNodW5rc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRhdGEuaW5kaWNlc1tpXSA9IHsgYmluSW5kZXgsIHN0YXRzIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgcGFyc2VQc2V1ZG9CaW4oYnl0ZXM6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpIHtcbiAgICAvLyBjb25zdCBvbmUgPSBMb25nLmZyb21CeXRlc0xFKGJ5dGVzLnNsaWNlKG9mZnNldCArIDQsIG9mZnNldCArIDEyKSwgdHJ1ZSlcbiAgICAvLyBjb25zdCB0d28gPSBMb25nLmZyb21CeXRlc0xFKGJ5dGVzLnNsaWNlKG9mZnNldCArIDEyLCBvZmZzZXQgKyAyMCksIHRydWUpXG4gICAgLy8gY29uc3QgdGhyZWUgPSBsb25nVG9OdW1iZXIoXG4gICAgLy8gICBMb25nLmZyb21CeXRlc0xFKGJ5dGVzLnNsaWNlKG9mZnNldCArIDIwLCBvZmZzZXQgKyAyOCksIHRydWUpLFxuICAgIC8vIClcbiAgICBjb25zdCBsaW5lQ291bnQgPSBsb25nVG9OdW1iZXIoXG4gICAgICBMb25nLmZyb21CeXRlc0xFKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ5dGVzLCBvZmZzZXQgKyAyOCwgb2Zmc2V0ICsgMzYpLCB0cnVlKSxcbiAgICApXG4gICAgcmV0dXJuIHsgbGluZUNvdW50IH1cbiAgfVxuXG4gIGFzeW5jIGJsb2Nrc0ZvclJhbmdlKHJlZklkOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgb3B0czogQmFzZU9wdHMgPSB7fSkge1xuICAgIGlmIChtaW4gPCAwKSB7XG4gICAgICBtaW4gPSAwXG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzKVxuICAgIGlmICghaW5kZXhEYXRhKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gICAgY29uc3QgYmEgPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF1cbiAgICBpZiAoIWJhKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGFwcGluZ0JpbnMgPSB0aGlzLnJlZzJiaW5zKG1pbiwgbWF4KSAvLyBMaXN0IG9mIGJpbiAjcyB0aGF0IG92ZXJsYXAgbWluLCBtYXhcbiAgICBjb25zdCBjaHVua3M6IENodW5rW10gPSBbXVxuXG4gICAgLy8gRmluZCBjaHVua3MgaW4gb3ZlcmxhcHBpbmcgYmlucy4gIExlYWYgYmlucyAoPCA0NjgxKSBhcmUgbm90IHBydW5lZFxuICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIG92ZXJsYXBwaW5nQmlucykge1xuICAgICAgZm9yIChsZXQgYmluID0gc3RhcnQ7IGJpbiA8PSBlbmQ7IGJpbisrKSB7XG4gICAgICAgIGlmIChiYS5iaW5JbmRleFtiaW5dKSB7XG4gICAgICAgICAgY29uc3QgYmluQ2h1bmtzID0gYmEuYmluSW5kZXhbYmluXVxuICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgYmluQ2h1bmtzLmxlbmd0aDsgKytjKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQ2h1bmsoYmluQ2h1bmtzW2NdLm1pbnYsIGJpbkNodW5rc1tjXS5tYXh2LCBiaW4pKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpbWl6ZUNodW5rcyhjaHVua3MsIG5ldyBWaXJ0dWFsT2Zmc2V0KDAsIDApKVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgbGlzdCBvZiBiaW5zIHRoYXQgbWF5IG92ZXJsYXAgd2l0aCByZWdpb24gW2JlZyxlbmQpICh6ZXJvLWJhc2VkIGhhbGYtb3BlbilcbiAgICogQHJldHVybnMge0FycmF5W251bWJlcl19XG4gICAqL1xuICByZWcyYmlucyhiZWc6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBiZWcgLT0gMSAvLyA8IGNvbnZlcnQgdG8gMS1iYXNlZCBjbG9zZWRcbiAgICBpZiAoYmVnIDwgMSkge1xuICAgICAgYmVnID0gMVxuICAgIH1cbiAgICBpZiAoZW5kID4gMiAqKiA1MCkge1xuICAgICAgZW5kID0gMiAqKiAzNFxuICAgIH0gLy8gMTcgR2lCIG91Z2h0IHRvIGJlIGVub3VnaCBmb3IgYW55Ym9keVxuICAgIGVuZCAtPSAxXG4gICAgbGV0IGwgPSAwXG4gICAgbGV0IHQgPSAwXG4gICAgbGV0IHMgPSB0aGlzLm1pblNoaWZ0ICsgdGhpcy5kZXB0aCAqIDNcbiAgICBjb25zdCBiaW5zID0gW11cbiAgICBmb3IgKDsgbCA8PSB0aGlzLmRlcHRoOyBzIC09IDMsIHQgKz0gbHNoaWZ0KDEsIGwgKiAzKSwgbCArPSAxKSB7XG4gICAgICBjb25zdCBiID0gdCArIHJzaGlmdChiZWcsIHMpXG4gICAgICBjb25zdCBlID0gdCArIHJzaGlmdChlbmQsIHMpXG4gICAgICBpZiAoZSAtIGIgKyBiaW5zLmxlbmd0aCA+IHRoaXMubWF4QmluTnVtYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgcXVlcnkgJHtiZWd9LSR7ZW5kfSBpcyB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgYmlubmluZyBzY2hlbWUgKHNoaWZ0ICR7dGhpcy5taW5TaGlmdH0sIGRlcHRoICR7dGhpcy5kZXB0aH0pLCB0cnkgYSBzbWFsbGVyIHF1ZXJ5IG9yIGEgY29hcnNlciBpbmRleCBiaW5uaW5nIHNjaGVtZWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGJpbnMucHVzaChbYiwgZV0pXG4gICAgfVxuICAgIHJldHVybiBiaW5zXG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=csi.js.map
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.BamArgumentError = exports.BamSizeLimitError = exports.BamBufferOverrunError = exports.BamMalformedError = exports.BamUnimplementedError = exports.BamError = void 0;
var _construct = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/reflect/construct"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf"));
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/wrapNativeSuper"));
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = (0, _construct.default)(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_construct.default) return false; if (_construct.default.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call((0, _construct.default)(Date, [], function () {})); return true; } catch (e) { return false; } }
var BamError = /*#__PURE__*/function (_Error) {
(0, _inherits2.default)(BamError, _Error);
var _super = _createSuper(BamError);
function BamError() {
(0, _classCallCheck2.default)(this, BamError);
return _super.apply(this, arguments);
}
return BamError;
}( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
var BamError = /** @class */ (function (_super) {
__extends(BamError, _super);
function BamError() {
return _super !== null && _super.apply(this, arguments) || this;
}
return BamError;
}(Error));
exports.BamError = BamError;
/** Error caused by encountering a part of the BAM spec that has not yet been implemented */
exports.BamError = BamError;
var BamUnimplementedError = /*#__PURE__*/function (_Error2) {
(0, _inherits2.default)(BamUnimplementedError, _Error2);
var _super2 = _createSuper(BamUnimplementedError);
function BamUnimplementedError() {
(0, _classCallCheck2.default)(this, BamUnimplementedError);
return _super2.apply(this, arguments);
}
return BamUnimplementedError;
}( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
var BamUnimplementedError = /** @class */ (function (_super) {
__extends(BamUnimplementedError, _super);
function BamUnimplementedError() {
return _super !== null && _super.apply(this, arguments) || this;
}
return BamUnimplementedError;
}(Error));
exports.BamUnimplementedError = BamUnimplementedError;
/** An error caused by malformed data. */
exports.BamUnimplementedError = BamUnimplementedError;
var BamMalformedError = /*#__PURE__*/function (_BamError) {
(0, _inherits2.default)(BamMalformedError, _BamError);
var _super3 = _createSuper(BamMalformedError);
function BamMalformedError() {
(0, _classCallCheck2.default)(this, BamMalformedError);
return _super3.apply(this, arguments);
}
return BamMalformedError;
}(BamError);
var BamMalformedError = /** @class */ (function (_super) {
__extends(BamMalformedError, _super);
function BamMalformedError() {
return _super !== null && _super.apply(this, arguments) || this;
}
return BamMalformedError;
}(BamError));
exports.BamMalformedError = BamMalformedError;
/**
* An error caused by attempting to read beyond the end of the defined data.
*/
exports.BamMalformedError = BamMalformedError;
var BamBufferOverrunError = /*#__PURE__*/function (_BamMalformedError) {
(0, _inherits2.default)(BamBufferOverrunError, _BamMalformedError);
var _super4 = _createSuper(BamBufferOverrunError);
function BamBufferOverrunError() {
(0, _classCallCheck2.default)(this, BamBufferOverrunError);
return _super4.apply(this, arguments);
}
return BamBufferOverrunError;
}(BamMalformedError);
var BamBufferOverrunError = /** @class */ (function (_super) {
__extends(BamBufferOverrunError, _super);
function BamBufferOverrunError() {
return _super !== null && _super.apply(this, arguments) || this;
}
return BamBufferOverrunError;
}(BamMalformedError));
exports.BamBufferOverrunError = BamBufferOverrunError;
/**
* An error caused by data being too big, exceeding a size limit.
*/
exports.BamBufferOverrunError = BamBufferOverrunError;
var BamSizeLimitError = /*#__PURE__*/function (_BamError2) {
(0, _inherits2.default)(BamSizeLimitError, _BamError2);
var _super5 = _createSuper(BamSizeLimitError);
function BamSizeLimitError() {
(0, _classCallCheck2.default)(this, BamSizeLimitError);
return _super5.apply(this, arguments);
}
return BamSizeLimitError;
}(BamError);
var BamSizeLimitError = /** @class */ (function (_super) {
__extends(BamSizeLimitError, _super);
function BamSizeLimitError() {
return _super !== null && _super.apply(this, arguments) || this;
}
return BamSizeLimitError;
}(BamError));
exports.BamSizeLimitError = BamSizeLimitError;
/**
* An invalid argument was supplied to a bam-js method or object.
*/
exports.BamSizeLimitError = BamSizeLimitError;
var BamArgumentError = /*#__PURE__*/function (_BamError3) {
(0, _inherits2.default)(BamArgumentError, _BamError3);
var _super6 = _createSuper(BamArgumentError);
function BamArgumentError() {
(0, _classCallCheck2.default)(this, BamArgumentError);
return _super6.apply(this, arguments);
}
return BamArgumentError;
}(BamError);
var BamArgumentError = /** @class */ (function (_super) {
__extends(BamArgumentError, _super);
function BamArgumentError() {
return _super !== null && _super.apply(this, arguments) || this;
}
return BamArgumentError;
}(BamError));
exports.BamArgumentError = BamArgumentError;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvcnMudHMiXSwibmFtZXMiOlsiQmFtRXJyb3IiLCJFcnJvciIsIkJhbVVuaW1wbGVtZW50ZWRFcnJvciIsIkJhbU1hbGZvcm1lZEVycm9yIiwiQmFtQnVmZmVyT3ZlcnJ1bkVycm9yIiwiQmFtU2l6ZUxpbWl0RXJyb3IiLCJCYW1Bcmd1bWVudEVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQWFBLFE7Ozs7Ozs7Ozs7OytDQUFpQkMsSztBQUU5Qjs7Ozs7SUFDYUMscUI7Ozs7Ozs7Ozs7OytDQUE4QkQsSztBQUUzQzs7Ozs7SUFDYUUsaUI7Ozs7Ozs7Ozs7O0VBQTBCSCxRO0FBRXZDOzs7Ozs7O0lBR2FJLHFCOzs7Ozs7Ozs7OztFQUE4QkQsaUI7QUFFM0M7Ozs7Ozs7SUFHYUUsaUI7Ozs7Ozs7Ozs7O0VBQTBCTCxRO0FBRXZDOzs7Ozs7O0lBR2FNLGdCOzs7Ozs7Ozs7OztFQUF5Qk4sUSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBCYW1FcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbi8qKiBFcnJvciBjYXVzZWQgYnkgZW5jb3VudGVyaW5nIGEgcGFydCBvZiB0aGUgQkFNIHNwZWMgdGhhdCBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkICovXG5leHBvcnQgY2xhc3MgQmFtVW5pbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqIEFuIGVycm9yIGNhdXNlZCBieSBtYWxmb3JtZWQgZGF0YS4gICovXG5leHBvcnQgY2xhc3MgQmFtTWFsZm9ybWVkRXJyb3IgZXh0ZW5kcyBCYW1FcnJvciB7fVxuXG4vKipcbiAqIEFuIGVycm9yIGNhdXNlZCBieSBhdHRlbXB0aW5nIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGRlZmluZWQgZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhbUJ1ZmZlck92ZXJydW5FcnJvciBleHRlbmRzIEJhbU1hbGZvcm1lZEVycm9yIHt9XG5cbi8qKlxuICogQW4gZXJyb3IgY2F1c2VkIGJ5IGRhdGEgYmVpbmcgdG9vIGJpZywgZXhjZWVkaW5nIGEgc2l6ZSBsaW1pdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhbVNpemVMaW1pdEVycm9yIGV4dGVuZHMgQmFtRXJyb3Ige31cblxuLyoqXG4gKiBBbiBpbnZhbGlkIGFyZ3VtZW50IHdhcyBzdXBwbGllZCB0byBhIGJhbS1qcyBtZXRob2Qgb3Igb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgQmFtQXJndW1lbnRFcnJvciBleHRlbmRzIEJhbUVycm9yIHt9XG4iXX0=
//# sourceMappingURL=errors.js.map
"use strict";
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty2 = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty2(exports, "__esModule", {
value: true
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
exports.default = void 0;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
var _startsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/starts-with"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties"));
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
var _construct = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/reflect/construct"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
var _concat2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf"));
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/wrapAsyncGenerator"));
var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/awaitAsyncGenerator"));
var _asyncIterator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncIterator"));
var _asyncGeneratorDelegate2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncGeneratorDelegate"));
var _bamFile = _interopRequireWildcard(require("./bamFile"));
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
var __asyncValues = (this && this.__asyncValues) || function (o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
};
var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
var i, p;
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
};
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
function fulfill(value) { resume("next", value); }
function reject(value) { resume("throw", value); }
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
Object.defineProperty(exports, "__esModule", { value: true });
var bamFile_1 = __importStar(require("./bamFile"));
require("cross-fetch/polyfill");
var _bgzfFilehandle = require("@gmod/bgzf-filehandle");
var _sam = require("./sam");
function ownKeys(object, enumerableOnly) { var keys = (0, _keys.default)(object); if (_getOwnPropertySymbols.default) { var symbols = (0, _getOwnPropertySymbols.default)(object); if (enumerableOnly) symbols = (0, _filter.default)(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor.default)(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context13; (0, _forEach.default)(_context13 = ownKeys(Object(source), true)).call(_context13, function (key) { (0, _defineProperty3.default)(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors.default) { (0, _defineProperties.default)(target, (0, _getOwnPropertyDescriptors.default)(source)); } else { var _context14; (0, _forEach.default)(_context14 = ownKeys(Object(source))).call(_context14, function (key) { (0, _defineProperty2.default)(target, key, (0, _getOwnPropertyDescriptor.default)(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = (0, _construct.default)(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_construct.default) return false; if (_construct.default.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call((0, _construct.default)(Date, [], function () {})); return true; } catch (e) { return false; } }
function concat(_x, _x2) {
return _concat.apply(this, arguments);
var bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
var sam_1 = require("./sam");
function concat(arr, opts) {
return __awaiter(this, void 0, void 0, function () {
var res, _a, _b;
var _this = this;
return __generator(this, function (_c) {
switch (_c.label) {
case 0: return [4 /*yield*/, Promise.all(arr.map(function (chunk) { return __awaiter(_this, void 0, void 0, function () {
var url, headers, referer, rest, res_1, _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
url = chunk.url, headers = chunk.headers;
if (!url.startsWith('data:')) return [3 /*break*/, 1];
return [2 /*return*/, Buffer.from(url.split(',')[1], 'base64')];
case 1:
referer = headers.referer, rest = __rest(headers, ["referer"]);
return [4 /*yield*/, fetch(url, __assign(__assign({}, opts), { headers: __assign(__assign({}, opts.headers), rest) }))];
case 2:
res_1 = _c.sent();
if (!res_1.ok) {
throw new Error("Failed to fetch ".concat(res_1.statusText));
}
_b = (_a = Buffer).from;
return [4 /*yield*/, res_1.arrayBuffer()];
case 3: return [2 /*return*/, _b.apply(_a, [_c.sent()])];
}
});
}); }))];
case 1:
res = _c.sent();
_b = (_a = Buffer).concat;
return [4 /*yield*/, Promise.all(res.map(function (elt) { return (0, bgzf_filehandle_1.unzip)(elt); }))];
case 2: return [2 /*return*/, _b.apply(_a, [_c.sent()])];
}
});
});
}
function _concat() {
_concat = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(arr, opts) {
var res;
return _regenerator.default.wrap(function _callee5$(_context16) {
while (1) {
switch (_context16.prev = _context16.next) {
case 0:
_context16.next = 2;
return _promise.default.all((0, _map.default)(arr).call(arr, /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(chunk) {
var url, headers, referer, rest, _res;
return _regenerator.default.wrap(function _callee4$(_context15) {
while (1) {
switch (_context15.prev = _context15.next) {
case 0:
url = chunk.url, headers = chunk.headers;
if (!(0, _startsWith.default)(url).call(url, 'data:')) {
_context15.next = 5;
break;
var HtsgetFile = /** @class */ (function (_super) {
__extends(HtsgetFile, _super);
function HtsgetFile(args) {
var _this =
// @ts-ignore override bam defaults
_super.call(this, { bamFilehandle: '?', baiFilehandle: '?' }) || this;
_this.baseUrl = args.baseUrl;
_this.trackId = args.trackId;
return _this;
}
HtsgetFile.prototype.streamRecordsForRange = function (chr, min, max, opts) {
if (opts === void 0) { opts = {
viewAsPairs: false,
pairAcrossChr: false,
maxInsertSize: 200000,
}; }
return __asyncGenerator(this, arguments, function streamRecordsForRange_1() {
var base, url, chrId, result, data, uncba, chunk;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
base = "".concat(this.baseUrl, "/").concat(this.trackId);
url = "".concat(base, "?referenceName=").concat(chr, "&start=").concat(min, "&end=").concat(max, "&format=BAM");
chrId = this.chrToIndex && this.chrToIndex[chr];
return [4 /*yield*/, __await(fetch(url, __assign({}, opts)))];
case 1:
result = _a.sent();
if (!result.ok) {
throw new Error(result.statusText);
}
return _context15.abrupt("return", Buffer.from(url.split(',')[1], 'base64'));
case 5:
//remove referer header, it is not even allowed to be specified
//@ts-ignore
//eslint-disable-next-line @typescript-eslint/no-unused-vars
referer = headers.referer, rest = (0, _objectWithoutProperties2.default)(headers, ["referer"]);
_context15.next = 8;
return fetch(url, _objectSpread(_objectSpread({}, opts), {}, {
headers: _objectSpread(_objectSpread({}, opts.headers), rest)
}));
case 8:
_res = _context15.sent;
if (_res.ok) {
_context15.next = 11;
break;
}
throw new Error("Failed to fetch ".concat(_res.statusText));
case 11:
_context15.t0 = Buffer;
_context15.next = 14;
return _res.arrayBuffer();
case 14:
_context15.t1 = _context15.sent;
return _context15.abrupt("return", _context15.t0.from.call(_context15.t0, _context15.t1));
case 16:
case "end":
return _context15.stop();
}
}
}, _callee4);
}));
return function (_x4) {
return _ref.apply(this, arguments);
};
}()));
case 2:
res = _context16.sent;
_context16.t0 = (0, _concat2.default)(Buffer);
_context16.t1 = Buffer;
_context16.next = 7;
return _promise.default.all((0, _map.default)(res).call(res, function (elt) {
return (0, _bgzfFilehandle.unzip)(elt);
}));
case 7:
_context16.t2 = _context16.sent;
return _context16.abrupt("return", _context16.t0.call.call(_context16.t0, _context16.t1, _context16.t2));
case 9:
case "end":
return _context16.stop();
}
}
}, _callee5);
}));
return _concat.apply(this, arguments);
}
var HtsgetFile = /*#__PURE__*/function (_BamFile) {
(0, _inherits2.default)(HtsgetFile, _BamFile);
var _super = _createSuper(HtsgetFile);
function HtsgetFile(args) {
var _this2;
(0, _classCallCheck2.default)(this, HtsgetFile);
// @ts-ignore override bam defaults
_this2 = _super.call(this, {
bamFilehandle: '?',
baiFilehandle: '?'
});
(0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this2), "baseUrl", void 0);
(0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this2), "trackId", void 0);
_this2.baseUrl = args.baseUrl;
_this2.trackId = args.trackId;
return _this2;
}
(0, _createClass2.default)(HtsgetFile, [{
key: "streamRecordsForRange",
value: function streamRecordsForRange(chr, min, max) {
var _this = this;
var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
viewAsPairs: false,
pairAcrossChr: false,
maxInsertSize: 200000
};
return (0, _wrapAsyncGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
var _context, _context2, _context3, _context4, _context5;
var base, url, chrId, result, data, uncba, chunk;
return _regenerator.default.wrap(function _callee$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
base = (0, _concat2.default)(_context = "".concat(_this.baseUrl, "/")).call(_context, _this.trackId);
url = (0, _concat2.default)(_context2 = (0, _concat2.default)(_context3 = (0, _concat2.default)(_context4 = "".concat(base, "?referenceName=")).call(_context4, chr, "&start=")).call(_context3, min, "&end=")).call(_context2, max, "&format=BAM");
chrId = _this.chrToIndex && _this.chrToIndex[chr];
_context8.next = 5;
return (0, _awaitAsyncGenerator2.default)(fetch(url, _objectSpread({}, opts)));
case 5:
result = _context8.sent;
if (result.ok) {
_context8.next = 8;
break;
return [4 /*yield*/, __await(result.json())];
case 2:
data = _a.sent();
return [4 /*yield*/, __await(concat(data.htsget.urls.slice(1), opts))];
case 3:
uncba = _a.sent();
chunk = {
buffer: uncba,
chunk: { minv: { dataPosition: 0 } },
toString: function () {
return "".concat(chr, "_").concat(min, "_").concat(max);
},
};
return [5 /*yield**/, __values(__asyncDelegator(__asyncValues(this._fetchChunkFeatures(
// @ts-ignore
[chunk], chrId, min, max, opts))))];
case 4: return [4 /*yield*/, __await.apply(void 0, [_a.sent()])];
case 5:
_a.sent();
return [2 /*return*/];
}
throw new Error(result.statusText);
case 8:
_context8.next = 10;
return (0, _awaitAsyncGenerator2.default)(result.json());
case 10:
data = _context8.sent;
_context8.next = 13;
return (0, _awaitAsyncGenerator2.default)(concat((0, _slice.default)(_context5 = data.htsget.urls).call(_context5, 1), opts));
case 13:
uncba = _context8.sent;
chunk = {
buffer: uncba,
chunk: {
minv: {
dataPosition: 0
}
},
toString: function toString() {
var _context6, _context7;
return (0, _concat2.default)(_context6 = (0, _concat2.default)(_context7 = "".concat(chr, "_")).call(_context7, min, "_")).call(_context6, max);
}
};
return _context8.delegateYield((0, _asyncGeneratorDelegate2.default)((0, _asyncIterator2.default)(_this._fetchChunkFeatures( // @ts-ignore
[chunk], chrId, min, max, opts)), _awaitAsyncGenerator2.default), "t0", 16);
case 16:
case "end":
return _context8.stop();
}
}
}, _callee);
}))();
} //@ts-ignore
}, {
key: "_readChunk",
value: function () {
var _readChunk2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(params) {
var chunk, buffer, c2;
return _regenerator.default.wrap(function _callee2$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
});
});
};
//@ts-ignore
HtsgetFile.prototype._readChunk = function (params) {
return __awaiter(this, void 0, void 0, function () {
var chunk, buffer, c2;
return __generator(this, function (_a) {
chunk = params.chunk;
buffer = chunk.buffer, c2 = chunk.chunk;
return _context9.abrupt("return", {
data: buffer,
cpositions: null,
dpositions: null,
chunk: c2
});
case 3:
case "end":
return _context9.stop();
}
}
}, _callee2);
}));
function _readChunk(_x3) {
return _readChunk2.apply(this, arguments);
}
return _readChunk;
}()
}, {
key: "getHeader",
value: function () {
var _getHeader = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
var _context10;
var opts,
url,
result,
data,
uncba,
headLen,
headerText,
samHeader,
idToName,
nameToId,
sqLines,
_args3 = arguments;
return _regenerator.default.wrap(function _callee3$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
opts = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {};
url = (0, _concat2.default)(_context10 = "".concat(this.baseUrl, "/")).call(_context10, this.trackId, "?referenceName=na&class=header");
_context12.next = 4;
return fetch(url, opts);
case 4:
result = _context12.sent;
if (result.ok) {
_context12.next = 7;
break;
return [2 /*return*/, { data: buffer, cpositions: null, dpositions: null, chunk: c2 }];
});
});
};
HtsgetFile.prototype.getHeader = function (opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var url, result, data, uncba, headLen, headerText, samHeader, idToName, nameToId, sqLines;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
url = "".concat(this.baseUrl, "/").concat(this.trackId, "?referenceName=na&class=header");
return [4 /*yield*/, fetch(url, opts)];
case 1:
result = _a.sent();
if (!result.ok) {
throw new Error("Failed to fetch ".concat(result.statusText));
}
return [4 /*yield*/, result.json()];
case 2:
data = _a.sent();
return [4 /*yield*/, concat(data.htsget.urls, opts)];
case 3:
uncba = _a.sent();
if (uncba.readInt32LE(0) !== bamFile_1.BAM_MAGIC) {
throw new Error('Not a BAM file');
}
headLen = uncba.readInt32LE(4);
headerText = uncba.toString('utf8', 8, 8 + headLen);
samHeader = (0, sam_1.parseHeaderText)(headerText);
idToName = [];
nameToId = {};
sqLines = samHeader.filter(function (l) { return l.tag === 'SQ'; });
sqLines.forEach(function (sqLine, refId) {
sqLine.data.forEach(function (item) {
if (item.tag === 'SN') {
// this is the ref name
var refName = item.value;
nameToId[refName] = refId;
idToName[refId] = refName;
}
});
});
this.chrToIndex = nameToId;
this.indexToChr = idToName;
return [2 /*return*/, samHeader];
}
throw new Error("Failed to fetch ".concat(result.statusText));
case 7:
_context12.next = 9;
return result.json();
case 9:
data = _context12.sent;
_context12.next = 12;
return concat(data.htsget.urls, opts);
case 12:
uncba = _context12.sent;
if (!(uncba.readInt32LE(0) !== _bamFile.BAM_MAGIC)) {
_context12.next = 15;
break;
}
throw new Error('Not a BAM file');
case 15:
headLen = uncba.readInt32LE(4);
headerText = uncba.toString('utf8', 8, 8 + headLen);
samHeader = (0, _sam.parseHeaderText)(headerText); // use the @SQ lines in the header to figure out the
// mapping between ref ref ID numbers and names
idToName = [];
nameToId = {};
sqLines = (0, _filter.default)(samHeader).call(samHeader, function (l) {
return l.tag === 'SQ';
});
(0, _forEach.default)(sqLines).call(sqLines, function (sqLine, refId) {
var _context11;
(0, _forEach.default)(_context11 = sqLine.data).call(_context11, function (item) {
if (item.tag === 'SN') {
// this is the ref name
var refName = item.value;
nameToId[refName] = refId;
idToName[refId] = refName;
}
});
});
this.chrToIndex = nameToId;
this.indexToChr = idToName;
return _context12.abrupt("return", samHeader);
case 25:
case "end":
return _context12.stop();
}
}
}, _callee3, this);
}));
function getHeader() {
return _getHeader.apply(this, arguments);
}
return getHeader;
}()
}]);
return HtsgetFile;
}(_bamFile.default);
});
});
};
return HtsgetFile;
}(bamFile_1.default));
exports.default = HtsgetFile;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9odHNnZXQudHMiXSwibmFtZXMiOlsiY29uY2F0IiwiYXJyIiwib3B0cyIsImFsbCIsImNodW5rIiwidXJsIiwiaGVhZGVycyIsIkJ1ZmZlciIsImZyb20iLCJzcGxpdCIsInJlZmVyZXIiLCJyZXN0IiwiZmV0Y2giLCJyZXMiLCJvayIsIkVycm9yIiwic3RhdHVzVGV4dCIsImFycmF5QnVmZmVyIiwiZWx0IiwiSHRzZ2V0RmlsZSIsImFyZ3MiLCJiYW1GaWxlaGFuZGxlIiwiYmFpRmlsZWhhbmRsZSIsImJhc2VVcmwiLCJ0cmFja0lkIiwiY2hyIiwibWluIiwibWF4Iiwidmlld0FzUGFpcnMiLCJwYWlyQWNyb3NzQ2hyIiwibWF4SW5zZXJ0U2l6ZSIsImJhc2UiLCJjaHJJZCIsImNoclRvSW5kZXgiLCJyZXN1bHQiLCJqc29uIiwiZGF0YSIsImh0c2dldCIsInVybHMiLCJ1bmNiYSIsImJ1ZmZlciIsIm1pbnYiLCJkYXRhUG9zaXRpb24iLCJ0b1N0cmluZyIsIl9mZXRjaENodW5rRmVhdHVyZXMiLCJwYXJhbXMiLCJjMiIsImNwb3NpdGlvbnMiLCJkcG9zaXRpb25zIiwicmVhZEludDMyTEUiLCJCQU1fTUFHSUMiLCJoZWFkTGVuIiwiaGVhZGVyVGV4dCIsInNhbUhlYWRlciIsImlkVG9OYW1lIiwibmFtZVRvSWQiLCJzcUxpbmVzIiwibCIsInRhZyIsInNxTGluZSIsInJlZklkIiwiaXRlbSIsInJlZk5hbWUiLCJ2YWx1ZSIsImluZGV4VG9DaHIiLCJCYW1GaWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7U0FXZUEsTTs7Ozs7b0ZBQWYsa0JBQXNCQyxHQUF0QixFQUE4Q0MsSUFBOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFDb0IsaUJBQVFDLEdB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LENBQUN2QixJQUFQLG1CQUFvQixVQUFDeUIsSUFBRCxFQUFzQjtBQUN4Qyx3QkFBSUEsSUFBSSxDQUFDSCxHQUFMLEtBQWEsSUFBakIsRUFBdUI7QUFDckI7QUFDQSwwQkFBTUksT0FBTyxHQUFHRCxJQUFJLENBQUNFLEtBQXJCO0FBQ0FSLHNCQUFBQSxRQUFRLENBQUNPLE9BQUQsQ0FBUixHQUFvQkYsS0FBcEI7QUFDQU4sc0JBQUFBLFFBQVEsQ0FBQ00sS0FBRCxDQUFSLEdBQWtCRSxPQUFsQjtBQUNEO0FBQ0YsbUJBUEQ7QUFRRCxpQkFUTSxDQUFQO0FBVUEscUJBQUs3QixVQUFMLEdBQWtCc0IsUUFBbEI7QUFDQSxxQkFBS1MsVUFBTCxHQUFrQlYsUUFBbEI7bURBQ09ELFM7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXRGNkJZLGdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZU9wdHMsIEJhbU9wdHMgfSBmcm9tICcuL3V0aWwnXG5pbXBvcnQgQmFtRmlsZSwgeyBCQU1fTUFHSUMgfSBmcm9tICcuL2JhbUZpbGUnXG5pbXBvcnQgJ2Nyb3NzLWZldGNoL3BvbHlmaWxsJ1xuaW1wb3J0IENodW5rIGZyb20gJy4vY2h1bmsnXG5pbXBvcnQgeyB1bnppcCB9IGZyb20gJ0BnbW9kL2JnemYtZmlsZWhhbmRsZSdcbmltcG9ydCB7IHBhcnNlSGVhZGVyVGV4dCB9IGZyb20gJy4vc2FtJ1xuXG5pbnRlcmZhY2UgSGVhZGVyTGluZSB7XG4gIHRhZzogc3RyaW5nXG4gIHZhbHVlOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIEh0c2dldENodW5rIHtcbiAgdXJsOiBzdHJpbmdcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbn1cbmFzeW5jIGZ1bmN0aW9uIGNvbmNhdChhcnI6IHsgdXJsOiBzdHJpbmcgfVtdLCBvcHRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGFyci5tYXAoYXN5bmMgKGNodW5rOiBIdHNnZXRDaHVuaykgPT4ge1xuICAgICAgY29uc3QgeyB1cmwsIGhlYWRlcnMgfSA9IGNodW5rXG4gICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHVybC5zcGxpdCgnLCcpWzFdLCAnYmFzZTY0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vcmVtb3ZlIHJlZmVyZXIgaGVhZGVyLCBpdCBpcyBub3QgZXZlbiBhbGxvd2VkIHRvIGJlIHNwZWNpZmllZFxuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIGNvbnN0IHsgcmVmZXJlciwgLi4ucmVzdCB9ID0gaGVhZGVyc1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgLi4ub3B0cywgaGVhZGVyczogeyAuLi5vcHRzLmhlYWRlcnMsIC4uLnJlc3QgfSB9KVxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoICR7cmVzLnN0YXR1c1RleHR9YClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXdhaXQgcmVzLmFycmF5QnVmZmVyKCkpXG4gICAgICB9XG4gICAgfSksXG4gIClcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChhd2FpdCBQcm9taXNlLmFsbChyZXMubWFwKGVsdCA9PiB1bnppcChlbHQpKSkpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0c2dldEZpbGUgZXh0ZW5kcyBCYW1GaWxlIHtcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmdcblxuICBwcml2YXRlIHRyYWNrSWQ6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKGFyZ3M6IHsgdHJhY2tJZDogc3RyaW5nOyBiYXNlVXJsOiBzdHJpbmcgfSkge1xuICAgIC8vIEB0cy1pZ25vcmUgb3ZlcnJpZGUgYmFtIGRlZmF1bHRzXG4gICAgc3VwZXIoeyBiYW1GaWxlaGFuZGxlOiAnPycsIGJhaUZpbGVoYW5kbGU6ICc/JyB9KVxuICAgIHRoaXMuYmFzZVVybCA9IGFyZ3MuYmFzZVVybFxuICAgIHRoaXMudHJhY2tJZCA9IGFyZ3MudHJhY2tJZFxuICB9XG5cbiAgYXN5bmMgKnN0cmVhbVJlY29yZHNGb3JSYW5nZShcbiAgICBjaHI6IHN0cmluZyxcbiAgICBtaW46IG51bWJlcixcbiAgICBtYXg6IG51bWJlcixcbiAgICBvcHRzOiBCYW1PcHRzID0geyB2aWV3QXNQYWlyczogZmFsc2UsIHBhaXJBY3Jvc3NDaHI6IGZhbHNlLCBtYXhJbnNlcnRTaXplOiAyMDAwMDAgfSxcbiAgKSB7XG4gICAgY29uc3QgYmFzZSA9IGAke3RoaXMuYmFzZVVybH0vJHt0aGlzLnRyYWNrSWR9YFxuICAgIGNvbnN0IHVybCA9IGAke2Jhc2V9P3JlZmVyZW5jZU5hbWU9JHtjaHJ9JnN0YXJ0PSR7bWlufSZlbmQ9JHttYXh9JmZvcm1hdD1CQU1gXG4gICAgY29uc3QgY2hySWQgPSB0aGlzLmNoclRvSW5kZXggJiYgdGhpcy5jaHJUb0luZGV4W2Nocl1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaCh1cmwsIHsgLi4ub3B0cyB9KVxuICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LnN0YXR1c1RleHQpXG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXN1bHQuanNvbigpXG4gICAgY29uc3QgdW5jYmEgPSBhd2FpdCBjb25jYXQoZGF0YS5odHNnZXQudXJscy5zbGljZSgxKSwgb3B0cylcbiAgICBjb25zdCBjaHVuayA9IHtcbiAgICAgIGJ1ZmZlcjogdW5jYmEsXG4gICAgICBjaHVuazogeyBtaW52OiB7IGRhdGFQb3NpdGlvbjogMCB9IH0sXG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke2Nocn1fJHttaW59XyR7bWF4fWBcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgeWllbGQqIHRoaXMuX2ZldGNoQ2h1bmtGZWF0dXJlcyhcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIFtjaHVua10sXG4gICAgICBjaHJJZCxcbiAgICAgIG1pbixcbiAgICAgIG1heCxcbiAgICAgIG9wdHMsXG4gICAgKVxuICB9XG5cbiAgLy9AdHMtaWdub3JlXG4gIGFzeW5jIF9yZWFkQ2h1bmsocGFyYW1zOiB7IGNodW5rOiB7IGJ1ZmZlcjogQnVmZmVyOyBjaHVuazogQ2h1bmsgfTsgb3B0czogQmFzZU9wdHMgfSkge1xuICAgIGNvbnN0IHsgY2h1bmsgfSA9IHBhcmFtc1xuICAgIGNvbnN0IHsgYnVmZmVyLCBjaHVuazogYzIgfSA9IGNodW5rXG4gICAgcmV0dXJuIHsgZGF0YTogYnVmZmVyLCBjcG9zaXRpb25zOiBudWxsLCBkcG9zaXRpb25zOiBudWxsLCBjaHVuazogYzIgfVxuICB9XG5cbiAgYXN5bmMgZ2V0SGVhZGVyKG9wdHM6IEJhc2VPcHRzID0ge30pIHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9LyR7dGhpcy50cmFja0lkfT9yZWZlcmVuY2VOYW1lPW5hJmNsYXNzPWhlYWRlcmBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdHMpXG4gICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoICR7cmVzdWx0LnN0YXR1c1RleHR9YClcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3VsdC5qc29uKClcbiAgICBjb25zdCB1bmNiYSA9IGF3YWl0IGNvbmNhdChkYXRhLmh0c2dldC51cmxzLCBvcHRzKVxuXG4gICAgaWYgKHVuY2JhLnJlYWRJbnQzMkxFKDApICE9PSBCQU1fTUFHSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgQkFNIGZpbGUnKVxuICAgIH1cbiAgICBjb25zdCBoZWFkTGVuID0gdW5jYmEucmVhZEludDMyTEUoNClcblxuICAgIGNvbnN0IGhlYWRlclRleHQgPSB1bmNiYS50b1N0cmluZygndXRmOCcsIDgsIDggKyBoZWFkTGVuKVxuICAgIGNvbnN0IHNhbUhlYWRlciA9IHBhcnNlSGVhZGVyVGV4dChoZWFkZXJUZXh0KVxuXG4gICAgLy8gdXNlIHRoZSBAU1EgbGluZXMgaW4gdGhlIGhlYWRlciB0byBmaWd1cmUgb3V0IHRoZVxuICAgIC8vIG1hcHBpbmcgYmV0d2VlbiByZWYgcmVmIElEIG51bWJlcnMgYW5kIG5hbWVzXG4gICAgY29uc3QgaWRUb05hbWU6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBuYW1lVG9JZDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9XG4gICAgY29uc3Qgc3FMaW5lcyA9IHNhbUhlYWRlci5maWx0ZXIoKGw6IHsgdGFnOiBzdHJpbmcgfSkgPT4gbC50YWcgPT09ICdTUScpXG4gICAgc3FMaW5lcy5mb3JFYWNoKChzcUxpbmU6IHsgZGF0YTogSGVhZGVyTGluZVtdIH0sIHJlZklkOiBudW1iZXIpID0+IHtcbiAgICAgIHNxTGluZS5kYXRhLmZvckVhY2goKGl0ZW06IEhlYWRlckxpbmUpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udGFnID09PSAnU04nKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyB0aGUgcmVmIG5hbWVcbiAgICAgICAgICBjb25zdCByZWZOYW1lID0gaXRlbS52YWx1ZVxuICAgICAgICAgIG5hbWVUb0lkW3JlZk5hbWVdID0gcmVmSWRcbiAgICAgICAgICBpZFRvTmFtZVtyZWZJZF0gPSByZWZOYW1lXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgICB0aGlzLmNoclRvSW5kZXggPSBuYW1lVG9JZFxuICAgIHRoaXMuaW5kZXhUb0NociA9IGlkVG9OYW1lXG4gICAgcmV0dXJuIHNhbUhlYWRlclxuICB9XG59XG4iXX0=
//# sourceMappingURL=htsget.js.map
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
_Object$defineProperty(exports, "BAI", {
enumerable: true,
get: function get() {
return _bai.default;
}
});
_Object$defineProperty(exports, "CSI", {
enumerable: true,
get: function get() {
return _csi.default;
}
});
_Object$defineProperty(exports, "BamFile", {
enumerable: true,
get: function get() {
return _bamFile.default;
}
});
_Object$defineProperty(exports, "HtsgetFile", {
enumerable: true,
get: function get() {
return _htsget.default;
}
});
_Object$defineProperty(exports, "BamRecord", {
enumerable: true,
get: function get() {
return _record.default;
}
});
var _bai = _interopRequireDefault(require("./bai"));
var _csi = _interopRequireDefault(require("./csi"));
var _bamFile = _interopRequireDefault(require("./bamFile"));
var _htsget = _interopRequireDefault(require("./htsget"));
var _record = _interopRequireDefault(require("./record"));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCQUkgZnJvbSAnLi9iYWknXG5pbXBvcnQgQ1NJIGZyb20gJy4vY3NpJ1xuaW1wb3J0IEJhbUZpbGUgZnJvbSAnLi9iYW1GaWxlJ1xuaW1wb3J0IEh0c2dldEZpbGUgZnJvbSAnLi9odHNnZXQnXG5pbXBvcnQgQmFtUmVjb3JkIGZyb20gJy4vcmVjb3JkJ1xuXG5leHBvcnQgeyBCQUksIENTSSwgQmFtRmlsZSwgQmFtUmVjb3JkLCBIdHNnZXRGaWxlIH1cbiJdfQ==
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HtsgetFile = exports.BamRecord = exports.BamFile = exports.CSI = exports.BAI = void 0;
var bai_1 = __importDefault(require("./bai"));
exports.BAI = bai_1.default;
var csi_1 = __importDefault(require("./csi"));
exports.CSI = csi_1.default;
var bamFile_1 = __importDefault(require("./bamFile"));
exports.BamFile = bamFile_1.default;
var htsget_1 = __importDefault(require("./htsget"));
exports.HtsgetFile = htsget_1.default;
var record_1 = __importDefault(require("./record"));
exports.BamRecord = record_1.default;
//# sourceMappingURL=index.js.map

@@ -7,4 +7,3 @@ import { GenericFilehandle } from 'generic-filehandle';

filehandle: GenericFilehandle;
renameRefSeq: Function;
private _parseCache;
renameRefSeq: (s: string) => string;
/**

@@ -11,0 +10,0 @@ * @param {filehandle} filehandle

"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty2 = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty2(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties"));
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _abortablePromiseCache = _interopRequireDefault(require("abortable-promise-cache"));
var _quickLru = _interopRequireDefault(require("quick-lru"));
function ownKeys(object, enumerableOnly) { var keys = (0, _keys.default)(object); if (_getOwnPropertySymbols.default) { var symbols = (0, _getOwnPropertySymbols.default)(object); if (enumerableOnly) symbols = (0, _filter.default)(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor.default)(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context3; (0, _forEach.default)(_context3 = ownKeys(Object(source), true)).call(_context3, function (key) { (0, _defineProperty3.default)(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors.default) { (0, _defineProperties.default)(target, (0, _getOwnPropertyDescriptors.default)(source)); } else { var _context4; (0, _forEach.default)(_context4 = ownKeys(Object(source))).call(_context4, function (key) { (0, _defineProperty2.default)(target, key, (0, _getOwnPropertyDescriptor.default)(source, key)); }); } } return target; }
var IndexFile = /*#__PURE__*/function () {
/**
* @param {filehandle} filehandle
* @param {function} [renameRefSeqs]
*/
function IndexFile(_ref) {
var filehandle = _ref.filehandle,
_ref$renameRefSeq = _ref.renameRefSeq,
renameRefSeq = _ref$renameRefSeq === void 0 ? function (n) {
return n;
} : _ref$renameRefSeq;
(0, _classCallCheck2.default)(this, IndexFile);
(0, _defineProperty3.default)(this, "filehandle", void 0);
(0, _defineProperty3.default)(this, "renameRefSeq", void 0);
(0, _defineProperty3.default)(this, "_parseCache", void 0);
this.filehandle = filehandle;
this.renameRefSeq = renameRefSeq;
}
(0, _createClass2.default)(IndexFile, [{
key: "_findFirstData",
value: function _findFirstData(data, virtualOffset) {
var currentFdl = data.firstDataLine;
if (currentFdl) {
data.firstDataLine = currentFdl.compareTo(virtualOffset) > 0 ? virtualOffset : currentFdl;
} else {
data.firstDataLine = virtualOffset;
}
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}, {
key: "parse",
value: function () {
var _parse2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
var _this = this;
var opts,
_args = arguments;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
opts = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
if (!this._parseCache) {
this._parseCache = new _abortablePromiseCache.default({
cache: new _quickLru.default({
maxSize: 1
}),
fill: function fill(opts, signal) {
return _this._parse(_objectSpread(_objectSpread({}, opts), {}, {
signal: signal
}));
}
});
};
Object.defineProperty(exports, "__esModule", { value: true });
var IndexFile = /** @class */ (function () {
/**
* @param {filehandle} filehandle
* @param {function} [renameRefSeqs]
*/
function IndexFile(_a) {
var filehandle = _a.filehandle, _b = _a.renameRefSeq, renameRefSeq = _b === void 0 ? function (n) { return n; } : _b;
this.filehandle = filehandle;
this.renameRefSeq = renameRefSeq;
}
IndexFile.prototype._findFirstData = function (data, virtualOffset) {
var currentFdl = data.firstDataLine;
if (currentFdl) {
data.firstDataLine =
currentFdl.compareTo(virtualOffset) > 0 ? virtualOffset : currentFdl;
}
else {
data.firstDataLine = virtualOffset;
}
};
IndexFile.prototype.parse = function (opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this._parse(opts)];
});
});
};
IndexFile.prototype.hasRefSeq = function (seqId, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.parse(opts)];
case 1: return [2 /*return*/, !!((_a.sent()).indices[seqId] || {}).binIndex];
}
return _context.abrupt("return", this._parseCache.get('index', opts, opts.signal));
case 3:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function parse() {
return _parse2.apply(this, arguments);
}
return parse;
}()
}, {
key: "hasRefSeq",
value: function () {
var _hasRefSeq = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(seqId) {
var opts,
_args2 = arguments;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
opts = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
_context2.next = 3;
return this.parse(opts);
case 3:
_context2.t1 = seqId;
_context2.t0 = _context2.sent.indices[_context2.t1];
if (_context2.t0) {
_context2.next = 7;
break;
}
_context2.t0 = {};
case 7:
return _context2.abrupt("return", !!_context2.t0.binIndex);
case 8:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function hasRefSeq(_x) {
return _hasRefSeq.apply(this, arguments);
}
return hasRefSeq;
}()
}]);
return IndexFile;
}();
});
});
};
return IndexFile;
}());
exports.default = IndexFile;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleEZpbGUudHMiXSwibmFtZXMiOlsiSW5kZXhGaWxlIiwiZmlsZWhhbmRsZSIsInJlbmFtZVJlZlNlcSIsIm4iLCJkYXRhIiwidmlydHVhbE9mZnNldCIsImN1cnJlbnRGZGwiLCJmaXJzdERhdGFMaW5lIiwiY29tcGFyZVRvIiwib3B0cyIsIl9wYXJzZUNhY2hlIiwiQWJvcnRhYmxlUHJvbWlzZUNhY2hlIiwiY2FjaGUiLCJRdWlja0xSVSIsIm1heFNpemUiLCJmaWxsIiwic2lnbmFsIiwiX3BhcnNlIiwiZ2V0Iiwic2VxSWQiLCJwYXJzZSIsImluZGljZXMiLCJiaW5JbmRleCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7O0lBTThCQSxTO0FBSzVCOzs7O0FBSUEsMkJBTUc7QUFBQSxRQUxEQyxVQUtDLFFBTERBLFVBS0M7QUFBQSxpQ0FKREMsWUFJQztBQUFBLFFBSkRBLFlBSUMsa0NBSmMsVUFBQ0MsQ0FBRDtBQUFBLGFBQWVBLENBQWY7QUFBQSxLQUlkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDRCxTQUFLRixVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0JBLFlBQXBCO0FBQ0Q7Ozs7bUNBZWNFLEksRUFBV0MsYSxFQUE4QjtBQUN0RCxVQUFNQyxVQUFVLEdBQUdGLElBQUksQ0FBQ0csYUFBeEI7O0FBQ0EsVUFBSUQsVUFBSixFQUFnQjtBQUNkRixRQUFBQSxJQUFJLENBQUNHLGFBQUwsR0FBcUJELFVBQVUsQ0FBQ0UsU0FBWCxDQUFxQkgsYUFBckIsSUFBc0MsQ0FBdEMsR0FBMENBLGFBQTFDLEdBQTBEQyxVQUEvRTtBQUNELE9BRkQsTUFFTztBQUNMRixRQUFBQSxJQUFJLENBQUNHLGFBQUwsR0FBcUJGLGFBQXJCO0FBQ0Q7QUFDRjs7Ozs7Ozs7Ozs7OztBQUVXSSxnQkFBQUEsSSwyREFBaUIsRTs7QUFDM0Isb0JBQUksQ0FBQyxLQUFLQyxXQUFWLEVBQXVCO0FBQ3JCLHVCQUFLQSxXQUFMLEdBQW1CLElBQUlDLDhCQUFKLENBQTBCO0FBQzNDQyxvQkFBQUEsS0FBSyxFQUFFLElBQUlDLGlCQUFKLENBQWE7QUFBRUMsc0JBQUFBLE9BQU8sRUFBRTtBQUFYLHFCQUFiLENBRG9DO0FBRTNDQyxvQkFBQUEsSUFBSSxFQUFFLGNBQUNOLElBQUQsRUFBaUJPLE1BQWpCLEVBQTBDO0FBQzlDLDZCQUFPLEtBQUksQ0FBQ0MsTUFBTCxpQ0FBaUJSLElBQWpCO0FBQXVCTyx3QkFBQUEsTUFBTSxFQUFOQTtBQUF2Qix5QkFBUDtBQUNEO0FBSjBDLG1CQUExQixDQUFuQjtBQU1EOztpREFDTSxLQUFLTixXQUFMLENBQWlCUSxHQUFqQixDQUFxQixPQUFyQixFQUE4QlQsSUFBOUIsRUFBb0NBLElBQUksQ0FBQ08sTUFBekMsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpSEFHT0csSzs7Ozs7OztBQUFlVixnQkFBQUEsSSw4REFBaUIsRTs7dUJBQzdCLEtBQUtXLEtBQUwsQ0FBV1gsSUFBWCxDOzs7K0JBQTBCVSxLOzhDQUFSRSxPOzs7Ozs7OytCQUFrQixFOzs7aUVBQUlDLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWJvcnRhYmxlUHJvbWlzZUNhY2hlIGZyb20gJ2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlJ1xuaW1wb3J0IFF1aWNrTFJVIGZyb20gJ3F1aWNrLWxydSdcbmltcG9ydCB7IEdlbmVyaWNGaWxlaGFuZGxlIH0gZnJvbSAnZ2VuZXJpYy1maWxlaGFuZGxlJ1xuaW1wb3J0IFZpcnR1YWxPZmZzZXQgZnJvbSAnLi92aXJ0dWFsT2Zmc2V0J1xuaW1wb3J0IENodW5rIGZyb20gJy4vY2h1bmsnXG5pbXBvcnQgeyBCYXNlT3B0cyB9IGZyb20gJy4vdXRpbCdcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgSW5kZXhGaWxlIHtcbiAgcHVibGljIGZpbGVoYW5kbGU6IEdlbmVyaWNGaWxlaGFuZGxlXG4gIHB1YmxpYyByZW5hbWVSZWZTZXE6IEZ1bmN0aW9uXG4gIHByaXZhdGUgX3BhcnNlQ2FjaGU6IGFueVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ZpbGVoYW5kbGV9IGZpbGVoYW5kbGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW3JlbmFtZVJlZlNlcXNdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZmlsZWhhbmRsZSxcbiAgICByZW5hbWVSZWZTZXEgPSAobjogc3RyaW5nKSA9PiBuLFxuICB9OiB7XG4gICAgZmlsZWhhbmRsZTogR2VuZXJpY0ZpbGVoYW5kbGVcbiAgICByZW5hbWVSZWZTZXE/OiAoYTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgfSkge1xuICAgIHRoaXMuZmlsZWhhbmRsZSA9IGZpbGVoYW5kbGVcbiAgICB0aGlzLnJlbmFtZVJlZlNlcSA9IHJlbmFtZVJlZlNlcVxuICB9XG4gIHB1YmxpYyBhYnN0cmFjdCBhc3luYyBsaW5lQ291bnQocmVmSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPlxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYXN5bmMgX3BhcnNlKG9wdHM/OiBCYXNlT3B0cyk6IFByb21pc2U8YW55PlxuICBwdWJsaWMgYWJzdHJhY3QgYXN5bmMgaW5kZXhDb3YoXG4gICAgcmVmSWQ6IG51bWJlcixcbiAgICBzdGFydD86IG51bWJlcixcbiAgICBlbmQ/OiBudW1iZXIsXG4gICk6IFByb21pc2U8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgc2NvcmU6IG51bWJlciB9W10+XG4gIHB1YmxpYyBhYnN0cmFjdCBhc3luYyBibG9ja3NGb3JSYW5nZShcbiAgICBjaHJJZDogbnVtYmVyLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXIsXG4gICAgb3B0czogQmFzZU9wdHMsXG4gICk6IFByb21pc2U8Q2h1bmtbXT5cblxuICBfZmluZEZpcnN0RGF0YShkYXRhOiBhbnksIHZpcnR1YWxPZmZzZXQ6IFZpcnR1YWxPZmZzZXQpIHtcbiAgICBjb25zdCBjdXJyZW50RmRsID0gZGF0YS5maXJzdERhdGFMaW5lXG4gICAgaWYgKGN1cnJlbnRGZGwpIHtcbiAgICAgIGRhdGEuZmlyc3REYXRhTGluZSA9IGN1cnJlbnRGZGwuY29tcGFyZVRvKHZpcnR1YWxPZmZzZXQpID4gMCA/IHZpcnR1YWxPZmZzZXQgOiBjdXJyZW50RmRsXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuZmlyc3REYXRhTGluZSA9IHZpcnR1YWxPZmZzZXRcbiAgICB9XG4gIH1cblxuICBhc3luYyBwYXJzZShvcHRzOiBCYXNlT3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZUNhY2hlKSB7XG4gICAgICB0aGlzLl9wYXJzZUNhY2hlID0gbmV3IEFib3J0YWJsZVByb21pc2VDYWNoZSh7XG4gICAgICAgIGNhY2hlOiBuZXcgUXVpY2tMUlUoeyBtYXhTaXplOiAxIH0pLFxuICAgICAgICBmaWxsOiAob3B0czogQmFzZU9wdHMsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlKHsgLi4ub3B0cywgc2lnbmFsIH0pXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyc2VDYWNoZS5nZXQoJ2luZGV4Jywgb3B0cywgb3B0cy5zaWduYWwpXG4gIH1cblxuICBhc3luYyBoYXNSZWZTZXEoc2VxSWQ6IG51bWJlciwgb3B0czogQmFzZU9wdHMgPSB7fSkge1xuICAgIHJldHVybiAhISgoYXdhaXQgdGhpcy5wYXJzZShvcHRzKSkuaW5kaWNlc1tzZXFJZF0gfHwge30pLmJpbkluZGV4XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=indexFile.js.map
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _flags2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/flags"));
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-int"));
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _constants = _interopRequireDefault(require("./constants"));
var _context;
var SEQRET_DECODER = (0, _map.default)(_context = '=ACMGRSVTWYHKDBN'.split('')).call(_context, function (s) {
return s.charCodeAt(0);
});
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable @typescript-eslint/no-empty-function */
var constants_1 = __importDefault(require("./constants"));
var SEQRET_DECODER = '=ACMGRSVTWYHKDBN'.split('').map(function (s) { return s.charCodeAt(0); });
var CIGAR_DECODER = 'MIDNSHP=X???????'.split('');

@@ -44,186 +13,135 @@ /**

*/
var BamRecord = /*#__PURE__*/function () {
function BamRecord(args) {
(0, _classCallCheck2.default)(this, BamRecord);
(0, _defineProperty2.default)(this, "data", void 0);
(0, _defineProperty2.default)(this, "bytes", void 0);
(0, _defineProperty2.default)(this, "flags", void 0);
(0, _defineProperty2.default)(this, "_id", void 0);
(0, _defineProperty2.default)(this, "_refID", void 0);
(0, _defineProperty2.default)(this, "_tagOffset", undefined);
(0, _defineProperty2.default)(this, "_tagList", []);
(0, _defineProperty2.default)(this, "_allTagsParsed", false);
this.data = {};
this.bytes = {
start: args.bytes.start,
end: args.bytes.end,
byteArray: args.bytes.byteArray
var BamRecord = /** @class */ (function () {
function BamRecord(args) {
this._tagOffset = undefined;
this._tagList = [];
this._allTagsParsed = false;
this.data = {};
this.bytes = {
start: args.bytes.start,
end: args.bytes.end,
byteArray: args.bytes.byteArray,
};
this._id = args.fileOffset;
var _a = this.bytes, start = _a.start, byteArray = _a.byteArray;
this._refID = byteArray.readInt32LE(start + 4);
this.data.start = byteArray.readInt32LE(start + 8);
this.flags = (byteArray.readInt32LE(start + 16) & 0xffff0000) >> 16;
}
BamRecord.prototype.get = function (field) {
//@ts-ignore
if (this[field]) {
//@ts-ignore
if (this.data[field]) {
return this.data[field];
}
//@ts-ignore
this.data[field] = this[field]();
return this.data[field];
}
return this._get(field.toLowerCase());
};
this._id = args.fileOffset;
var _this$bytes = this.bytes,
start = _this$bytes.start,
byteArray = _this$bytes.byteArray;
this._refID = byteArray.readInt32LE(start + 4);
this.data.start = byteArray.readInt32LE(start + 8);
this.flags = (byteArray.readInt32LE(start + 16) & 0xffff0000) >> 16;
}
(0, _createClass2.default)(BamRecord, [{
key: "get",
value: function get(field) {
//@ts-ignore
if (this[field]) {
//@ts-ignore
if (this.data[field]) {
return this.data[field];
} //@ts-ignore
this.data[field] = this[field]();
return this.data[field];
}
return this._get(field.toLowerCase());
}
}, {
key: "end",
value: function end() {
return this.get('start') + (this.get('length_on_ref') || this.get('seq_length') || undefined);
}
}, {
key: "seq_id",
value: function seq_id() {
return this._refID;
} // same as get(), except requires lower-case arguments. used
BamRecord.prototype.end = function () {
return (this.get('start') +
(this.get('length_on_ref') || this.get('seq_length') || undefined));
};
BamRecord.prototype.seq_id = function () {
return this._refID;
};
// same as get(), except requires lower-case arguments. used
// internally to save lots of calls to field.toLowerCase()
}, {
key: "_get",
value: function _get(field) {
if (field in this.data) {
BamRecord.prototype._get = function (field) {
if (field in this.data) {
return this.data[field];
}
this.data[field] = this._parseTag(field);
return this.data[field];
}
this.data[field] = this._parseTag(field);
return this.data[field];
}
}, {
key: "_tags",
value: function _tags() {
var _context2,
_this = this;
this._parseAllTags();
var tags = ['seq'];
if (!this.isSegmentUnmapped()) {
tags.push('start', 'end', 'strand', 'score', 'qual', 'MQ', 'CIGAR', 'length_on_ref', 'template_length');
}
if (this.isPaired()) {
tags.push('next_segment_position', 'pair_orientation');
}
tags = (0, _concat.default)(tags).call(tags, this._tagList || []);
(0, _forEach.default)(_context2 = (0, _keys.default)(this.data)).call(_context2, function (k) {
if (k[0] !== '_' && k !== 'next_seq_id') {
tags.push(k);
};
BamRecord.prototype._tags = function () {
var _this = this;
this._parseAllTags();
var tags = ['seq'];
if (!this.isSegmentUnmapped()) {
tags.push('start', 'end', 'strand', 'score', 'qual', 'MQ', 'CIGAR', 'length_on_ref', 'template_length');
}
});
var seen = {};
tags = (0, _filter.default)(tags).call(tags, function (t) {
if (t in _this.data && _this.data[t] === undefined || t === 'CG' || t === 'cg') {
return false;
if (this.isPaired()) {
tags.push('next_segment_position', 'pair_orientation');
}
var lt = t.toLowerCase();
var s = seen[lt];
seen[lt] = true;
return !s;
});
return tags;
}
}, {
key: "parent",
value: function parent() {
return undefined;
}
}, {
key: "children",
value: function children() {
return this.get('subfeatures');
}
}, {
key: "id",
value: function id() {
return this._id;
} // special parsers
tags = tags.concat(this._tagList || []);
Object.keys(this.data).forEach(function (k) {
if (k[0] !== '_' && k !== 'next_seq_id') {
tags.push(k);
}
});
var seen = {};
tags = tags.filter(function (t) {
if ((t in _this.data && _this.data[t] === undefined) ||
t === 'CG' ||
t === 'cg') {
return false;
}
var lt = t.toLowerCase();
var s = seen[lt];
seen[lt] = true;
return !s;
});
return tags;
};
BamRecord.prototype.parent = function () {
return undefined;
};
BamRecord.prototype.children = function () {
return this.get('subfeatures');
};
BamRecord.prototype.id = function () {
return this._id;
};
// special parsers
/**
* Mapping quality score.
*/
}, {
key: "mq",
value: function mq() {
var mq = (this.get('_bin_mq_nl') & 0xff00) >> 8;
return mq === 255 ? undefined : mq;
}
}, {
key: "score",
value: function score() {
return this.get('mq');
}
}, {
key: "qual",
value: function qual() {
var _this$qualRaw;
return (_this$qualRaw = this.qualRaw()) === null || _this$qualRaw === void 0 ? void 0 : _this$qualRaw.join(' ');
}
}, {
key: "qualRaw",
value: function qualRaw() {
if (this.isSegmentUnmapped()) {
return undefined;
}
var byteArray = this.bytes.byteArray;
var p = this.bytes.start + 36 + this.get('_l_read_name') + this.get('_n_cigar_op') * 4 + this.get('_seq_bytes');
var lseq = this.get('seq_length');
var qseq = Buffer.allocUnsafe(lseq);
for (var j = 0; j < lseq; ++j) {
qseq[j] = byteArray[p + j];
}
return qseq;
}
}, {
key: "strand",
value: function strand() {
return this.isReverseComplemented() ? -1 : 1;
}
}, {
key: "multi_segment_next_segment_strand",
value: function multi_segment_next_segment_strand() {
if (this.isMateUnmapped()) {
return undefined;
}
return this.isMateReverseComplemented() ? -1 : 1;
}
}, {
key: "name",
value: function name() {
return this.get('_read_name');
}
}, {
key: "_read_name",
value: function _read_name() {
var nl = this.get('_l_read_name');
return this.bytes.byteArray.toString('ascii', this.bytes.start + 36, this.bytes.start + 36 + nl - 1);
}
BamRecord.prototype.mq = function () {
var mq = (this.get('_bin_mq_nl') & 0xff00) >> 8;
return mq === 255 ? undefined : mq;
};
BamRecord.prototype.score = function () {
return this.get('mq');
};
BamRecord.prototype.qual = function () {
var _a;
return (_a = this.qualRaw()) === null || _a === void 0 ? void 0 : _a.join(' ');
};
BamRecord.prototype.qualRaw = function () {
if (this.isSegmentUnmapped()) {
return undefined;
}
var byteArray = this.bytes.byteArray;
var p = this.bytes.start +
36 +
this.get('_l_read_name') +
this.get('_n_cigar_op') * 4 +
this.get('_seq_bytes');
var lseq = this.get('seq_length');
var qseq = Buffer.allocUnsafe(lseq);
for (var j = 0; j < lseq; ++j) {
qseq[j] = byteArray[p + j];
}
return qseq;
};
BamRecord.prototype.strand = function () {
return this.isReverseComplemented() ? -1 : 1;
};
BamRecord.prototype.multi_segment_next_segment_strand = function () {
if (this.isMateUnmapped()) {
return undefined;
}
return this.isMateReverseComplemented() ? -1 : 1;
};
BamRecord.prototype.name = function () {
return this.get('_read_name');
};
BamRecord.prototype._read_name = function () {
var nl = this.get('_l_read_name');
return this.bytes.byteArray.toString('ascii', this.bytes.start + 36, this.bytes.start + 36 + nl - 1);
};
/**

@@ -233,524 +151,395 @@ * Get the value of a tag, parsing the tags as far as necessary.

*/
}, {
key: "_parseTag",
value: function _parseTag(tagName) {
// if all of the tags have been parsed and we're still being
// called, we already know that we have no such tag, because
// it would already have been cached.
if (this._allTagsParsed) {
return undefined;
}
var byteArray = this.bytes.byteArray;
var p = this._tagOffset || this.bytes.start + 36 + this.get('_l_read_name') + this.get('_n_cigar_op') * 4 + this.get('_seq_bytes') + this.get('seq_length');
var blockEnd = this.bytes.end;
var lcTag;
while (p < blockEnd && lcTag !== tagName) {
var tag = String.fromCharCode(byteArray[p], byteArray[p + 1]);
lcTag = tag.toLowerCase();
var type = String.fromCharCode(byteArray[p + 2]);
p += 3;
var value = void 0;
switch (type) {
case 'A':
value = String.fromCharCode(byteArray[p]);
p += 1;
break;
case 'i':
value = byteArray.readInt32LE(p);
p += 4;
break;
case 'I':
value = byteArray.readUInt32LE(p);
p += 4;
break;
case 'c':
value = byteArray.readInt8(p);
p += 1;
break;
case 'C':
value = byteArray.readUInt8(p);
p += 1;
break;
case 's':
value = byteArray.readInt16LE(p);
p += 2;
break;
case 'S':
value = byteArray.readUInt16LE(p);
p += 2;
break;
case 'f':
value = byteArray.readFloatLE(p);
p += 4;
break;
case 'Z':
case 'H':
value = '';
while (p <= blockEnd) {
var cc = byteArray[p++];
if (cc === 0) {
break;
} else {
value += String.fromCharCode(cc);
}
}
break;
case 'B':
{
value = '';
var _cc = byteArray[p++];
var Btype = String.fromCharCode(_cc);
var limit = byteArray.readInt32LE(p);
p += 4;
if (Btype === 'i') {
if (tag === 'CG') {
for (var k = 0; k < limit; k++) {
var cigop = byteArray.readInt32LE(p);
var lop = cigop >> 4;
var op = CIGAR_DECODER[cigop & 0xf];
value += lop + op;
BamRecord.prototype._parseTag = function (tagName) {
// if all of the tags have been parsed and we're still being
// called, we already know that we have no such tag, because
// it would already have been cached.
if (this._allTagsParsed) {
return undefined;
}
var byteArray = this.bytes.byteArray;
var p = this._tagOffset ||
this.bytes.start +
36 +
this.get('_l_read_name') +
this.get('_n_cigar_op') * 4 +
this.get('_seq_bytes') +
this.get('seq_length');
var blockEnd = this.bytes.end;
var lcTag;
while (p < blockEnd && lcTag !== tagName) {
var tag = String.fromCharCode(byteArray[p], byteArray[p + 1]);
lcTag = tag.toLowerCase();
var type = String.fromCharCode(byteArray[p + 2]);
p += 3;
var value = void 0;
switch (type) {
case 'A':
value = String.fromCharCode(byteArray[p]);
p += 1;
break;
case 'i':
value = byteArray.readInt32LE(p);
p += 4;
}
} else {
for (var _k = 0; _k < limit; _k++) {
value += byteArray.readInt32LE(p);
if (_k + 1 < limit) {
value += ',';
}
break;
case 'I':
value = byteArray.readUInt32LE(p);
p += 4;
}
}
}
if (Btype === 'I') {
if (tag === 'CG') {
for (var _k2 = 0; _k2 < limit; _k2++) {
var _cigop = byteArray.readUInt32LE(p);
var _lop = _cigop >> 4;
var _op = CIGAR_DECODER[_cigop & 0xf];
value += _lop + _op;
break;
case 'c':
value = byteArray.readInt8(p);
p += 1;
break;
case 'C':
value = byteArray.readUInt8(p);
p += 1;
break;
case 's':
value = byteArray.readInt16LE(p);
p += 2;
break;
case 'S':
value = byteArray.readUInt16LE(p);
p += 2;
break;
case 'f':
value = byteArray.readFloatLE(p);
p += 4;
}
} else {
for (var _k3 = 0; _k3 < limit; _k3++) {
value += byteArray.readUInt32LE(p);
if (_k3 + 1 < limit) {
value += ',';
break;
case 'Z':
case 'H':
value = '';
while (p <= blockEnd) {
var cc = byteArray[p++];
if (cc === 0) {
break;
}
else {
value += String.fromCharCode(cc);
}
}
break;
case 'B': {
value = '';
var cc = byteArray[p++];
var Btype = String.fromCharCode(cc);
var limit = byteArray.readInt32LE(p);
p += 4;
}
if (Btype === 'i') {
if (tag === 'CG') {
for (var k = 0; k < limit; k++) {
var cigop = byteArray.readInt32LE(p);
var lop = cigop >> 4;
var op = CIGAR_DECODER[cigop & 0xf];
value += lop + op;
p += 4;
}
}
else {
for (var k = 0; k < limit; k++) {
value += byteArray.readInt32LE(p);
if (k + 1 < limit) {
value += ',';
}
p += 4;
}
}
}
if (Btype === 'I') {
if (tag === 'CG') {
for (var k = 0; k < limit; k++) {
var cigop = byteArray.readUInt32LE(p);
var lop = cigop >> 4;
var op = CIGAR_DECODER[cigop & 0xf];
value += lop + op;
p += 4;
}
}
else {
for (var k = 0; k < limit; k++) {
value += byteArray.readUInt32LE(p);
if (k + 1 < limit) {
value += ',';
}
p += 4;
}
}
}
if (Btype === 's') {
for (var k = 0; k < limit; k++) {
value += byteArray.readInt16LE(p);
if (k + 1 < limit) {
value += ',';
}
p += 2;
}
}
if (Btype === 'S') {
for (var k = 0; k < limit; k++) {
value += byteArray.readUInt16LE(p);
if (k + 1 < limit) {
value += ',';
}
p += 2;
}
}
if (Btype === 'c') {
for (var k = 0; k < limit; k++) {
value += byteArray.readInt8(p);
if (k + 1 < limit) {
value += ',';
}
p += 1;
}
}
if (Btype === 'C') {
for (var k = 0; k < limit; k++) {
value += byteArray.readUInt8(p);
if (k + 1 < limit) {
value += ',';
}
p += 1;
}
}
if (Btype === 'f') {
for (var k = 0; k < limit; k++) {
value += byteArray.readFloatLE(p);
if (k + 1 < limit) {
value += ',';
}
p += 4;
}
}
break;
}
}
if (Btype === 's') {
for (var _k4 = 0; _k4 < limit; _k4++) {
value += byteArray.readInt16LE(p);
if (_k4 + 1 < limit) {
value += ',';
}
p += 2;
}
}
if (Btype === 'S') {
for (var _k5 = 0; _k5 < limit; _k5++) {
value += byteArray.readUInt16LE(p);
if (_k5 + 1 < limit) {
value += ',';
}
p += 2;
}
}
if (Btype === 'c') {
for (var _k6 = 0; _k6 < limit; _k6++) {
value += byteArray.readInt8(p);
if (_k6 + 1 < limit) {
value += ',';
}
p += 1;
}
}
if (Btype === 'C') {
for (var _k7 = 0; _k7 < limit; _k7++) {
value += byteArray.readUInt8(p);
if (_k7 + 1 < limit) {
value += ',';
}
p += 1;
}
}
if (Btype === 'f') {
for (var _k8 = 0; _k8 < limit; _k8++) {
value += byteArray.readFloatLE(p);
if (_k8 + 1 < limit) {
value += ',';
}
p += 4;
}
}
break;
default:
console.warn("Unknown BAM tag type '".concat(type, "', tags may be incomplete"));
value = undefined;
p = blockEnd; // stop parsing tags
}
default:
console.warn("Unknown BAM tag type '".concat(type, "', tags may be incomplete"));
value = undefined;
p = blockEnd;
// stop parsing tags
this._tagOffset = p;
this._tagList.push(tag);
if (lcTag === tagName) {
return value;
}
this.data[lcTag] = value;
}
this._tagOffset = p;
this._tagList.push(tag);
if (lcTag === tagName) {
return value;
}
this.data[lcTag] = value;
}
this._allTagsParsed = true;
return undefined;
}
}, {
key: "_parseAllTags",
value: function _parseAllTags() {
this._parseTag('');
}
}, {
key: "_parseCigar",
value: function _parseCigar(cigar) {
var _context3;
return (//@ts-ignore
(0, _map.default)(_context3 = cigar.match(/\d+\D/g)).call(_context3, function (op) {
return [op.match(/\D/)[0].toUpperCase(), (0, _parseInt2.default)(op, 10)];
})
);
}
this._allTagsParsed = true;
return undefined;
};
BamRecord.prototype._parseAllTags = function () {
this._parseTag('');
};
BamRecord.prototype._parseCigar = function (cigar) {
return (
//@ts-ignore
cigar
.match(/\d+\D/g)
//@ts-ignore
.map(function (op) { return [op.match(/\D/)[0].toUpperCase(), parseInt(op, 10)]; }));
};
/**
* @returns {boolean} true if the read is paired, regardless of whether both segments are mapped
*/
}, {
key: "isPaired",
value: function isPaired() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FPAIRED);
}
BamRecord.prototype.isPaired = function () {
return !!(this.flags & constants_1.default.BAM_FPAIRED);
};
/** @returns {boolean} true if the read is paired, and both segments are mapped */
}, {
key: "isProperlyPaired",
value: function isProperlyPaired() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FPROPER_PAIR);
}
BamRecord.prototype.isProperlyPaired = function () {
return !!(this.flags & constants_1.default.BAM_FPROPER_PAIR);
};
/** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */
}, {
key: "isSegmentUnmapped",
value: function isSegmentUnmapped() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FUNMAP);
}
BamRecord.prototype.isSegmentUnmapped = function () {
return !!(this.flags & constants_1.default.BAM_FUNMAP);
};
/** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */
}, {
key: "isMateUnmapped",
value: function isMateUnmapped() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FMUNMAP);
}
BamRecord.prototype.isMateUnmapped = function () {
return !!(this.flags & constants_1.default.BAM_FMUNMAP);
};
/** @returns {boolean} true if the read is mapped to the reverse strand */
}, {
key: "isReverseComplemented",
value: function isReverseComplemented() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FREVERSE);
}
BamRecord.prototype.isReverseComplemented = function () {
return !!(this.flags & constants_1.default.BAM_FREVERSE);
};
/** @returns {boolean} true if the mate is mapped to the reverse strand */
}, {
key: "isMateReverseComplemented",
value: function isMateReverseComplemented() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FMREVERSE);
}
BamRecord.prototype.isMateReverseComplemented = function () {
return !!(this.flags & constants_1.default.BAM_FMREVERSE);
};
/** @returns {boolean} true if this is read number 1 in a pair */
}, {
key: "isRead1",
value: function isRead1() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FREAD1);
}
BamRecord.prototype.isRead1 = function () {
return !!(this.flags & constants_1.default.BAM_FREAD1);
};
/** @returns {boolean} true if this is read number 2 in a pair */
}, {
key: "isRead2",
value: function isRead2() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FREAD2);
}
BamRecord.prototype.isRead2 = function () {
return !!(this.flags & constants_1.default.BAM_FREAD2);
};
/** @returns {boolean} true if this is a secondary alignment */
}, {
key: "isSecondary",
value: function isSecondary() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FSECONDARY);
}
BamRecord.prototype.isSecondary = function () {
return !!(this.flags & constants_1.default.BAM_FSECONDARY);
};
/** @returns {boolean} true if this read has failed QC checks */
}, {
key: "isFailedQc",
value: function isFailedQc() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FQCFAIL);
}
BamRecord.prototype.isFailedQc = function () {
return !!(this.flags & constants_1.default.BAM_FQCFAIL);
};
/** @returns {boolean} true if the read is an optical or PCR duplicate */
}, {
key: "isDuplicate",
value: function isDuplicate() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FDUP);
}
BamRecord.prototype.isDuplicate = function () {
return !!(this.flags & constants_1.default.BAM_FDUP);
};
/** @returns {boolean} true if this is a supplementary alignment */
}, {
key: "isSupplementary",
value: function isSupplementary() {
return !!((0, _flags2.default)(this) & _constants.default.BAM_FSUPPLEMENTARY);
}
}, {
key: "cigar",
value: function cigar() {
if (this.isSegmentUnmapped()) {
return undefined;
}
var _this$bytes2 = this.bytes,
byteArray = _this$bytes2.byteArray,
start = _this$bytes2.start;
var numCigarOps = this.get('_n_cigar_op');
var p = start + 36 + this.get('_l_read_name');
var seqLen = this.get('seq_length');
var cigar = '';
var lref = 0; // check for CG tag by inspecting whether the CIGAR field
// contains a clip that consumes entire seqLen
var cigop = byteArray.readInt32LE(p);
var lop = cigop >> 4;
var op = CIGAR_DECODER[cigop & 0xf];
if (op === 'S' && lop === seqLen) {
// if there is a CG the second CIGAR field will
// be a N tag the represents the length on ref
p += 4;
cigop = byteArray.readInt32LE(p);
lop = cigop >> 4;
op = CIGAR_DECODER[cigop & 0xf];
if (op !== 'N') {
console.warn('CG tag with no N tag');
BamRecord.prototype.isSupplementary = function () {
return !!(this.flags & constants_1.default.BAM_FSUPPLEMENTARY);
};
BamRecord.prototype.cigar = function () {
if (this.isSegmentUnmapped()) {
return undefined;
}
this.data.length_on_ref = lop;
return this.get('CG');
} else {
for (var c = 0; c < numCigarOps; ++c) {
cigop = byteArray.readInt32LE(p);
lop = cigop >> 4;
op = CIGAR_DECODER[cigop & 0xf];
cigar += lop + op; // soft clip, hard clip, and insertion don't count toward
// the length on the reference
if (op !== 'H' && op !== 'S' && op !== 'I') {
lref += lop;
}
p += 4;
var _a = this.bytes, byteArray = _a.byteArray, start = _a.start;
var numCigarOps = this.get('_n_cigar_op');
var p = start + 36 + this.get('_l_read_name');
var seqLen = this.get('seq_length');
var cigar = '';
var lref = 0;
// check for CG tag by inspecting whether the CIGAR field
// contains a clip that consumes entire seqLen
var cigop = byteArray.readInt32LE(p);
var lop = cigop >> 4;
var op = CIGAR_DECODER[cigop & 0xf];
if (op === 'S' && lop === seqLen) {
// if there is a CG the second CIGAR field will
// be a N tag the represents the length on ref
p += 4;
cigop = byteArray.readInt32LE(p);
lop = cigop >> 4;
op = CIGAR_DECODER[cigop & 0xf];
if (op !== 'N') {
console.warn('CG tag with no N tag');
}
this.data.length_on_ref = lop;
return this.get('CG');
}
this.data.length_on_ref = lref;
return cigar;
}
}
}, {
key: "_flags",
value: function _flags() {}
}, {
key: "length_on_ref",
value: function length_on_ref() {
this.get('cigar'); // the length_on_ref is set as a
// side effect of the CIGAR parsing
return this.data.length_on_ref;
}
}, {
key: "_n_cigar_op",
value: function _n_cigar_op() {
return this.get('_flag_nc') & 0xffff;
}
}, {
key: "_l_read_name",
value: function _l_read_name() {
return this.get('_bin_mq_nl') & 0xff;
}
else {
for (var c = 0; c < numCigarOps; ++c) {
cigop = byteArray.readInt32LE(p);
lop = cigop >> 4;
op = CIGAR_DECODER[cigop & 0xf];
cigar += lop + op;
// soft clip, hard clip, and insertion don't count toward
// the length on the reference
if (op !== 'H' && op !== 'S' && op !== 'I') {
lref += lop;
}
p += 4;
}
this.data.length_on_ref = lref;
return cigar;
}
};
BamRecord.prototype._flags = function () { };
BamRecord.prototype.length_on_ref = function () {
this.get('cigar'); // the length_on_ref is set as a
// side effect of the CIGAR parsing
return this.data.length_on_ref;
};
BamRecord.prototype._n_cigar_op = function () {
return this.get('_flag_nc') & 0xffff;
};
BamRecord.prototype._l_read_name = function () {
return this.get('_bin_mq_nl') & 0xff;
};
/**
* number of bytes in the sequence field
*/
}, {
key: "_seq_bytes",
value: function _seq_bytes() {
return this.get('seq_length') + 1 >> 1;
}
}, {
key: "getReadBases",
value: function getReadBases() {
return this.seq();
}
}, {
key: "seq",
value: function seq() {
var byteArray = this.bytes.byteArray;
var p = this.bytes.start + 36 + this.get('_l_read_name') + this.get('_n_cigar_op') * 4;
var seqBytes = this.get('_seq_bytes');
var len = this.get('seq_length');
var buf = '';
var i = 0;
for (var j = 0; j < seqBytes; ++j) {
var sb = byteArray[p + j];
buf += String.fromCharCode(SEQRET_DECODER[(sb & 0xf0) >> 4]);
i++;
if (i < len) {
buf += String.fromCharCode(SEQRET_DECODER[sb & 0x0f]);
i++;
BamRecord.prototype._seq_bytes = function () {
return (this.get('seq_length') + 1) >> 1;
};
BamRecord.prototype.getReadBases = function () {
return this.seq();
};
BamRecord.prototype.seq = function () {
var byteArray = this.bytes.byteArray;
var p = this.bytes.start +
36 +
this.get('_l_read_name') +
this.get('_n_cigar_op') * 4;
var seqBytes = this.get('_seq_bytes');
var len = this.get('seq_length');
var buf = '';
var i = 0;
for (var j = 0; j < seqBytes; ++j) {
var sb = byteArray[p + j];
buf += String.fromCharCode(SEQRET_DECODER[(sb & 0xf0) >> 4]);
i++;
if (i < len) {
buf += String.fromCharCode(SEQRET_DECODER[sb & 0x0f]);
i++;
}
}
}
return buf;
} // adapted from igv.js
}, {
key: "getPairOrientation",
value: function getPairOrientation() {
if (!this.isSegmentUnmapped() && !this.isMateUnmapped() && this._refID === this._next_refid()) {
var s1 = this.isReverseComplemented() ? 'R' : 'F';
var s2 = this.isMateReverseComplemented() ? 'R' : 'F';
var o1 = ' ';
var o2 = ' ';
if (this.isRead1()) {
o1 = '1';
o2 = '2';
} else if (this.isRead2()) {
o1 = '2';
o2 = '1';
return buf;
};
// adapted from igv.js
BamRecord.prototype.getPairOrientation = function () {
if (!this.isSegmentUnmapped() &&
!this.isMateUnmapped() &&
this._refID === this._next_refid()) {
var s1 = this.isReverseComplemented() ? 'R' : 'F';
var s2 = this.isMateReverseComplemented() ? 'R' : 'F';
var o1 = ' ';
var o2 = ' ';
if (this.isRead1()) {
o1 = '1';
o2 = '2';
}
else if (this.isRead2()) {
o1 = '2';
o2 = '1';
}
var tmp = [];
var isize = this.template_length();
if (isize > 0) {
tmp[0] = s1;
tmp[1] = o1;
tmp[2] = s2;
tmp[3] = o2;
}
else {
tmp[2] = s1;
tmp[3] = o1;
tmp[0] = s2;
tmp[1] = o2;
}
return tmp.join('');
}
var tmp = [];
var isize = this.template_length();
if (isize > 0) {
tmp[0] = s1;
tmp[1] = o1;
tmp[2] = s2;
tmp[3] = o2;
} else {
tmp[2] = s1;
tmp[3] = o1;
tmp[0] = s2;
tmp[1] = o2;
}
return tmp.join('');
}
return null;
}
}, {
key: "_bin_mq_nl",
value: function _bin_mq_nl() {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 12);
}
}, {
key: "_flag_nc",
value: function _flag_nc() {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 16);
}
}, {
key: "seq_length",
value: function seq_length() {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 20);
}
}, {
key: "_next_refid",
value: function _next_refid() {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 24);
}
}, {
key: "_next_pos",
value: function _next_pos() {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 28);
}
}, {
key: "template_length",
value: function template_length() {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 32);
}
}, {
key: "toJSON",
value: function toJSON() {
var _context4,
_this2 = this;
var data = {};
(0, _forEach.default)(_context4 = (0, _keys.default)(this)).call(_context4, function (k) {
if (k.charAt(0) === '_' || k === 'bytes') {
return;
} //@ts-ignore
data[k] = _this2[k];
});
return data;
}
}]);
return BamRecord;
}();
return null;
};
BamRecord.prototype._bin_mq_nl = function () {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 12);
};
BamRecord.prototype._flag_nc = function () {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 16);
};
BamRecord.prototype.seq_length = function () {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 20);
};
BamRecord.prototype._next_refid = function () {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 24);
};
BamRecord.prototype._next_pos = function () {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 28);
};
BamRecord.prototype.template_length = function () {
return this.bytes.byteArray.readInt32LE(this.bytes.start + 32);
};
BamRecord.prototype.toJSON = function () {
var _this = this;
var data = {};
Object.keys(this).forEach(function (k) {
if (k.charAt(0) === '_' || k === 'bytes') {
return;
}
//@ts-ignore
data[k] = _this[k];
});
return data;
};
return BamRecord;
}());
exports.default = BamRecord;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWNvcmQudHMiXSwibmFtZXMiOlsiU0VRUkVUX0RFQ09ERVIiLCJzcGxpdCIsInMiLCJjaGFyQ29kZUF0IiwiQ0lHQVJfREVDT0RFUiIsIkJhbVJlY29yZCIsImFyZ3MiLCJ1bmRlZmluZWQiLCJkYXRhIiwiYnl0ZXMiLCJzdGFydCIsImVuZCIsImJ5dGVBcnJheSIsIl9pZCIsImZpbGVPZmZzZXQiLCJfcmVmSUQiLCJyZWFkSW50MzJMRSIsImZsYWdzIiwiZmllbGQiLCJfZ2V0IiwidG9Mb3dlckNhc2UiLCJnZXQiLCJfcGFyc2VUYWciLCJfcGFyc2VBbGxUYWdzIiwidGFncyIsImlzU2VnbWVudFVubWFwcGVkIiwicHVzaCIsImlzUGFpcmVkIiwiX3RhZ0xpc3QiLCJrIiwic2VlbiIsInQiLCJsdCIsIm1xIiwicXVhbFJhdyIsImpvaW4iLCJwIiwibHNlcSIsInFzZXEiLCJCdWZmZXIiLCJhbGxvY1Vuc2FmZSIsImoiLCJpc1JldmVyc2VDb21wbGVtZW50ZWQiLCJpc01hdGVVbm1hcHBlZCIsImlzTWF0ZVJldmVyc2VDb21wbGVtZW50ZWQiLCJubCIsInRvU3RyaW5nIiwidGFnTmFtZSIsIl9hbGxUYWdzUGFyc2VkIiwiX3RhZ09mZnNldCIsImJsb2NrRW5kIiwibGNUYWciLCJ0YWciLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ0eXBlIiwidmFsdWUiLCJyZWFkVUludDMyTEUiLCJyZWFkSW50OCIsInJlYWRVSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZFVJbnQxNkxFIiwicmVhZEZsb2F0TEUiLCJjYyIsIkJ0eXBlIiwibGltaXQiLCJjaWdvcCIsImxvcCIsIm9wIiwiY29uc29sZSIsIndhcm4iLCJjaWdhciIsIm1hdGNoIiwidG9VcHBlckNhc2UiLCJDb25zdGFudHMiLCJCQU1fRlBBSVJFRCIsIkJBTV9GUFJPUEVSX1BBSVIiLCJCQU1fRlVOTUFQIiwiQkFNX0ZNVU5NQVAiLCJCQU1fRlJFVkVSU0UiLCJCQU1fRk1SRVZFUlNFIiwiQkFNX0ZSRUFEMSIsIkJBTV9GUkVBRDIiLCJCQU1fRlNFQ09OREFSWSIsIkJBTV9GUUNGQUlMIiwiQkFNX0ZEVVAiLCJCQU1fRlNVUFBMRU1FTlRBUlkiLCJudW1DaWdhck9wcyIsInNlcUxlbiIsImxyZWYiLCJsZW5ndGhfb25fcmVmIiwiYyIsInNlcSIsInNlcUJ5dGVzIiwibGVuIiwiYnVmIiwiaSIsInNiIiwiX25leHRfcmVmaWQiLCJzMSIsInMyIiwibzEiLCJvMiIsImlzUmVhZDEiLCJpc1JlYWQyIiwidG1wIiwiaXNpemUiLCJ0ZW1wbGF0ZV9sZW5ndGgiLCJjaGFyQXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7Ozs7QUFFQSxJQUFNQSxjQUFjLEdBQUcsZ0RBQW1CQyxLQUFuQixDQUF5QixFQUF6QixrQkFBaUMsVUFBQUMsQ0FBQztBQUFBLFNBQUlBLENBQUMsQ0FBQ0MsVUFBRixDQUFhLENBQWIsQ0FBSjtBQUFBLENBQWxDLENBQXZCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLG1CQUFtQkgsS0FBbkIsQ0FBeUIsRUFBekIsQ0FBdEI7QUFFQTs7OztJQUdxQkksUztBQVNuQixxQkFBWUMsSUFBWixFQUF1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHNEQUhrQkMsU0FHbEI7QUFBQSxvREFGTSxFQUVOO0FBQUEsMERBREUsS0FDRjtBQUNyQixTQUFLQyxJQUFMLEdBQVksRUFBWjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNYQyxNQUFBQSxLQUFLLEVBQUVKLElBQUksQ0FBQ0csS0FBTCxDQUFXQyxLQURQO0FBRVhDLE1BQUFBLEdBQUcsRUFBRUwsSUFBSSxDQUFDRyxLQUFMLENBQVdFLEdBRkw7QUFHWEMsTUFBQUEsU0FBUyxFQUFFTixJQUFJLENBQUNHLEtBQUwsQ0FBV0c7QUFIWCxLQUFiO0FBS0EsU0FBS0MsR0FBTCxHQUFXUCxJQUFJLENBQUNRLFVBQWhCO0FBUHFCLHNCQVFRLEtBQUtMLEtBUmI7QUFBQSxRQVFiQyxL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aXB0LWVzbGludC9jYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xuaW1wb3J0IENvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cydcblxuY29uc3QgU0VRUkVUX0RFQ09ERVIgPSAnPUFDTUdSU1ZUV1lIS0RCTicuc3BsaXQoJycpLm1hcChzID0+IHMuY2hhckNvZGVBdCgwKSlcbmNvbnN0IENJR0FSX0RFQ09ERVIgPSAnTUlETlNIUD1YPz8/Pz8/Pycuc3BsaXQoJycpXG5cbi8qKlxuICogQ2xhc3Mgb2YgZWFjaCBCQU0gcmVjb3JkIHJldHVybmVkIGJ5IHRoaXMgQVBJLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYW1SZWNvcmQge1xuICBwcml2YXRlIGRhdGE6IGFueVxuICBwcml2YXRlIGJ5dGVzOiBhbnlcbiAgcHJpdmF0ZSBmbGFnczogYW55XG4gIHByaXZhdGUgX2lkOiBudW1iZXJcbiAgcHJpdmF0ZSBfcmVmSUQ6IG51bWJlclxuICBwcml2YXRlIF90YWdPZmZzZXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBwcml2YXRlIF90YWdMaXN0OiBzdHJpbmdbXSA9IFtdXG4gIHByaXZhdGUgX2FsbFRhZ3NQYXJzZWQgPSBmYWxzZVxuICBjb25zdHJ1Y3RvcihhcmdzOiBhbnkpIHtcbiAgICB0aGlzLmRhdGEgPSB7fVxuICAgIHRoaXMuYnl0ZXMgPSB7XG4gICAgICBzdGFydDogYXJncy5ieXRlcy5zdGFydCxcbiAgICAgIGVuZDogYXJncy5ieXRlcy5lbmQsXG4gICAgICBieXRlQXJyYXk6IGFyZ3MuYnl0ZXMuYnl0ZUFycmF5LFxuICAgIH1cbiAgICB0aGlzLl9pZCA9IGFyZ3MuZmlsZU9mZnNldFxuICAgIGNvbnN0IHsgc3RhcnQsIGJ5dGVBcnJheSB9ID0gdGhpcy5ieXRlc1xuICAgIHRoaXMuX3JlZklEID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHN0YXJ0ICsgNClcbiAgICB0aGlzLmRhdGEuc3RhcnQgPSBieXRlQXJyYXkucmVhZEludDMyTEUoc3RhcnQgKyA4KVxuICAgIHRoaXMuZmxhZ3MgPSAoYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHN0YXJ0ICsgMTYpICYgMHhmZmZmMDAwMCkgPj4gMTZcbiAgfVxuXG4gIGdldChmaWVsZDogc3RyaW5nKSB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgaWYgKHRoaXNbZmllbGRdKSB7XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdXG4gICAgICB9XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIHRoaXMuZGF0YVtmaWVsZF0gPSB0aGlzW2ZpZWxkXSgpXG4gICAgICByZXR1cm4gdGhpcy5kYXRhW2ZpZWxkXVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZ2V0KGZpZWxkLnRvTG93ZXJDYXNlKCkpXG4gIH1cblxuICBlbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzdGFydCcpICsgKHRoaXMuZ2V0KCdsZW5ndGhfb25fcmVmJykgfHwgdGhpcy5nZXQoJ3NlcV9sZW5ndGgnKSB8fCB1bmRlZmluZWQpXG4gIH1cblxuICBzZXFfaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZklEXG4gIH1cblxuICAvLyBzYW1lIGFzIGdldCgpLCBleGNlcHQgcmVxdWlyZXMgbG93ZXItY2FzZSBhcmd1bWVudHMuICB1c2VkXG4gIC8vIGludGVybmFsbHkgdG8gc2F2ZSBsb3RzIG9mIGNhbGxzIHRvIGZpZWxkLnRvTG93ZXJDYXNlKClcbiAgX2dldChmaWVsZDogc3RyaW5nKSB7XG4gICAgaWYgKGZpZWxkIGluIHRoaXMuZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVtmaWVsZF1cbiAgICB9XG4gICAgdGhpcy5kYXRhW2ZpZWxkXSA9IHRoaXMuX3BhcnNlVGFnKGZpZWxkKVxuICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdXG4gIH1cblxuICBfdGFncygpIHtcbiAgICB0aGlzLl9wYXJzZUFsbFRhZ3MoKVxuXG4gICAgbGV0IHRhZ3MgPSBbJ3NlcSddXG5cbiAgICBpZiAoIXRoaXMuaXNTZWdtZW50VW5tYXBwZWQoKSkge1xuICAgICAgdGFncy5wdXNoKFxuICAgICAgICAnc3RhcnQnLFxuICAgICAgICAnZW5kJyxcbiAgICAgICAgJ3N0cmFuZCcsXG4gICAgICAgICdzY29yZScsXG4gICAgICAgICdxdWFsJyxcbiAgICAgICAgJ01RJyxcbiAgICAgICAgJ0NJR0FSJyxcbiAgICAgICAgJ2xlbmd0aF9vbl9yZWYnLFxuICAgICAgICAndGVtcGxhdGVfbGVuZ3RoJyxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNQYWlyZWQoKSkge1xuICAgICAgdGFncy5wdXNoKCduZXh0X3NlZ21lbnRfcG9zaXRpb24nLCAncGFpcl9vcmllbnRhdGlvbicpXG4gICAgfVxuICAgIHRhZ3MgPSB0YWdzLmNvbmNhdCh0aGlzLl90YWdMaXN0IHx8IFtdKVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5kYXRhKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGtbMF0gIT09ICdfJyAmJiBrICE9PSAnbmV4dF9zZXFfaWQnKSB7XG4gICAgICAgIHRhZ3MucHVzaChrKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBzZWVuOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XG4gICAgdGFncyA9IHRhZ3MuZmlsdGVyKHQgPT4ge1xuICAgICAgaWYgKCh0IGluIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGFbdF0gPT09IHVuZGVmaW5lZCkgfHwgdCA9PT0gJ0NHJyB8fCB0ID09PSAnY2cnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsdCA9IHQudG9Mb3dlckNhc2UoKVxuICAgICAgY29uc3QgcyA9IHNlZW5bbHRdXG4gICAgICBzZWVuW2x0XSA9IHRydWVcbiAgICAgIHJldHVybiAhc1xuICAgIH0pXG5cbiAgICByZXR1cm4gdGFnc1xuICB9XG5cbiAgcGFyZW50KCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGNoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLmdldCgnc3ViZmVhdHVyZXMnKVxuICB9XG5cbiAgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkXG4gIH1cblxuICAvLyBzcGVjaWFsIHBhcnNlcnNcbiAgLyoqXG4gICAqIE1hcHBpbmcgcXVhbGl0eSBzY29yZS5cbiAgICovXG4gIG1xKCkge1xuICAgIGNvbnN0IG1xID0gKHRoaXMuZ2V0KCdfYmluX21xX25sJykgJiAweGZmMDApID4+IDhcbiAgICByZXR1cm4gbXEgPT09IDI1NSA/IHVuZGVmaW5lZCA6IG1xXG4gIH1cblxuICBzY29yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ21xJylcbiAgfVxuXG4gIHF1YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVhbFJhdygpPy5qb2luKCcgJylcbiAgfVxuXG4gIHF1YWxSYXcoKSB7XG4gICAgaWYgKHRoaXMuaXNTZWdtZW50VW5tYXBwZWQoKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYnl0ZUFycmF5IH0gPSB0aGlzLmJ5dGVzXG4gICAgY29uc3QgcCA9XG4gICAgICB0aGlzLmJ5dGVzLnN0YXJ0ICtcbiAgICAgIDM2ICtcbiAgICAgIHRoaXMuZ2V0KCdfbF9yZWFkX25hbWUnKSArXG4gICAgICB0aGlzLmdldCgnX25fY2lnYXJfb3AnKSAqIDQgK1xuICAgICAgdGhpcy5nZXQoJ19zZXFfYnl0ZXMnKVxuICAgIGNvbnN0IGxzZXEgPSB0aGlzLmdldCgnc2VxX2xlbmd0aCcpXG4gICAgY29uc3QgcXNlcSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsc2VxKVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbHNlcTsgKytqKSB7XG4gICAgICBxc2VxW2pdID0gYnl0ZUFycmF5W3AgKyBqXVxuICAgIH1cbiAgICByZXR1cm4gcXNlcVxuICB9XG5cbiAgc3RyYW5kKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpID8gLTEgOiAxXG4gIH1cblxuICBtdWx0aV9zZWdtZW50X25leHRfc2VnbWVudF9zdHJhbmQoKSB7XG4gICAgaWYgKHRoaXMuaXNNYXRlVW5tYXBwZWQoKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pc01hdGVSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAtMSA6IDFcbiAgfVxuXG4gIG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdfcmVhZF9uYW1lJylcbiAgfVxuXG4gIF9yZWFkX25hbWUoKSB7XG4gICAgY29uc3QgbmwgPSB0aGlzLmdldCgnX2xfcmVhZF9uYW1lJylcbiAgICByZXR1cm4gdGhpcy5ieXRlcy5ieXRlQXJyYXkudG9TdHJpbmcoXG4gICAgICAnYXNjaWknLFxuICAgICAgdGhpcy5ieXRlcy5zdGFydCArIDM2LFxuICAgICAgdGhpcy5ieXRlcy5zdGFydCArIDM2ICsgbmwgLSAxLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIGEgdGFnLCBwYXJzaW5nIHRoZSB0YWdzIGFzIGZhciBhcyBuZWNlc3NhcnkuXG4gICAqIE9ubHkgY2FsbGVkIGlmIHdlIGhhdmUgbm90IGFscmVhZHkgcGFyc2VkIHRoYXQgZmllbGQuXG4gICAqL1xuICBfcGFyc2VUYWcodGFnTmFtZT86IHN0cmluZykge1xuICAgIC8vIGlmIGFsbCBvZiB0aGUgdGFncyBoYXZlIGJlZW4gcGFyc2VkIGFuZCB3ZSdyZSBzdGlsbCBiZWluZ1xuICAgIC8vIGNhbGxlZCwgd2UgYWxyZWFkeSBrbm93IHRoYXQgd2UgaGF2ZSBubyBzdWNoIHRhZywgYmVjYXVzZVxuICAgIC8vIGl0IHdvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGNhY2hlZC5cbiAgICBpZiAodGhpcy5fYWxsVGFnc1BhcnNlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYnl0ZUFycmF5IH0gPSB0aGlzLmJ5dGVzXG4gICAgbGV0IHAgPVxuICAgICAgdGhpcy5fdGFnT2Zmc2V0IHx8XG4gICAgICB0aGlzLmJ5dGVzLnN0YXJ0ICtcbiAgICAgICAgMzYgK1xuICAgICAgICB0aGlzLmdldCgnX2xfcmVhZF9uYW1lJykgK1xuICAgICAgICB0aGlzLmdldCgnX25fY2lnYXJfb3AnKSAqIDQgK1xuICAgICAgICB0aGlzLmdldCgnX3NlcV9ieXRlcycpICtcbiAgICAgICAgdGhpcy5nZXQoJ3NlcV9sZW5ndGgnKVxuXG4gICAgY29uc3QgYmxvY2tFbmQgPSB0aGlzLmJ5dGVzLmVuZFxuICAgIGxldCBsY1RhZ1xuICAgIHdoaWxlIChwIDwgYmxvY2tFbmQgJiYgbGNUYWcgIT09IHRhZ05hbWUpIHtcbiAgICAgIGNvbnN0IHRhZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZUFycmF5W3BdLCBieXRlQXJyYXlbcCArIDFdKVxuICAgICAgbGNUYWcgPSB0YWcudG9Mb3dlckNhc2UoKVxuICAgICAgY29uc3QgdHlwZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZUFycmF5W3AgKyAyXSlcbiAgICAgIHAgKz0gM1xuXG4gICAgICBsZXQgdmFsdWVcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICB2YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZUFycmF5W3BdKVxuICAgICAgICAgIHAgKz0gMVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2knOlxuICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHApXG4gICAgICAgICAgcCArPSA0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnSSc6XG4gICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZFVJbnQzMkxFKHApXG4gICAgICAgICAgcCArPSA0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZEludDgocClcbiAgICAgICAgICBwICs9IDFcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkVUludDgocClcbiAgICAgICAgICBwICs9IDFcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkSW50MTZMRShwKVxuICAgICAgICAgIHAgKz0gMlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ1MnOlxuICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRVSW50MTZMRShwKVxuICAgICAgICAgIHAgKz0gMlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRGbG9hdExFKHApXG4gICAgICAgICAgcCArPSA0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnWic6XG4gICAgICAgIGNhc2UgJ0gnOlxuICAgICAgICAgIHZhbHVlID0gJydcbiAgICAgICAgICB3aGlsZSAocCA8PSBibG9ja0VuZCkge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBieXRlQXJyYXlbcCsrXVxuICAgICAgICAgICAgaWYgKGNjID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNjKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdCJzoge1xuICAgICAgICAgIHZhbHVlID0gJydcbiAgICAgICAgICBjb25zdCBjYyA9IGJ5dGVBcnJheVtwKytdXG4gICAgICAgICAgY29uc3QgQnR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNjKVxuICAgICAgICAgIGNvbnN0IGxpbWl0ID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHApXG4gICAgICAgICAgcCArPSA0XG4gICAgICAgICAgaWYgKEJ0eXBlID09PSAnaScpIHtcbiAgICAgICAgICAgIGlmICh0YWcgPT09ICdDRycpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2lnb3AgPSBieXRlQXJyYXkucmVhZEludDMyTEUocClcbiAgICAgICAgICAgICAgICBjb25zdCBsb3AgPSBjaWdvcCA+PiA0XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSBDSUdBUl9ERUNPREVSW2NpZ29wICYgMHhmXVxuICAgICAgICAgICAgICAgIHZhbHVlICs9IGxvcCArIG9wXG4gICAgICAgICAgICAgICAgcCArPSA0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKVxuICAgICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSArPSAnLCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCArPSA0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEJ0eXBlID09PSAnSScpIHtcbiAgICAgICAgICAgIGlmICh0YWcgPT09ICdDRycpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2lnb3AgPSBieXRlQXJyYXkucmVhZFVJbnQzMkxFKHApXG4gICAgICAgICAgICAgICAgY29uc3QgbG9wID0gY2lnb3AgPj4gNFxuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDB4Zl1cbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBsb3AgKyBvcFxuICAgICAgICAgICAgICAgIHAgKz0gNFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZFVJbnQzMkxFKHApXG4gICAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICcsJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwICs9IDRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQnR5cGUgPT09ICdzJykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7XG4gICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkSW50MTZMRShwKVxuICAgICAgICAgICAgICBpZiAoayArIDEgPCBsaW1pdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlICs9ICcsJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHAgKz0gMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQnR5cGUgPT09ICdTJykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7XG4gICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkVUludDE2TEUocClcbiAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnLCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwICs9IDJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEJ0eXBlID09PSAnYycpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykge1xuICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZEludDgocClcbiAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSAnLCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwICs9IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEJ0eXBlID09PSAnQycpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykge1xuICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZFVJbnQ4KHApXG4gICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJywnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcCArPSAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChCdHlwZSA9PT0gJ2YnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHtcbiAgICAgICAgICAgICAgdmFsdWUgKz0gYnl0ZUFycmF5LnJlYWRGbG9hdExFKHApXG4gICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gJywnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcCArPSA0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gQkFNIHRhZyB0eXBlICcke3R5cGV9JywgdGFncyBtYXkgYmUgaW5jb21wbGV0ZWApXG4gICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWRcbiAgICAgICAgICBwID0gYmxvY2tFbmQgLy8gc3RvcCBwYXJzaW5nIHRhZ3NcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdGFnT2Zmc2V0ID0gcFxuXG4gICAgICB0aGlzLl90YWdMaXN0LnB1c2godGFnKVxuICAgICAgaWYgKGxjVGFnID09PSB0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGFbbGNUYWddID0gdmFsdWVcbiAgICB9XG4gICAgdGhpcy5fYWxsVGFnc1BhcnNlZCA9IHRydWVcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBfcGFyc2VBbGxUYWdzKCkge1xuICAgIHRoaXMuX3BhcnNlVGFnKCcnKVxuICB9XG5cbiAgX3BhcnNlQ2lnYXIoY2lnYXI6IHN0cmluZykge1xuICAgIHJldHVybiAoXG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGNpZ2FyLm1hdGNoKC9cXGQrXFxEL2cpLm1hcCgob3A6IHN0cmluZykgPT4gW29wLm1hdGNoKC9cXEQvKVswXS50b1VwcGVyQ2FzZSgpLCBwYXJzZUludChvcCwgMTApXSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHJlYWQgaXMgcGFpcmVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYm90aCBzZWdtZW50cyBhcmUgbWFwcGVkXG4gICAqL1xuICBpc1BhaXJlZCgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlBBSVJFRClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVhZCBpcyBwYWlyZWQsIGFuZCBib3RoIHNlZ21lbnRzIGFyZSBtYXBwZWQgKi9cbiAgaXNQcm9wZXJseVBhaXJlZCgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlBST1BFUl9QQUlSKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSByZWFkIGl0c2VsZiBpcyB1bm1hcHBlZDsgY29uZmxpY3RpdmUgd2l0aCBpc1Byb3Blcmx5UGFpcmVkICovXG4gIGlzU2VnbWVudFVubWFwcGVkKCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GVU5NQVApXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHJlYWQgaXRzZWxmIGlzIHVubWFwcGVkOyBjb25mbGljdGl2ZSB3aXRoIGlzUHJvcGVybHlQYWlyZWQgKi9cbiAgaXNNYXRlVW5tYXBwZWQoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBDb25zdGFudHMuQkFNX0ZNVU5NQVApXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHJlYWQgaXMgbWFwcGVkIHRvIHRoZSByZXZlcnNlIHN0cmFuZCAqL1xuICBpc1JldmVyc2VDb21wbGVtZW50ZWQoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBDb25zdGFudHMuQkFNX0ZSRVZFUlNFKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBtYXRlIGlzIG1hcHBlZCB0byB0aGUgcmV2ZXJzZSBzdHJhbmQgKi9cbiAgaXNNYXRlUmV2ZXJzZUNvbXBsZW1lbnRlZCgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRk1SRVZFUlNFKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgaXMgcmVhZCBudW1iZXIgMSBpbiBhIHBhaXIgKi9cbiAgaXNSZWFkMSgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlJFQUQxKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgaXMgcmVhZCBudW1iZXIgMiBpbiBhIHBhaXIgKi9cbiAgaXNSZWFkMigpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlJFQUQyKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgaXMgYSBzZWNvbmRhcnkgYWxpZ25tZW50ICovXG4gIGlzU2Vjb25kYXJ5KCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GU0VDT05EQVJZKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgcmVhZCBoYXMgZmFpbGVkIFFDIGNoZWNrcyAqL1xuICBpc0ZhaWxlZFFjKCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GUUNGQUlMKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSByZWFkIGlzIGFuIG9wdGljYWwgb3IgUENSIGR1cGxpY2F0ZSAqL1xuICBpc0R1cGxpY2F0ZSgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRkRVUClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGlzIGEgc3VwcGxlbWVudGFyeSBhbGlnbm1lbnQgKi9cbiAgaXNTdXBwbGVtZW50YXJ5KCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GU1VQUExFTUVOVEFSWSlcbiAgfVxuXG4gIGNpZ2FyKCkge1xuICAgIGlmICh0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB7IGJ5dGVBcnJheSwgc3RhcnQgfSA9IHRoaXMuYnl0ZXNcbiAgICBjb25zdCBudW1DaWdhck9wcyA9IHRoaXMuZ2V0KCdfbl9jaWdhcl9vcCcpXG4gICAgbGV0IHAgPSBzdGFydCArIDM2ICsgdGhpcy5nZXQoJ19sX3JlYWRfbmFtZScpXG4gICAgY29uc3Qgc2VxTGVuID0gdGhpcy5nZXQoJ3NlcV9sZW5ndGgnKVxuICAgIGxldCBjaWdhciA9ICcnXG4gICAgbGV0IGxyZWYgPSAwXG5cbiAgICAvLyBjaGVjayBmb3IgQ0cgdGFnIGJ5IGluc3BlY3Rpbmcgd2hldGhlciB0aGUgQ0lHQVIgZmllbGRcbiAgICAvLyBjb250YWlucyBhIGNsaXAgdGhhdCBjb25zdW1lcyBlbnRpcmUgc2VxTGVuXG4gICAgbGV0IGNpZ29wID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHApXG4gICAgbGV0IGxvcCA9IGNpZ29wID4+IDRcbiAgICBsZXQgb3AgPSBDSUdBUl9ERUNPREVSW2NpZ29wICYgMHhmXVxuICAgIGlmIChvcCA9PT0gJ1MnICYmIGxvcCA9PT0gc2VxTGVuKSB7XG4gICAgICAvLyBpZiB0aGVyZSBpcyBhIENHIHRoZSBzZWNvbmQgQ0lHQVIgZmllbGQgd2lsbFxuICAgICAgLy8gYmUgYSBOIHRhZyB0aGUgcmVwcmVzZW50cyB0aGUgbGVuZ3RoIG9uIHJlZlxuICAgICAgcCArPSA0XG4gICAgICBjaWdvcCA9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKVxuICAgICAgbG9wID0gY2lnb3AgPj4gNFxuICAgICAgb3AgPSBDSUdBUl9ERUNPREVSW2NpZ29wICYgMHhmXVxuICAgICAgaWYgKG9wICE9PSAnTicpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDRyB0YWcgd2l0aCBubyBOIHRhZycpXG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEubGVuZ3RoX29uX3JlZiA9IGxvcFxuICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdDRycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbnVtQ2lnYXJPcHM7ICsrYykge1xuICAgICAgICBjaWdvcCA9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKVxuICAgICAgICBsb3AgPSBjaWdvcCA+PiA0XG4gICAgICAgIG9wID0gQ0lHQVJfREVDT0RFUltjaWdvcCAmIDB4Zl1cbiAgICAgICAgY2lnYXIgKz0gbG9wICsgb3BcblxuICAgICAgICAvLyBzb2Z0IGNsaXAsIGhhcmQgY2xpcCwgYW5kIGluc2VydGlvbiBkb24ndCBjb3VudCB0b3dhcmRcbiAgICAgICAgLy8gdGhlIGxlbmd0aCBvbiB0aGUgcmVmZXJlbmNlXG4gICAgICAgIGlmIChvcCAhPT0gJ0gnICYmIG9wICE9PSAnUycgJiYgb3AgIT09ICdJJykge1xuICAgICAgICAgIGxyZWYgKz0gbG9wXG4gICAgICAgIH1cblxuICAgICAgICBwICs9IDRcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRhLmxlbmd0aF9vbl9yZWYgPSBscmVmXG4gICAgICByZXR1cm4gY2lnYXJcbiAgICB9XG4gIH1cblxuICBfZmxhZ3MoKSB7fVxuXG4gIGxlbmd0aF9vbl9yZWYoKSB7XG4gICAgdGhpcy5nZXQoJ2NpZ2FyJykgLy8gdGhlIGxlbmd0aF9vbl9yZWYgaXMgc2V0IGFzIGFcbiAgICAvLyBzaWRlIGVmZmVjdCBvZiB0aGUgQ0lHQVIgcGFyc2luZ1xuICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoX29uX3JlZlxuICB9XG5cbiAgX25fY2lnYXJfb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdfZmxhZ19uYycpICYgMHhmZmZmXG4gIH1cblxuICBfbF9yZWFkX25hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdfYmluX21xX25sJykgJiAweGZmXG4gIH1cblxuICAvKipcbiAgICogbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzZXF1ZW5jZSBmaWVsZFxuICAgKi9cbiAgX3NlcV9ieXRlcygpIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0KCdzZXFfbGVuZ3RoJykgKyAxKSA+PiAxXG4gIH1cblxuICBnZXRSZWFkQmFzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VxKClcbiAgfVxuXG4gIHNlcSgpIHtcbiAgICBjb25zdCB7IGJ5dGVBcnJheSB9ID0gdGhpcy5ieXRlc1xuICAgIGNvbnN0IHAgPSB0aGlzLmJ5dGVzLnN0YXJ0ICsgMzYgKyB0aGlzLmdldCgnX2xfcmVhZF9uYW1lJykgKyB0aGlzLmdldCgnX25fY2lnYXJfb3AnKSAqIDRcbiAgICBjb25zdCBzZXFCeXRlcyA9IHRoaXMuZ2V0KCdfc2VxX2J5dGVzJylcbiAgICBjb25zdCBsZW4gPSB0aGlzLmdldCgnc2VxX2xlbmd0aCcpXG4gICAgbGV0IGJ1ZiA9ICcnXG4gICAgbGV0IGkgPSAwXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZXFCeXRlczsgKytqKSB7XG4gICAgICBjb25zdCBzYiA9IGJ5dGVBcnJheVtwICsgal1cbiAgICAgIGJ1ZiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNFUVJFVF9ERUNPREVSWyhzYiAmIDB4ZjApID4+IDRdKVxuICAgICAgaSsrXG4gICAgICBpZiAoaSA8IGxlbikge1xuICAgICAgICBidWYgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShTRVFSRVRfREVDT0RFUltzYiAmIDB4MGZdKVxuICAgICAgICBpKytcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgLy8gYWRhcHRlZCBmcm9tIGlndi5qc1xuICBnZXRQYWlyT3JpZW50YXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkgJiYgIXRoaXMuaXNNYXRlVW5tYXBwZWQoKSAmJiB0aGlzLl9yZWZJRCA9PT0gdGhpcy5fbmV4dF9yZWZpZCgpKSB7XG4gICAgICBjb25zdCBzMSA9IHRoaXMuaXNSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAnUicgOiAnRidcbiAgICAgIGNvbnN0IHMyID0gdGhpcy5pc01hdGVSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAnUicgOiAnRidcbiAgICAgIGxldCBvMSA9ICcgJ1xuICAgICAgbGV0IG8yID0gJyAnXG4gICAgICBpZiAodGhpcy5pc1JlYWQxKCkpIHtcbiAgICAgICAgbzEgPSAnMSdcbiAgICAgICAgbzIgPSAnMidcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1JlYWQyKCkpIHtcbiAgICAgICAgbzEgPSAnMidcbiAgICAgICAgbzIgPSAnMSdcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG1wID0gW11cbiAgICAgIGNvbnN0IGlzaXplID0gdGhpcy50ZW1wbGF0ZV9sZW5ndGgoKVxuICAgICAgaWYgKGlzaXplID4gMCkge1xuICAgICAgICB0bXBbMF0gPSBzMVxuICAgICAgICB0bXBbMV0gPSBvMVxuICAgICAgICB0bXBbMl0gPSBzMlxuICAgICAgICB0bXBbM10gPSBvMlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG1wWzJdID0gczFcbiAgICAgICAgdG1wWzNdID0gbzFcbiAgICAgICAgdG1wWzBdID0gczJcbiAgICAgICAgdG1wWzFdID0gbzJcbiAgICAgIH1cbiAgICAgIHJldHVybiB0bXAuam9pbignJylcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIF9iaW5fbXFfbmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAxMilcbiAgfVxuXG4gIF9mbGFnX25jKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMTYpXG4gIH1cblxuICBzZXFfbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMjApXG4gIH1cblxuICBfbmV4dF9yZWZpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ieXRlcy5ieXRlQXJyYXkucmVhZEludDMyTEUodGhpcy5ieXRlcy5zdGFydCArIDI0KVxuICB9XG5cbiAgX25leHRfcG9zKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMjgpXG4gIH1cblxuICB0ZW1wbGF0ZV9sZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAzMilcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cbiAgICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsuY2hhckF0KDApID09PSAnXycgfHwgayA9PT0gJ2J5dGVzJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgZGF0YVtrXSA9IHRoaXNba11cbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIl19
//# sourceMappingURL=record.js.map
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.parseHeaderText = parseHeaderText;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
var _toArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toArray"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseHeaderText = void 0;
function parseHeaderText(text) {
var lines = text.split(/\r?\n/);
var data = [];
(0, _forEach.default)(lines).call(lines, function (line) {
var _line$split = line.split(/\t/),
_line$split2 = (0, _toArray2.default)(_line$split),
tag = _line$split2[0],
fields = (0, _slice.default)(_line$split2).call(_line$split2, 1);
var parsedFields = (0, _map.default)(fields).call(fields, function (f) {
var _f$split = f.split(':', 2),
_f$split2 = (0, _slicedToArray2.default)(_f$split, 2),
fieldTag = _f$split2[0],
value = _f$split2[1];
return {
tag: fieldTag,
value: value
};
var lines = text.split(/\r?\n/);
var data = [];
lines.forEach(function (line) {
var _a = line.split(/\t/), tag = _a[0], fields = _a.slice(1);
var parsedFields = fields.map(function (f) {
var _a = f.split(':', 2), fieldTag = _a[0], value = _a[1];
return { tag: fieldTag, value: value };
});
if (tag) {
data.push({ tag: tag.substr(1), data: parsedFields });
}
});
if (tag) {
data.push({
tag: tag.substr(1),
data: parsedFields
});
}
});
return data;
return data;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zYW0udHMiXSwibmFtZXMiOlsicGFyc2VIZWFkZXJUZXh0IiwidGV4dCIsImxpbmVzIiwic3BsaXQiLCJkYXRhIiwibGluZSIsInRhZyIsImZpZWxkcyIsInBhcnNlZEZpZWxkcyIsImYiLCJmaWVsZFRhZyIsInZhbHVlIiwicHVzaCIsInN1YnN0ciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLFNBQVNBLGVBQVQsQ0FBeUJDLElBQXpCLEVBQXVDO0FBQzVDLE1BQU1DLEtBQUssR0FBR0QsSUFBSSxDQUFDRSxLQUFMLENBQVcsT0FBWCxDQUFkO0FBQ0EsTUFBTUMsSUFBK0QsR0FBRyxFQUF4RTtBQUNBLHdCQUFBRixLQUFLLE1BQUwsQ0FBQUEsS0FBSyxFQUFTLFVBQUFHLElBQUksRUFBSTtBQUFBLHNCQUNLQSxJQUFJLENBQUNGLEtBQUwsQ0FBVyxJQUFYLENBREw7QUFBQTtBQUFBLFFBQ2JHLEdBRGE7QUFBQSxRQUNMQyxNQURLOztBQUVwQixRQUFNQyxZQUFZLEdBQUcsa0JBQUFELE1BQU0sTUFBTixDQUFBQSxNQUFNLEVBQUssVUFBQUUsQ0FBQyxFQUFJO0FBQUEscUJBQ1RBLENBQUMsQ0FBQ04sS0FBRixDQUFRLEdBQVIsRUFBYSxDQUFiLENBRFM7QUFBQTtBQUFBLFVBQzVCTyxRQUQ0QjtBQUFBLFVBQ2xCQyxLQURrQjs7QUFFbkMsYUFBTztBQUFFTCxRQUFBQSxHQUFHLEVBQUVJLFFBQVA7QUFBaUJDLFFBQUFBLEtBQUssRUFBTEE7QUFBakIsT0FBUDtBQUNELEtBSDBCLENBQTNCOztBQUlBLFFBQUlMLEdBQUosRUFBUztBQUNQRixNQUFBQSxJQUFJLENBQUNRLElBQUwsQ0FBVTtBQUFFTixRQUFBQSxHQUFHLEVBQUVBLEdBQUcsQ0FBQ08sTUFBSixDQUFXLENBQVgsQ0FBUDtBQUFzQlQsUUFBQUEsSUFBSSxFQUFFSTtBQUE1QixPQUFWO0FBQ0Q7QUFDRixHQVRJLENBQUw7QUFVQSxTQUFPSixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcGFyc2VIZWFkZXJUZXh0KHRleHQ6IHN0cmluZykge1xuICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoL1xccj9cXG4vKVxuICBjb25zdCBkYXRhOiB7IHRhZzogc3RyaW5nOyBkYXRhOiB7IHRhZzogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB9W10gPSBbXVxuICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xuICAgIGNvbnN0IFt0YWcsIC4uLmZpZWxkc10gPSBsaW5lLnNwbGl0KC9cXHQvKVxuICAgIGNvbnN0IHBhcnNlZEZpZWxkcyA9IGZpZWxkcy5tYXAoZiA9PiB7XG4gICAgICBjb25zdCBbZmllbGRUYWcsIHZhbHVlXSA9IGYuc3BsaXQoJzonLCAyKVxuICAgICAgcmV0dXJuIHsgdGFnOiBmaWVsZFRhZywgdmFsdWUgfVxuICAgIH0pXG4gICAgaWYgKHRhZykge1xuICAgICAgZGF0YS5wdXNoKHsgdGFnOiB0YWcuc3Vic3RyKDEpLCBkYXRhOiBwYXJzZWRGaWVsZHMgfSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiBkYXRhXG59XG4iXX0=
exports.parseHeaderText = parseHeaderText;
//# sourceMappingURL=sam.js.map

@@ -1,2 +0,1 @@

/// <reference types="long" />
import Chunk from './chunk';

@@ -3,0 +2,0 @@ import VirtualOffset from './virtualOffset';

"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.timeout = timeout;
exports.longToNumber = longToNumber;
exports.checkAbortSignal = checkAbortSignal;
exports.abortBreakPoint = abortBreakPoint;
exports.canMergeBlocks = canMergeBlocks;
exports.makeOpts = makeOpts;
exports.optimizeChunks = optimizeChunks;
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
var _minSafeInteger = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/number/min-safe-integer"));
var _maxSafeInteger = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/number/max-safe-integer"));
var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-timeout"));
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.optimizeChunks = exports.makeOpts = exports.canMergeBlocks = exports.abortBreakPoint = exports.checkAbortSignal = exports.longToNumber = exports.timeout = void 0;
function timeout(ms) {
return new _promise.default(function (resolve) {
return (0, _setTimeout2.default)(resolve, ms);
});
return new Promise(function (resolve) { return setTimeout(resolve, ms); });
}
exports.timeout = timeout;
function longToNumber(long) {
if (long.greaterThan(_maxSafeInteger.default) || long.lessThan(_minSafeInteger.default)) {
throw new Error('integer overflow');
}
return long.toNumber();
if (long.greaterThan(Number.MAX_SAFE_INTEGER) ||
long.lessThan(Number.MIN_SAFE_INTEGER)) {
throw new Error('integer overflow');
}
return long.toNumber();
}
exports.longToNumber = longToNumber;
/**

@@ -59,21 +63,20 @@ * Properly check if the given AbortSignal is aborted.

*/
function checkAbortSignal(signal) {
if (!signal) {
return;
}
if (signal.aborted) {
// console.log('bam aborted!')
if (typeof DOMException !== 'undefined') {
throw new DOMException('aborted', 'AbortError');
} else {
var e = new Error('aborted'); //@ts-ignore
e.code = 'ERR_ABORTED';
throw e;
if (!signal) {
return;
}
}
if (signal.aborted) {
// console.log('bam aborted!')
if (typeof DOMException !== 'undefined') {
throw new DOMException('aborted', 'AbortError');
}
else {
var e = new Error('aborted');
//@ts-ignore
e.code = 'ERR_ABORTED';
throw e;
}
}
}
exports.checkAbortSignal = checkAbortSignal;
/**

@@ -85,77 +88,63 @@ * Skips to the next tick, then runs `checkAbortSignal`.

*/
function abortBreakPoint(_x) {
return _abortBreakPoint.apply(this, arguments);
function abortBreakPoint(signal) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Promise.resolve()];
case 1:
_a.sent();
checkAbortSignal(signal);
return [2 /*return*/];
}
});
});
}
function _abortBreakPoint() {
_abortBreakPoint = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(signal) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return _promise.default.resolve();
case 2:
checkAbortSignal(signal);
case 3:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _abortBreakPoint.apply(this, arguments);
}
exports.abortBreakPoint = abortBreakPoint;
function canMergeBlocks(chunk1, chunk2) {
return chunk2.minv.blockPosition - chunk1.maxv.blockPosition < 65000 && chunk2.maxv.blockPosition - chunk1.minv.blockPosition < 5000000;
return (chunk2.minv.blockPosition - chunk1.maxv.blockPosition < 65000 &&
chunk2.maxv.blockPosition - chunk1.minv.blockPosition < 5000000);
}
function makeOpts() {
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return 'aborted' in obj ? {
signal: obj
} : obj;
exports.canMergeBlocks = canMergeBlocks;
function makeOpts(obj) {
if (obj === void 0) { obj = {}; }
return 'aborted' in obj ? { signal: obj } : obj;
}
exports.makeOpts = makeOpts;
function optimizeChunks(chunks, lowest) {
var mergedChunks = [];
var lastChunk = null;
if (chunks.length === 0) {
return chunks;
}
(0, _sort.default)(chunks).call(chunks, function (c0, c1) {
var dif = c0.minv.blockPosition - c1.minv.blockPosition;
if (dif !== 0) {
return dif;
} else {
return c0.minv.dataPosition - c1.minv.dataPosition;
var mergedChunks = [];
var lastChunk = null;
if (chunks.length === 0) {
return chunks;
}
});
(0, _forEach.default)(chunks).call(chunks, function (chunk) {
if (!lowest || chunk.maxv.compareTo(lowest) > 0) {
if (lastChunk === null) {
mergedChunks.push(chunk);
lastChunk = chunk;
} else {
if (canMergeBlocks(lastChunk, chunk)) {
if (chunk.maxv.compareTo(lastChunk.maxv) > 0) {
lastChunk.maxv = chunk.maxv;
}
} else {
mergedChunks.push(chunk);
lastChunk = chunk;
chunks.sort(function (c0, c1) {
var dif = c0.minv.blockPosition - c1.minv.blockPosition;
if (dif !== 0) {
return dif;
}
}
}
});
return mergedChunks;
else {
return c0.minv.dataPosition - c1.minv.dataPosition;
}
});
chunks.forEach(function (chunk) {
if (!lowest || chunk.maxv.compareTo(lowest) > 0) {
if (lastChunk === null) {
mergedChunks.push(chunk);
lastChunk = chunk;
}
else {
if (canMergeBlocks(lastChunk, chunk)) {
if (chunk.maxv.compareTo(lastChunk.maxv) > 0) {
lastChunk.maxv = chunk.maxv;
}
}
else {
mergedChunks.push(chunk);
lastChunk = chunk;
}
}
}
});
return mergedChunks;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbInRpbWVvdXQiLCJtcyIsInJlc29sdmUiLCJsb25nVG9OdW1iZXIiLCJsb25nIiwiZ3JlYXRlclRoYW4iLCJsZXNzVGhhbiIsIkVycm9yIiwidG9OdW1iZXIiLCJjaGVja0Fib3J0U2lnbmFsIiwic2lnbmFsIiwiYWJvcnRlZCIsIkRPTUV4Y2VwdGlvbiIsImUiLCJjb2RlIiwiYWJvcnRCcmVha1BvaW50IiwiY2FuTWVyZ2VCbG9ja3MiLCJjaHVuazEiLCJjaHVuazIiLCJtaW52IiwiYmxvY2tQb3NpdGlvbiIsIm1heHYiLCJtYWtlT3B0cyIsIm9iaiIsIm9wdGltaXplQ2h1bmtzIiwiY2h1bmtzIiwibG93ZXN0IiwibWVyZ2VkQ2h1bmtzIiwibGFzdENodW5rIiwibGVuZ3RoIiwiYzAiLCJjMSIsImRpZiIsImRhdGFQb3NpdGlvbiIsImNodW5rIiwiY29tcGFyZVRvIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdPLFNBQVNBLE9BQVQsQ0FBaUJDLEVBQWpCLEVBQTZCO0FBQ2xDLFNBQU8scUJBQVksVUFBQUMsT0FBTztBQUFBLFdBQUksMEJBQVdBLE9BQVgsRUFBb0JELEVBQXBCLENBQUo7QUFBQSxHQUFuQixDQUFQO0FBQ0Q7O0FBRU0sU0FBU0UsWUFBVCxDQUFzQkMsSUFBdEIsRUFBa0M7QUFDdkMsTUFBSUEsSUFBSSxDQUFDQyxXQUFMLDZCQUE2Q0QsSUFBSSxDQUFDRSxRQUFMLHlCQUFqRCxFQUF5RjtBQUN2RixVQUFNLElBQUlDLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQ0Q7O0FBQ0QsU0FBT0gsSUFBSSxDQUFDSSxRQUFMLEVBQVA7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7O0FBV08sU0FBU0MsZ0JBQVQsQ0FBMEJDLE1BQTFCLEVBQWdEO0FBQ3JELE1BQUksQ0FBQ0EsTUFBTCxFQUFhO0FBQ1g7QUFDRDs7QUFFRCxNQUFJQSxNQUFNLENBQUND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RDtBQUNGO0FBQ0Y7QUFDRixHQWhCSyxDQUFOO0FBa0JBLFNBQU9QLFlBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDaHVuayBmcm9tICcuL2NodW5rJ1xuaW1wb3J0IFZpcnR1YWxPZmZzZXQgZnJvbSAnLi92aXJ0dWFsT2Zmc2V0J1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZW91dChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9uZ1RvTnVtYmVyKGxvbmc6IExvbmcpIHtcbiAgaWYgKGxvbmcuZ3JlYXRlclRoYW4oTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHx8IGxvbmcubGVzc1RoYW4oTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnRlZ2VyIG92ZXJmbG93JylcbiAgfVxuICByZXR1cm4gbG9uZy50b051bWJlcigpXG59XG5cbi8qKlxuICogUHJvcGVybHkgY2hlY2sgaWYgdGhlIGdpdmVuIEFib3J0U2lnbmFsIGlzIGFib3J0ZWQuXG4gKiBQZXIgdGhlIHN0YW5kYXJkLCBpZiB0aGUgc2lnbmFsIHJlYWRzIGFzIGFib3J0ZWQsXG4gKiB0aGlzIGZ1bmN0aW9uIHRocm93cyBlaXRoZXIgYSBET01FeGNlcHRpb24gQWJvcnRFcnJvciwgb3IgYSByZWd1bGFyIGVycm9yXG4gKiB3aXRoIGEgYGNvZGVgIGF0dHJpYnV0ZSBzZXQgdG8gYEVSUl9BQk9SVEVEYC5cbiAqXG4gKiBGb3IgY29udmVuaWVuY2UsIHBhc3NpbmcgYHVuZGVmaW5lZGAgaXMgYSBuby1vcFxuICpcbiAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IFtzaWduYWxdIGFuIEFib3J0U2lnbmFsLCBvciBhbnl0aGluZyB3aXRoIGFuIGBhYm9ydGVkYCBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIG5vdGhpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdiYW0gYWJvcnRlZCEnKVxuICAgIGlmICh0eXBlb2YgRE9NRXhjZXB0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignYWJvcnRlZCcsICdBYm9ydEVycm9yJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcignYWJvcnRlZCcpXG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGUuY29kZSA9ICdFUlJfQUJPUlRFRCdcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTa2lwcyB0byB0aGUgbmV4dCB0aWNrLCB0aGVuIHJ1bnMgYGNoZWNrQWJvcnRTaWduYWxgLlxuICogQXdhaXQgdGhpcyB0byBpbnNpZGUgYW4gb3RoZXJ3aXNlIHN5bmNocm9ub3VzIGxvb3AgdG9cbiAqIHByb3ZpZGUgYSBwbGFjZSB0byBicmVhayB3aGVuIGFuIGFib3J0IHNpZ25hbCBpcyByZWNlaXZlZC5cbiAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IHNpZ25hbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWJvcnRCcmVha1BvaW50KHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG4gIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuTWVyZ2VCbG9ja3MoY2h1bmsxOiBDaHVuaywgY2h1bmsyOiBDaHVuaykge1xuICByZXR1cm4gKFxuICAgIGNodW5rMi5taW52LmJsb2NrUG9zaXRpb24gLSBjaHVuazEubWF4di5ibG9ja1Bvc2l0aW9uIDwgNjUwMDAgJiZcbiAgICBjaHVuazIubWF4di5ibG9ja1Bvc2l0aW9uIC0gY2h1bmsxLm1pbnYuYmxvY2tQb3NpdGlvbiA8IDUwMDAwMDBcbiAgKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhbU9wdHMge1xuICB2aWV3QXNQYWlycz86IGJvb2xlYW5cbiAgcGFpckFjcm9zc0Nocj86IGJvb2xlYW5cbiAgbWF4SW5zZXJ0U2l6ZT86IG51bWJlclxuICBzaWduYWw/OiBBYm9ydFNpZ25hbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VPcHRzIHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VPcHRzKG9iajogQWJvcnRTaWduYWwgfCBCYXNlT3B0cyA9IHt9KTogQmFzZU9wdHMge1xuICByZXR1cm4gJ2Fib3J0ZWQnIGluIG9iaiA/ICh7IHNpZ25hbDogb2JqIH0gYXMgQmFzZU9wdHMpIDogKG9iaiBhcyBCYXNlT3B0cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wdGltaXplQ2h1bmtzKGNodW5rczogQ2h1bmtbXSwgbG93ZXN0OiBWaXJ0dWFsT2Zmc2V0KSB7XG4gIGNvbnN0IG1lcmdlZENodW5rczogQ2h1bmtbXSA9IFtdXG4gIGxldCBsYXN0Q2h1bms6IENodW5rIHwgbnVsbCA9IG51bGxcblxuICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjaHVua3NcbiAgfVxuXG4gIGNodW5rcy5zb3J0KGZ1bmN0aW9uKGMwLCBjMSkge1xuICAgIGNvbnN0IGRpZiA9IGMwLm1pbnYuYmxvY2tQb3NpdGlvbiAtIGMxLm1pbnYuYmxvY2tQb3NpdGlvblxuICAgIGlmIChkaWYgIT09IDApIHtcbiAgICAgIHJldHVybiBkaWZcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGMwLm1pbnYuZGF0YVBvc2l0aW9uIC0gYzEubWludi5kYXRhUG9zaXRpb25cbiAgICB9XG4gIH0pXG5cbiAgY2h1bmtzLmZvckVhY2goY2h1bmsgPT4ge1xuICAgIGlmICghbG93ZXN0IHx8IGNodW5rLm1heHYuY29tcGFyZVRvKGxvd2VzdCkgPiAwKSB7XG4gICAgICBpZiAobGFzdENodW5rID09PSBudWxsKSB7XG4gICAgICAgIG1lcmdlZENodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICBsYXN0Q2h1bmsgPSBjaHVua1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNhbk1lcmdlQmxvY2tzKGxhc3RDaHVuaywgY2h1bmspKSB7XG4gICAgICAgICAgaWYgKGNodW5rLm1heHYuY29tcGFyZVRvKGxhc3RDaHVuay5tYXh2KSA+IDApIHtcbiAgICAgICAgICAgIGxhc3RDaHVuay5tYXh2ID0gY2h1bmsubWF4dlxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXJnZWRDaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICBsYXN0Q2h1bmsgPSBjaHVua1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBtZXJnZWRDaHVua3Ncbn1cbiJdfQ==
exports.optimizeChunks = optimizeChunks;
//# sourceMappingURL=util.js.map
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.fromBytes = fromBytes;
exports.default = void 0;
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var VirtualOffset = /*#__PURE__*/function () {
function VirtualOffset(blockPosition, dataPosition) {
(0, _classCallCheck2.default)(this, VirtualOffset);
(0, _defineProperty2.default)(this, "blockPosition", void 0);
(0, _defineProperty2.default)(this, "dataPosition", void 0);
this.blockPosition = blockPosition; // < offset of the compressed data block
this.dataPosition = dataPosition; // < offset into the uncompressed data
}
(0, _createClass2.default)(VirtualOffset, [{
key: "toString",
value: function toString() {
var _context;
return (0, _concat.default)(_context = "".concat(this.blockPosition, ":")).call(_context, this.dataPosition);
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromBytes = void 0;
var VirtualOffset = /** @class */ (function () {
function VirtualOffset(blockPosition, dataPosition) {
this.blockPosition = blockPosition; // < offset of the compressed data block
this.dataPosition = dataPosition; // < offset into the uncompressed data
}
}, {
key: "compareTo",
value: function compareTo(b) {
return this.blockPosition - b.blockPosition || this.dataPosition - b.dataPosition;
}
}], [{
key: "min",
value: function min() {
var min;
var i = 0;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
for (; !min; i += 1) {
min = args[i];
}
for (; i < args.length; i += 1) {
if (min.compareTo(args[i]) > 0) {
min = args[i];
VirtualOffset.prototype.toString = function () {
return "".concat(this.blockPosition, ":").concat(this.dataPosition);
};
VirtualOffset.prototype.compareTo = function (b) {
return (this.blockPosition - b.blockPosition || this.dataPosition - b.dataPosition);
};
VirtualOffset.min = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
}
return min;
var min;
var i = 0;
for (; !min; i += 1) {
min = args[i];
}
for (; i < args.length; i += 1) {
if (min.compareTo(args[i]) > 0) {
min = args[i];
}
}
return min;
};
return VirtualOffset;
}());
exports.default = VirtualOffset;
function fromBytes(bytes, offset, bigendian) {
if (offset === void 0) { offset = 0; }
if (bigendian === void 0) { bigendian = false; }
if (bigendian) {
throw new Error('big-endian virtual file offsets not implemented');
}
}]);
return VirtualOffset;
}();
exports.default = VirtualOffset;
function fromBytes(bytes) {
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var bigendian = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (bigendian) {
throw new Error('big-endian virtual file offsets not implemented');
}
return new VirtualOffset(bytes[offset + 7] * 0x10000000000 + bytes[offset + 6] * 0x100000000 + bytes[offset + 5] * 0x1000000 + bytes[offset + 4] * 0x10000 + bytes[offset + 3] * 0x100 + bytes[offset + 2], bytes[offset + 1] << 8 | bytes[offset]);
return new VirtualOffset(bytes[offset + 7] * 0x10000000000 +
bytes[offset + 6] * 0x100000000 +
bytes[offset + 5] * 0x1000000 +
bytes[offset + 4] * 0x10000 +
bytes[offset + 3] * 0x100 +
bytes[offset + 2], (bytes[offset + 1] << 8) | bytes[offset]);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aXJ0dWFsT2Zmc2V0LnRzIl0sIm5hbWVzIjpbIlZpcnR1YWxPZmZzZXQiLCJibG9ja1Bvc2l0aW9uIiwiZGF0YVBvc2l0aW9uIiwiYiIsIm1pbiIsImkiLCJhcmdzIiwibGVuZ3RoIiwiY29tcGFyZVRvIiwiZnJvbUJ5dGVzIiwiYnl0ZXMiLCJvZmZzZXQiLCJiaWdlbmRpYW4iLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQXFCQSxhO0FBR25CLHlCQUFZQyxhQUFaLEVBQW1DQyxZQUFuQyxFQUF5RDtBQUFBO0FBQUE7QUFBQTtBQUN2RCxTQUFLRCxhQUFMLEdBQXFCQSxhQUFyQixDQUR1RCxDQUNwQjs7QUFDbkMsU0FBS0MsWUFBTCxHQUFvQkEsWUFBcEIsQ0FGdUQsQ0FFdEI7QUFDbEM7Ozs7K0JBRVU7QUFBQTs7QUFDVCx1REFBVSxLQUFLRCxhQUFmLHVCQUFnQyxLQUFLQyxZQUFyQztBQUNEOzs7OEJBRVNDLEMsRUFBa0I7QUFDMUIsYUFBTyxLQUFLRixhQUFMLEdBQXFCRSxDQUFDLENBQUNGLGFBQXZCLElBQXdDLEtBQUtDLFlBQUwsR0FBb0JDLENBQUMsQ0FBQ0QsWUFBckU7QUFDRDs7OzBCQUVvQztBQUNuQyxVQUFJRSxHQUFKO0FBQ0EsVUFBSUMsQ0FBQyxHQUFHLENBQVI7O0FBRm1DLHdDQUF2QkMsSUFBdUI7QUFBdkJBLFFBQUFBLElBQXVCO0FBQUE7O0FBR25DLGFBQU8sQ0FBQ0YsR0FBUixFQUFhQyxDQUFDLElBQUksQ0FBbEIsRUFBcUI7QUFDbkJELFFBQUFBLEdBQUcsR0FBR0UsSUFBSSxDQUFDRCxDQUFELENBQVY7QUFDRDs7QUFDRCxhQUFPQSxDQUFDLEdBQUdDLElBQUksQ0FBQ0MsTUFBaEIsRUFBd0JGLENBQUMsSUFBSSxDQUE3QixFQUFnQztBQUM5QixZQUFJRCxHQUFHLENBQUNJLFNBQUosQ0FBY0YsSUFBSSxDQUFDRCxDQUFELENBQWxCLElBQXlCLENBQTdCLEVBQWdDO0FBQzlCRCxVQUFBQSxHQUFHLEdBQUdFLElBQUksQ0FBQ0QsQ0FBRCxDQUFWO0FBQ0Q7QUFDRjs7QUFDRCxhQUFPRCxHQUFQO0FBQ0Q7Ozs7Ozs7QUFFSSxTQUFTSyxTQUFULENBQW1CQyxLQUFuQixFQUFpRTtBQUFBLE1BQS9CQyxNQUErQix1RUFBdEIsQ0FBc0I7QUFBQSxNQUFuQkMsU0FBbUIsdUVBQVAsS0FBTzs7QUFDdEUsTUFBSUEsU0FBSixFQUFlO0FBQ2IsVUFBTSxJQUFJQyxLQUFKLENBQVUsaURBQVYsQ0FBTjtBQUNEOztBQUVELFNBQU8sSUFBSWIsYUFBSixDQUNMVSxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFWLENBQUwsR0FBb0IsYUFBcEIsR0FDRUQsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBVixDQUFMLEdBQW9CLFdBRHRCLEdBRUVELEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQVYsQ0FBTCxHQUFvQixTQUZ0QixHQUdFRCxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFWLENBQUwsR0FBb0IsT0FIdEIsR0FJRUQsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBVixDQUFMLEdBQW9CLEtBSnRCLEdBS0VELEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQVYsQ0FORixFQU9KRCxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFWLENBQUwsSUFBcUIsQ0FBdEIsR0FBMkJELEtBQUssQ0FBQ0MsTUFBRCxDQVAzQixDQUFQO0FBU0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBWaXJ0dWFsT2Zmc2V0IHtcbiAgcHVibGljIGJsb2NrUG9zaXRpb246IG51bWJlclxuICBwdWJsaWMgZGF0YVBvc2l0aW9uOiBudW1iZXJcbiAgY29uc3RydWN0b3IoYmxvY2tQb3NpdGlvbjogbnVtYmVyLCBkYXRhUG9zaXRpb246IG51bWJlcikge1xuICAgIHRoaXMuYmxvY2tQb3NpdGlvbiA9IGJsb2NrUG9zaXRpb24gLy8gPCBvZmZzZXQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBibG9ja1xuICAgIHRoaXMuZGF0YVBvc2l0aW9uID0gZGF0YVBvc2l0aW9uIC8vIDwgb2Zmc2V0IGludG8gdGhlIHVuY29tcHJlc3NlZCBkYXRhXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5ibG9ja1Bvc2l0aW9ufToke3RoaXMuZGF0YVBvc2l0aW9ufWBcbiAgfVxuXG4gIGNvbXBhcmVUbyhiOiBWaXJ0dWFsT2Zmc2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tQb3NpdGlvbiAtIGIuYmxvY2tQb3NpdGlvbiB8fCB0aGlzLmRhdGFQb3NpdGlvbiAtIGIuZGF0YVBvc2l0aW9uXG4gIH1cblxuICBzdGF0aWMgbWluKC4uLmFyZ3M6IFZpcnR1YWxPZmZzZXRbXSkge1xuICAgIGxldCBtaW5cbiAgICBsZXQgaSA9IDBcbiAgICBmb3IgKDsgIW1pbjsgaSArPSAxKSB7XG4gICAgICBtaW4gPSBhcmdzW2ldXG4gICAgfVxuICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKG1pbi5jb21wYXJlVG8oYXJnc1tpXSkgPiAwKSB7XG4gICAgICAgIG1pbiA9IGFyZ3NbaV1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1pblxuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUJ5dGVzKGJ5dGVzOiBCdWZmZXIsIG9mZnNldCA9IDAsIGJpZ2VuZGlhbiA9IGZhbHNlKSB7XG4gIGlmIChiaWdlbmRpYW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpZy1lbmRpYW4gdmlydHVhbCBmaWxlIG9mZnNldHMgbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIHJldHVybiBuZXcgVmlydHVhbE9mZnNldChcbiAgICBieXRlc1tvZmZzZXQgKyA3XSAqIDB4MTAwMDAwMDAwMDAgK1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgNl0gKiAweDEwMDAwMDAwMCArXG4gICAgICBieXRlc1tvZmZzZXQgKyA1XSAqIDB4MTAwMDAwMCArXG4gICAgICBieXRlc1tvZmZzZXQgKyA0XSAqIDB4MTAwMDAgK1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgM10gKiAweDEwMCArXG4gICAgICBieXRlc1tvZmZzZXQgKyAyXSxcbiAgICAoYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCkgfCBieXRlc1tvZmZzZXRdLFxuICApXG59XG4iXX0=
exports.fromBytes = fromBytes;
//# sourceMappingURL=virtualOffset.js.map
{
"name": "@gmod/bam",
"version": "1.1.8",
"version": "1.1.9",
"description": "Parser for BAM and BAM index (bai) files",

@@ -8,2 +8,3 @@ "license": "MIT",

"main": "dist/index.js",
"module": "esm/index.js",
"author": {

@@ -18,3 +19,4 @@ "name": "Colin Diesh",

"files": [
"dist"
"dist",
"esm"
],

@@ -25,7 +27,7 @@ "scripts": {

"lint": "eslint --report-unused-disable-directives --max-warnings 0 --ext .js,.ts src test",
"clean": "rimraf dist",
"clean": "rimraf dist esm",
"build:esm": "tsc --target es2018 --outDir esm",
"build:es5": "tsc --target es5 --outDir dist",
"build": "npm run build:esm && npm run build:es5",
"prebuild": "npm run clean && npm run lint",
"build:types": "tsc --emitDeclarationOnly",
"build:js": "babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline",
"build": "npm run build:types && npm run build:js",
"preversion": "npm run lint && npm test && npm run build",

@@ -35,5 +37,2 @@ "version": "standard-changelog && git add CHANGELOG.md",

},
"jest": {
"testEnvironment": "node"
},
"keywords": [

@@ -46,3 +45,2 @@ "bionode",

"dependencies": {
"@babel/runtime-corejs3": "^7.5.5",
"@gmod/bgzf-filehandle": "^1.3.3",

@@ -60,26 +58,20 @@ "abortable-promise-cache": "^1.4.0",

"devDependencies": {
"@babel/cli": "^7.2.3",
"@babel/core": "^7.3.3",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-transform-runtime": "^7.2.0",
"@babel/preset-env": "^7.3.1",
"@babel/preset-typescript": "^7.6.0",
"@types/buffer-crc32": "^0.2.0",
"@types/jest": "^27.0.2",
"@types/long": "^4.0.0",
"@types/node": "^12.7.8",
"@types/range-parser": "^1.2.3",
"@typescript-eslint/eslint-plugin": "^2.3.1",
"@typescript-eslint/parser": "^2.3.1",
"babel-jest": "^24.1.0",
"eslint": "^5.12.0",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-config-prettier": "^4.1.0",
"eslint-plugin-import": "^2.10.0",
"eslint-plugin-jest": "^22.17.0",
"eslint-plugin-prettier": "^3.0.1",
"jest": "^24.3.1",
"prettier": "^1.11.1",
"rimraf": "^2.6.2",
"@typescript-eslint/eslint-plugin": "^5.7.0",
"@typescript-eslint/parser": "^5.7.0",
"eslint": "^7.0.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^27.3.1",
"prettier": "^2.4.1",
"rimraf": "^3.0.2",
"standard-changelog": "^1.0.0",
"typescript": "^3.6.3"
"ts-jest": "^27.0.7",
"typescript": "^4.4.4"
},

@@ -86,0 +78,0 @@ "publishConfig": {

@@ -1,5 +0,4 @@

[![Generated with nod](https://img.shields.io/badge/generator-nod-2196F3.svg?style=flat-square)](https://github.com/diegohaz/nod)
[![NPM version](https://img.shields.io/npm/v/@gmod/bam.svg?style=flat-square)](https://npmjs.org/package/@gmod/bam)
[![Build Status](https://img.shields.io/travis/GMOD/bam-js/master.svg?style=flat-square)](https://travis-ci.org/GMOD/bam-js)
[![Coverage Status](https://img.shields.io/codecov/c/github/GMOD/bam-js/master.svg?style=flat-square)](https://codecov.io/gh/GMOD/bam-js/branch/master)
[![Build Status](https://img.shields.io/github/workflow/status/GMOD/bam-js/Push/master?logo=github&style=flat-query)](https://github.com/GMOD/bam-js/actions?query=branch%3Amaster+workflow%3APush+)

@@ -50,3 +49,3 @@ ## Install

- bamPath/baiUrl/bamFilehandle - a string file path to a local file or a class object with a read method
- bamPath/bamUrl/bamFilehandle - a string file path to a local file or a class object with a read method
- csiPath/csiUrl/csiFilehandle - a CSI index for the BAM file, required for long chromosomes greater than 2^29 in length

@@ -53,0 +52,0 @@ - baiPath/baiUrl/baiFilehandle - a BAI index for the BAM file

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc