New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@gmod/bbi

Package Overview
Dependencies
Maintainers
6
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gmod/bbi - npm Package Compare versions

Comparing version 1.0.30 to 1.0.31

esm/bbi.d.ts

6

CHANGELOG.md

@@ -0,1 +1,7 @@

## [1.0.31](https://github.com/GMOD/bbi-js/compare/v1.0.30...v1.0.31) (2021-12-14)
- Add esm module builds with less babelification for smaller bundle sizes
## [1.0.30](https://github.com/GMOD/bbi-js/compare/v1.0.29...v1.0.30) (2020-06-25)

@@ -2,0 +8,0 @@

906

dist/bbi.js
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
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 });
exports.BBI = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _binaryParser = require("@gmod/binary-parser");
var _genericFilehandle = require("generic-filehandle");
var _rxjs = require("rxjs");
var _operators = require("rxjs/operators");
var _abortablePromiseCache = _interopRequireDefault(require("abortable-promise-cache"));
var _quickLru = _interopRequireDefault(require("quick-lru"));
var _blockView = require("./blockView");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(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) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var binary_parser_1 = require("@gmod/binary-parser");
var generic_filehandle_1 = require("generic-filehandle");
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
var quick_lru_1 = __importDefault(require("quick-lru"));
var blockView_1 = require("./blockView");
var BIG_WIG_MAGIC = -2003829722;
var BIG_BED_MAGIC = -2021002517;
/* get the compiled parsers for different sections of the bigwig file

@@ -47,35 +69,52 @@ *

function getParsers(isBE) {
var le = isBE ? 'big' : 'little';
var headerParser = new _binaryParser.Parser().endianess(le).int32('magic').uint16('version').uint16('numZoomLevels').uint64('chromTreeOffset').uint64('unzoomedDataOffset').uint64('unzoomedIndexOffset').uint16('fieldCount').uint16('definedFieldCount').uint64('asOffset') // autoSql offset, used in bigbed
.uint64('totalSummaryOffset').uint32('uncompressBufSize').uint64('extHeaderOffset') // name index offset, used in bigbed
.array('zoomLevels', {
length: 'numZoomLevels',
type: new _binaryParser.Parser().uint32('reductionLevel').uint32('reserved').uint64('dataOffset').uint64('indexOffset')
});
var totalSummaryParser = new _binaryParser.Parser().endianess(le).uint64('basesCovered').double('scoreMin').double('scoreMax').double('scoreSum').double('scoreSumSquares');
var chromTreeParser = new _binaryParser.Parser().endianess(le).uint32('magic').uint32('blockSize').uint32('keySize').uint32('valSize').uint64('itemCount');
var isLeafNode = new _binaryParser.Parser().endianess(le).uint8('isLeafNode').skip(1).uint16('cnt');
return {
chromTreeParser: chromTreeParser,
totalSummaryParser: totalSummaryParser,
headerParser: headerParser,
isLeafNode: isLeafNode
};
var le = isBE ? 'big' : 'little';
var headerParser = new binary_parser_1.Parser()
.endianess(le)
.int32('magic')
.uint16('version')
.uint16('numZoomLevels')
.uint64('chromTreeOffset')
.uint64('unzoomedDataOffset')
.uint64('unzoomedIndexOffset')
.uint16('fieldCount')
.uint16('definedFieldCount')
.uint64('asOffset') // autoSql offset, used in bigbed
.uint64('totalSummaryOffset')
.uint32('uncompressBufSize')
.uint64('extHeaderOffset') // name index offset, used in bigbed
.array('zoomLevels', {
length: 'numZoomLevels',
type: new binary_parser_1.Parser()
.uint32('reductionLevel')
.uint32('reserved')
.uint64('dataOffset')
.uint64('indexOffset'),
});
var totalSummaryParser = new binary_parser_1.Parser()
.endianess(le)
.uint64('basesCovered')
.double('scoreMin')
.double('scoreMax')
.double('scoreSum')
.double('scoreSumSquares');
var chromTreeParser = new binary_parser_1.Parser()
.endianess(le)
.uint32('magic')
.uint32('blockSize')
.uint32('keySize')
.uint32('valSize')
.uint64('itemCount');
var isLeafNode = new binary_parser_1.Parser()
.endianess(le)
.uint8('isLeafNode')
.skip(1)
.uint16('cnt');
return {
chromTreeParser: chromTreeParser,
totalSummaryParser: totalSummaryParser,
headerParser: headerParser,
isLeafNode: isLeafNode,
};
}
var BBI = /*#__PURE__*/function () {
(0, _createClass2.default)(BBI, [{
key: "getHeader",
/* fetch and parse header information from a bigwig or bigbed file
* @param abortSignal - abort the operation, can be null
* @return a Header object
*/
value: function getHeader() {
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var options = 'aborted' in opts ? {
signal: opts
} : opts;
return this.headerCache.get(JSON.stringify(options), options, options.signal);
}
var BBI = /** @class */ (function () {
/*

@@ -87,318 +126,180 @@ * @param filehandle - a filehandle from generic-filehandle or implementing something similar to the node10 fs.promises API

*/
}]);
function BBI() {
var _this = this;
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
(0, _classCallCheck2.default)(this, BBI);
(0, _defineProperty2.default)(this, "bbi", void 0);
(0, _defineProperty2.default)(this, "headerCache", new _abortablePromiseCache.default({
cache: new _quickLru.default({
maxSize: 1
}),
fill: function () {
var _fill = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(params, signal) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", _this._getHeader(_objectSpread(_objectSpread({}, params), {}, {
signal: signal
})));
case 1:
case "end":
return _context.stop();
}
}
}, _callee);
}));
function fill(_x, _x2) {
return _fill.apply(this, arguments);
function BBI(options) {
var _this = this;
if (options === void 0) { options = {}; }
this.headerCache = new abortable_promise_cache_1.default({
cache: new quick_lru_1.default({ maxSize: 1 }),
fill: function (params, signal) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this._getHeader(__assign(__assign({}, params), { signal: signal }))];
});
}); },
});
var filehandle = options.filehandle, renameRefSeqs = options.renameRefSeqs, path = options.path, url = options.url;
this.renameRefSeqs = renameRefSeqs || (function (s) { return s; });
if (filehandle) {
this.bbi = filehandle;
}
return fill;
}()
}));
(0, _defineProperty2.default)(this, "renameRefSeqs", void 0);
var filehandle = options.filehandle,
renameRefSeqs = options.renameRefSeqs,
path = options.path,
url = options.url;
this.renameRefSeqs = renameRefSeqs || function (s) {
return s;
else if (url) {
this.bbi = new generic_filehandle_1.RemoteFile(url);
}
else if (path) {
this.bbi = new generic_filehandle_1.LocalFile(path);
}
else {
throw new Error('no file given');
}
}
/* fetch and parse header information from a bigwig or bigbed file
* @param abortSignal - abort the operation, can be null
* @return a Header object
*/
BBI.prototype.getHeader = function (opts) {
if (opts === void 0) { opts = {}; }
var options = 'aborted' in opts ? { signal: opts } : opts;
return this.headerCache.get(JSON.stringify(options), options, options.signal);
};
if (filehandle) {
this.bbi = filehandle;
} else if (url) {
this.bbi = new _genericFilehandle.RemoteFile(url);
} else if (path) {
this.bbi = new _genericFilehandle.LocalFile(path);
} else {
throw new Error('no file given');
}
}
(0, _createClass2.default)(BBI, [{
key: "_getHeader",
value: function () {
var _getHeader2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(opts) {
var header, chroms;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return this._getMainHeader(opts);
case 2:
header = _context2.sent;
_context2.next = 5;
return this._readChromTree(header, opts);
case 5:
chroms = _context2.sent;
return _context2.abrupt("return", _objectSpread(_objectSpread({}, header), chroms));
case 7:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function _getHeader(_x3) {
return _getHeader2.apply(this, arguments);
}
return _getHeader;
}()
}, {
key: "_getMainHeader",
value: function () {
var _getMainHeader2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(opts) {
var requestSize,
_yield$this$bbi$read,
buffer,
isBigEndian,
ret,
header,
tail,
_args3 = arguments;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
requestSize = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : 2000;
_context3.next = 3;
return this.bbi.read(Buffer.alloc(requestSize), 0, requestSize, 0, opts);
case 3:
_yield$this$bbi$read = _context3.sent;
buffer = _yield$this$bbi$read.buffer;
isBigEndian = this._isBigEndian(buffer);
ret = getParsers(isBigEndian);
header = ret.headerParser.parse(buffer).result;
header.fileType = header.magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
if (!(header.asOffset > requestSize || header.totalSummaryOffset > requestSize)) {
_context3.next = 11;
break;
BBI.prototype._getHeader = function (opts) {
return __awaiter(this, void 0, void 0, function () {
var header, chroms;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._getMainHeader(opts)];
case 1:
header = _a.sent();
return [4 /*yield*/, this._readChromTree(header, opts)];
case 2:
chroms = _a.sent();
return [2 /*return*/, __assign(__assign({}, header), chroms)];
}
return _context3.abrupt("return", this._getMainHeader(opts, requestSize * 2));
case 11:
if (header.asOffset) {
header.autoSql = buffer.slice(header.asOffset, buffer.indexOf(0, header.asOffset)).toString('utf8');
});
});
};
BBI.prototype._getMainHeader = function (opts, requestSize) {
if (requestSize === void 0) { requestSize = 2000; }
return __awaiter(this, void 0, void 0, function () {
var buffer, isBigEndian, ret, header, tail;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.bbi.read(Buffer.alloc(requestSize), 0, requestSize, 0, opts)];
case 1:
buffer = (_a.sent()).buffer;
isBigEndian = this._isBigEndian(buffer);
ret = getParsers(isBigEndian);
header = ret.headerParser.parse(buffer).result;
header.fileType = header.magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
if (header.asOffset > requestSize ||
header.totalSummaryOffset > requestSize) {
return [2 /*return*/, this._getMainHeader(opts, requestSize * 2)];
}
if (header.asOffset) {
header.autoSql = buffer
.slice(header.asOffset, buffer.indexOf(0, header.asOffset))
.toString('utf8');
}
if (header.totalSummaryOffset > requestSize) {
return [2 /*return*/, this._getMainHeader(opts, requestSize * 2)];
}
if (header.totalSummaryOffset) {
tail = buffer.slice(header.totalSummaryOffset);
header.totalSummary = ret.totalSummaryParser.parse(tail).result;
}
return [2 /*return*/, __assign(__assign({}, header), { isBigEndian: isBigEndian })];
}
if (!(header.totalSummaryOffset > requestSize)) {
_context3.next = 14;
break;
});
});
};
BBI.prototype._isBigEndian = function (buffer) {
var ret = buffer.readInt32LE(0);
if (ret === BIG_WIG_MAGIC || ret === BIG_BED_MAGIC) {
return false;
}
ret = buffer.readInt32BE(0);
if (ret === BIG_WIG_MAGIC || ret === BIG_BED_MAGIC) {
return true;
}
throw new Error('not a BigWig/BigBed file');
};
// todo: add progress if long running
BBI.prototype._readChromTree = function (header, opts) {
return __awaiter(this, void 0, void 0, function () {
var isBE, le, refsByNumber, refsByName, chromTreeOffset, unzoomedDataOffset, data, p, keySize, leafNodeParser, nonleafNodeParser, rootNodeOffset, bptReadNode;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
isBE = header.isBigEndian;
le = isBE ? 'big' : 'little';
refsByNumber = [];
refsByName = {};
chromTreeOffset = header.chromTreeOffset;
unzoomedDataOffset = header.unzoomedDataOffset;
while (unzoomedDataOffset % 4 !== 0) {
unzoomedDataOffset += 1;
}
return [4 /*yield*/, this.bbi.read(Buffer.alloc(unzoomedDataOffset - chromTreeOffset), 0, unzoomedDataOffset - chromTreeOffset, chromTreeOffset, opts)];
case 1:
data = (_a.sent()).buffer;
p = getParsers(isBE);
keySize = p.chromTreeParser.parse(data).result.keySize;
leafNodeParser = new binary_parser_1.Parser()
.endianess(le)
.string('key', { stripNull: true, length: keySize })
.uint32('refId')
.uint32('refSize');
nonleafNodeParser = new binary_parser_1.Parser()
.endianess(le)
.skip(keySize)
.uint64('childOffset');
rootNodeOffset = 32;
bptReadNode = function (currentOffset) { return __awaiter(_this, void 0, void 0, function () {
var offset, ret, _a, isLeafNode, cnt, n, leafRet, _b, key, refId, refSize, refRec, nextNodes, n, nonleafRet, childOffset;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
offset = currentOffset;
if (offset >= data.length) {
throw new Error('reading beyond end of buffer');
}
ret = p.isLeafNode.parse(data.slice(offset));
_a = ret.result, isLeafNode = _a.isLeafNode, cnt = _a.cnt;
offset += ret.offset;
if (!isLeafNode) return [3 /*break*/, 1];
for (n = 0; n < cnt; n += 1) {
leafRet = leafNodeParser.parse(data.slice(offset));
offset += leafRet.offset;
_b = leafRet.result, key = _b.key, refId = _b.refId, refSize = _b.refSize;
refRec = { name: key, id: refId, length: refSize };
refsByName[this.renameRefSeqs(key)] = refId;
refsByNumber[refId] = refRec;
}
return [3 /*break*/, 3];
case 1:
nextNodes = [];
for (n = 0; n < cnt; n += 1) {
nonleafRet = nonleafNodeParser.parse(data.slice(offset));
childOffset = nonleafRet.result.childOffset;
offset += nonleafRet.offset;
childOffset -= chromTreeOffset;
nextNodes.push(bptReadNode(childOffset));
}
return [4 /*yield*/, Promise.all(nextNodes)];
case 2:
_c.sent();
_c.label = 3;
case 3: return [2 /*return*/];
}
});
}); };
return [4 /*yield*/, bptReadNode(rootNodeOffset)];
case 2:
_a.sent();
return [2 /*return*/, {
refsByName: refsByName,
refsByNumber: refsByNumber,
}];
}
return _context3.abrupt("return", this._getMainHeader(opts, requestSize * 2));
case 14:
if (header.totalSummaryOffset) {
tail = buffer.slice(header.totalSummaryOffset);
header.totalSummary = ret.totalSummaryParser.parse(tail).result;
}
return _context3.abrupt("return", _objectSpread(_objectSpread({}, header), {}, {
isBigEndian: isBigEndian
}));
case 16:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function _getMainHeader(_x4) {
return _getMainHeader2.apply(this, arguments);
}
return _getMainHeader;
}()
}, {
key: "_isBigEndian",
value: function _isBigEndian(buffer) {
var ret = buffer.readInt32LE(0);
if (ret === BIG_WIG_MAGIC || ret === BIG_BED_MAGIC) {
return false;
}
ret = buffer.readInt32BE(0);
if (ret === BIG_WIG_MAGIC || ret === BIG_BED_MAGIC) {
return true;
}
throw new Error('not a BigWig/BigBed file');
} // todo: add progress if long running
}, {
key: "_readChromTree",
value: function () {
var _readChromTree2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(header, opts) {
var _this2 = this;
var isBE, le, refsByNumber, refsByName, chromTreeOffset, unzoomedDataOffset, _yield$this$bbi$read2, data, p, keySize, leafNodeParser, nonleafNodeParser, rootNodeOffset, bptReadNode;
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
isBE = header.isBigEndian;
le = isBE ? 'big' : 'little';
refsByNumber = [];
refsByName = {};
chromTreeOffset = header.chromTreeOffset;
unzoomedDataOffset = header.unzoomedDataOffset;
while (unzoomedDataOffset % 4 !== 0) {
unzoomedDataOffset += 1;
}
_context5.next = 9;
return this.bbi.read(Buffer.alloc(unzoomedDataOffset - chromTreeOffset), 0, unzoomedDataOffset - chromTreeOffset, chromTreeOffset, opts);
case 9:
_yield$this$bbi$read2 = _context5.sent;
data = _yield$this$bbi$read2.buffer;
p = getParsers(isBE);
keySize = p.chromTreeParser.parse(data).result.keySize;
leafNodeParser = new _binaryParser.Parser().endianess(le).string('key', {
stripNull: true,
length: keySize
}).uint32('refId').uint32('refSize');
nonleafNodeParser = new _binaryParser.Parser().endianess(le).skip(keySize).uint64('childOffset');
rootNodeOffset = 32;
bptReadNode = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(currentOffset) {
var offset, ret, _ret$result, isLeafNode, cnt, n, leafRet, _leafRet$result, _key, refId, refSize, refRec, nextNodes, _n, nonleafRet, childOffset;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
offset = currentOffset;
if (!(offset >= data.length)) {
_context4.next = 3;
break;
}
throw new Error('reading beyond end of buffer');
case 3:
ret = p.isLeafNode.parse(data.slice(offset));
_ret$result = ret.result, isLeafNode = _ret$result.isLeafNode, cnt = _ret$result.cnt;
offset += ret.offset;
if (!isLeafNode) {
_context4.next = 10;
break;
}
for (n = 0; n < cnt; n += 1) {
leafRet = leafNodeParser.parse(data.slice(offset));
offset += leafRet.offset;
_leafRet$result = leafRet.result, _key = _leafRet$result.key, refId = _leafRet$result.refId, refSize = _leafRet$result.refSize;
refRec = {
name: _key,
id: refId,
length: refSize
};
refsByName[_this2.renameRefSeqs(_key)] = refId;
refsByNumber[refId] = refRec;
}
_context4.next = 14;
break;
case 10:
// parse index node
nextNodes = [];
for (_n = 0; _n < cnt; _n += 1) {
nonleafRet = nonleafNodeParser.parse(data.slice(offset));
childOffset = nonleafRet.result.childOffset;
offset += nonleafRet.offset;
childOffset -= chromTreeOffset;
nextNodes.push(bptReadNode(childOffset));
}
_context4.next = 14;
return Promise.all(nextNodes);
case 14:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return function bptReadNode(_x7) {
return _ref.apply(this, arguments);
};
}();
_context5.next = 19;
return bptReadNode(rootNodeOffset);
case 19:
return _context5.abrupt("return", {
refsByName: refsByName,
refsByNumber: refsByNumber
});
case 20:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
function _readChromTree(_x5, _x6) {
return _readChromTree2.apply(this, arguments);
}
return _readChromTree;
}()
});
});
};
/*

@@ -408,49 +309,17 @@ * fetches the "unzoomed" view of the bigwig data. this is the default for bigbed

*/
}, {
key: "getUnzoomedView",
value: function () {
var _getUnzoomedView = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(opts) {
var _yield$this$getHeader, unzoomedIndexOffset, zoomLevels, refsByName, uncompressBufSize, isBigEndian, fileType, nzl, cirLen;
return _regenerator.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return this.getHeader(opts);
case 2:
_yield$this$getHeader = _context6.sent;
unzoomedIndexOffset = _yield$this$getHeader.unzoomedIndexOffset;
zoomLevels = _yield$this$getHeader.zoomLevels;
refsByName = _yield$this$getHeader.refsByName;
uncompressBufSize = _yield$this$getHeader.uncompressBufSize;
isBigEndian = _yield$this$getHeader.isBigEndian;
fileType = _yield$this$getHeader.fileType;
nzl = zoomLevels[0];
cirLen = nzl ? nzl.dataOffset - unzoomedIndexOffset : 4000;
return _context6.abrupt("return", new _blockView.BlockView(this.bbi, refsByName, unzoomedIndexOffset, cirLen, isBigEndian, uncompressBufSize > 0, fileType));
case 12:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
function getUnzoomedView(_x8) {
return _getUnzoomedView.apply(this, arguments);
}
return getUnzoomedView;
}()
/*
* abstract method - get the view for a given scale
*/
}, {
key: "getFeatureStream",
BBI.prototype.getUnzoomedView = function (opts) {
return __awaiter(this, void 0, void 0, function () {
var _a, unzoomedIndexOffset, zoomLevels, refsByName, uncompressBufSize, isBigEndian, fileType, nzl, cirLen;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.getHeader(opts)];
case 1:
_a = _b.sent(), unzoomedIndexOffset = _a.unzoomedIndexOffset, zoomLevels = _a.zoomLevels, refsByName = _a.refsByName, uncompressBufSize = _a.uncompressBufSize, isBigEndian = _a.isBigEndian, fileType = _a.fileType;
nzl = zoomLevels[0];
cirLen = nzl ? nzl.dataOffset - unzoomedIndexOffset : 4000;
return [2 /*return*/, new blockView_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, cirLen, isBigEndian, uncompressBufSize > 0, fileType)];
}
});
});
};
/**

@@ -464,130 +333,63 @@ * Gets features from a BigWig file

*/
value: function () {
var _getFeatureStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(refName, start, end) {
var opts,
chrName,
view,
_args7 = arguments;
return _regenerator.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
opts = _args7.length > 3 && _args7[3] !== undefined ? _args7[3] : {
scale: 1
};
_context7.next = 3;
return this.getHeader(opts);
case 3:
chrName = this.renameRefSeqs(refName);
if (!opts.basesPerSpan) {
_context7.next = 10;
break;
BBI.prototype.getFeatureStream = function (refName, start, end, opts) {
if (opts === void 0) { opts = {
scale: 1,
}; }
return __awaiter(this, void 0, void 0, function () {
var chrName, view;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.getHeader(opts)];
case 1:
_a.sent();
chrName = this.renameRefSeqs(refName);
if (!opts.basesPerSpan) return [3 /*break*/, 3];
return [4 /*yield*/, this.getView(1 / opts.basesPerSpan, opts)];
case 2:
view = _a.sent();
return [3 /*break*/, 7];
case 3:
if (!opts.scale) return [3 /*break*/, 5];
return [4 /*yield*/, this.getView(opts.scale, opts)];
case 4:
view = _a.sent();
return [3 /*break*/, 7];
case 5: return [4 /*yield*/, this.getView(1, opts)];
case 6:
view = _a.sent();
_a.label = 7;
case 7:
if (!view) {
throw new Error('unable to get block view for data');
}
return [2 /*return*/, new rxjs_1.Observable(function (observer) {
view.readWigData(chrName, start, end, observer, opts);
})];
}
_context7.next = 7;
return this.getView(1 / opts.basesPerSpan, opts);
case 7:
view = _context7.sent;
_context7.next = 19;
break;
case 10:
if (!opts.scale) {
_context7.next = 16;
break;
});
});
};
BBI.prototype.getFeatures = function (refName, start, end, opts) {
if (opts === void 0) { opts = {
scale: 1,
}; }
return __awaiter(this, void 0, void 0, function () {
var ob, ret;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.getFeatureStream(refName, start, end, opts)];
case 1:
ob = _a.sent();
return [4 /*yield*/, ob
.pipe((0, operators_1.reduce)(function (acc, curr) { return acc.concat(curr); }))
.toPromise()];
case 2:
ret = _a.sent();
return [2 /*return*/, ret || []];
}
_context7.next = 13;
return this.getView(opts.scale, opts);
case 13:
view = _context7.sent;
_context7.next = 19;
break;
case 16:
_context7.next = 18;
return this.getView(1, opts);
case 18:
view = _context7.sent;
case 19:
if (view) {
_context7.next = 21;
break;
}
throw new Error('unable to get block view for data');
case 21:
return _context7.abrupt("return", new _rxjs.Observable(function (observer) {
view.readWigData(chrName, start, end, observer, opts);
}));
case 22:
case "end":
return _context7.stop();
}
}
}, _callee7, this);
}));
function getFeatureStream(_x9, _x10, _x11) {
return _getFeatureStream.apply(this, arguments);
}
return getFeatureStream;
}()
}, {
key: "getFeatures",
value: function () {
var _getFeatures = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(refName, start, end) {
var opts,
ob,
ret,
_args8 = arguments;
return _regenerator.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
opts = _args8.length > 3 && _args8[3] !== undefined ? _args8[3] : {
scale: 1
};
_context8.next = 3;
return this.getFeatureStream(refName, start, end, opts);
case 3:
ob = _context8.sent;
_context8.next = 6;
return ob.pipe((0, _operators.reduce)(function (acc, curr) {
return acc.concat(curr);
})).toPromise();
case 6:
ret = _context8.sent;
return _context8.abrupt("return", ret || []);
case 8:
case "end":
return _context8.stop();
}
}
}, _callee8, this);
}));
function getFeatures(_x12, _x13, _x14) {
return _getFeatures.apply(this, arguments);
}
return getFeatures;
}()
}]);
return BBI;
}();
});
});
};
return BBI;
}());
exports.BBI = BBI;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYmkudHMiXSwibmFtZXMiOlsiQklHX1dJR19NQUdJQyIsIkJJR19CRURfTUFHSUMiLCJnZXRQYXJzZXJzIiwiaXNCRSIsImxlIiwiaGVhZGVyUGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwiaW50MzIiLCJ1aW50MTYiLCJ1aW50NjQiLCJ1aW50MzIiLCJhcnJheSIsImxlbmd0aCIsInR5cGUiLCJ0b3RhbFN1bW1hcnlQYXJzZXIiLCJkb3VibGUiLCJjaHJvbVRyZWVQYXJzZXIiLCJpc0xlYWZOb2RlIiwidWludDgiLCJza2lwIiwiQkJJIiwib3B0cyIsIm9wdGlvbnMiLCJzaWduYWwiLCJoZWFkZXJDYWNoZSIsImdldCIsIkpTT04iLCJzdHJpbmdpZnkiLCJBYm9ydGFibGVQcm9taXNlQ2FjaGUiLCJjYWNoZSIsIlF1aWNrTFJVIiwibWF4U2l6ZSIsImZpbGwiLCJwYXJhbXMiLCJfZ2V0SGVhZGVyIiwiZmlsZWhhbmRsZSIsInJlbmFtZVJlZlNlcXMiLCJwYXRoIiwidXJsIiwicyIsImJiaSIsIlJlbW90ZUZpbGUiLCJMb2NhbEZpbGUiLCJFcnJvciIsIl9nZXRNYWluSGVhZGVyIiwiaGVhZGVyIiwiX3JlYWRDaHJvbVRyZWUiLCJjaHJvbXMiLCJyZXF1ZXN0U2l6ZSIsInJlYWQiLCJCdWZmZXIiLCJhbGxvYyIsImJ1ZmZlciIsImlzQmlnRW5kaWFuIiwiX2lzQmlnRW5kaWFuIiwicmV0IiwicGFyc2UiLCJyZXN1bHQiLCJmaWxlVHlwZSIsIm1hZ2ljIiwiYXNPZmZzZXQiLCJ0b3RhbFN1bW1hcnlPZmZzZXQiLCJhdXRvU3FsIiwic2xpY2UiLCJpbmRleE9mIiwidG9TdHJpbmciLCJ0YWlsIiwidG90YWxTdW1tYXJ5IiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlZnNCeU51bWJlciIsInJlZnNCeU5hbWUiLCJjaHJvbVRyZWVPZmZzZXQiLCJ1bnpvb21lZERhdGFPZmZzZXQiLCJkYXRhIiwicCIsImtleVNpemUiLCJsZWFmTm9kZVBhcnNlciIsInN0cmluZyIsInN0cmlwTnVsbCIsIm5vbmxlYWZOb2RlUGFyc2VyIiwicm9vdE5vZGVPZmZzZXQiLCJicHRSZWFkTm9kZSIsImN1cnJlbnRPZmZzZXQiLCJvZmZzZXQiLCJjbnQiLCJuIiwibGVhZlJldCIsImtleSIsInJlZklkIiwicmVmU2l6ZSIsInJlZlJlYyIsIm5hbWUiLCJpZCIsIm5leHROb2RlcyIsIm5vbmxlYWZSZXQiLCJjaGlsZE9mZnNldCIsInB1c2giLCJQcm9taXNlIiwiYWxsIiwiZ2V0SGVhZGVyIiwidW56b29tZWRJbmRleE9mZnNldCIsInpvb21MZXZlbHMiLCJ1bmNvbXByZXNzQnVmU2l6ZSIsIm56bCIsImNpckxlbiIsImRhdGFPZmZzZXQiLCJCbG9ja1ZpZXciLCJyZWZOYW1lIiwic3RhcnQiLCJlbmQiLCJzY2FsZSIsImNock5hbWUiLCJiYXNlc1BlclNwYW4iLCJnZXRWaWV3IiwidmlldyIsIk9ic2VydmFibGUiLCJvYnNlcnZlciIsInJlYWRXaWdEYXRhIiwiZ2V0RmVhdHVyZVN0cmVhbSIsIm9iIiwicGlwZSIsImFjYyIsImN1cnIiLCJjb25jYXQiLCJ0b1Byb21pc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsYUFBYSxHQUFHLENBQUMsVUFBdkI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsQ0FBQyxVQUF2Qjs7QUF5Q0E7Ozs7O0FBS0EsU0FBU0MsVUFBVCxDQUFvQkMsSUFBcEIsRUFBd0M7QUFDdEMsTUFBTUMsRUFBRSxHQUFHRCxJQUFJLEdBQUcsS0FBSCxHQUFXLFFBQTFCO0FBQ0EsTUFBTUUsWUFBWSxHQUFHLElBQUlDLG9CQUFKLEdBQ2xCQyxTQURrQixDQUNSSCxFQURRLEVBRWxCSSxLQUZrQixDQUVaLE9BRlksRUFHbEJDLE1BSGtCLENBR1gsU0FIVyxFQUlsQkEsTUFKa0IsQ0FJWCxlQUpXLEVBS2xCQyxNQUxrQixDQUtY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WyJpbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdAZ21vZC9iaW5hcnktcGFyc2VyJ1xuaW1wb3J0IHsgTG9jYWxGaWxlLCBSZW1vdGVGaWxlLCBHZW5lcmljRmlsZWhhbmRsZSB9IGZyb20gJ2dlbmVyaWMtZmlsZWhhbmRsZSdcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHJlZHVjZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IEFib3J0YWJsZVByb21pc2VDYWNoZSBmcm9tICdhYm9ydGFibGUtcHJvbWlzZS1jYWNoZSdcbmltcG9ydCBRdWlja0xSVSBmcm9tICdxdWljay1scnUnXG5pbXBvcnQgeyBCbG9ja1ZpZXcgfSBmcm9tICcuL2Jsb2NrVmlldydcblxuY29uc3QgQklHX1dJR19NQUdJQyA9IC0yMDAzODI5NzIyXG5jb25zdCBCSUdfQkVEX01BR0lDID0gLTIwMjEwMDI1MTdcblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlIHtcbiAgc3RhcnQ6IG51bWJlclxuICBlbmQ6IG51bWJlclxuICBzY29yZTogbnVtYmVyXG4gIHJlc3Q/OiBzdHJpbmcgLy8gZm9yIGJpZ2JlZCBsaW5lXG4gIG1pblNjb3JlPzogbnVtYmVyIC8vIGZvciBzdW1tYXJ5IGxpbmVcbiAgbWF4U2NvcmU/OiBudW1iZXIgLy8gZm9yIHN1bW1hcnkgbGluZVxuICBzdW1tYXJ5PzogYm9vbGVhbiAvLyBpcyBzdW1tYXJ5IGxpbmVcbiAgdW5pcXVlSWQ/OiBzdHJpbmcgLy8gZm9yIGJpZ2JlZCBjb250YWlucyB1bmlxdWVJZCBjYWxjdWxhdGVkIGZyb20gZmlsZSBvZmZzZXRcbiAgZmllbGQ/OiBudW1iZXIgLy8gdXNlZCBpbiBiaWdiZWQgc2VhcmNoaW5nXG59XG5pbnRlcmZhY2UgU3RhdGlzdGljcyB7XG4gIHNjb3JlU3VtOiBudW1iZXJcbiAgYmFzZXNDb3ZlcmVkOiBudW1iZXJcbiAgc2NvcmVTdW1TcXVhcmVzOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFJlZkluZm8ge1xuICBuYW1lOiBzdHJpbmdcbiAgaWQ6IG51bWJlclxuICBsZW5ndGg6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBIZWFkZXIge1xuICBhdXRvU3FsOiBzdHJpbmdcbiAgdG90YWxTdW1tYXJ5OiBTdGF0aXN0aWNzXG4gIHpvb21MZXZlbHM6IGFueVxuICB1bnpvb21lZEluZGV4T2Zmc2V0OiBudW1iZXJcbiAgdW56b29tZWREYXRhT2Zmc2V0OiBudW1iZXJcbiAgZGVmaW5lZEZpZWxkQ291bnQ6IG51bWJlclxuICB1bmNvbXByZXNzQnVmU2l6ZTogbnVtYmVyXG4gIGNocm9tVHJlZU9mZnNldDogbnVtYmVyXG4gIGZpbGVTaXplOiBudW1iZXJcbiAgZXh0SGVhZGVyT2Zmc2V0OiBudW1iZXJcbiAgaXNCaWdFbmRpYW46IGJvb2xlYW5cbiAgZmlsZVR5cGU6IHN0cmluZ1xuICByZWZzQnlOYW1lOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9XG4gIHJlZnNCeU51bWJlcjogeyBba2V5OiBudW1iZXJdOiBSZWZJbmZvIH1cbn1cblxuLyogZ2V0IHRoZSBjb21waWxlZCBwYXJzZXJzIGZvciBkaWZmZXJlbnQgc2VjdGlvbnMgb2YgdGhlIGJpZ3dpZyBmaWxlXG4gKlxuICogQHBhcmFtIGlzQkUgLSBpcyBiaWcgZW5kaWFuLCB0eXBpY2FsbHkgZmFsc2VcbiAqIEByZXR1cm4gYW4gb2JqZWN0IHdpdGggY29tcGlsZWQgcGFyc2Vyc1xuICovXG5mdW5jdGlvbiBnZXRQYXJzZXJzKGlzQkU6IGJvb2xlYW4pOiBhbnkge1xuICBjb25zdCBsZSA9IGlzQkUgPyAnYmlnJyA6ICdsaXR0bGUnXG4gIGNvbnN0IGhlYWRlclBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLmludDMyKCdtYWdpYycpXG4gICAgLnVpbnQxNigndmVyc2lvbicpXG4gICAgLnVpbnQxNignbnVtWm9vbUxldmVscycpXG4gICAgLnVpbnQ2NCgnY2hyb21UcmVlT2Zmc2V0JylcbiAgICAudWludDY0KCd1bnpvb21lZERhdGFPZmZzZXQnKVxuICAgIC51aW50NjQoJ3Vuem9vbWVkSW5kZXhPZmZzZXQnKVxuICAgIC51aW50MTYoJ2ZpZWxkQ291bnQnKVxuICAgIC51aW50MTYoJ2RlZmluZWRGaWVsZENvdW50JylcbiAgICAudWludDY0KCdhc09mZnNldCcpIC8vIGF1dG9TcWwgb2Zmc2V0LCB1c2VkIGluIGJpZ2JlZFxuICAgIC51aW50NjQoJ3RvdGFsU3VtbWFyeU9mZnNldCcpXG4gICAgLnVpbnQzMigndW5jb21wcmVzc0J1ZlNpemUnKVxuICAgIC51aW50NjQoJ2V4dEhlYWRlck9mZnNldCcpIC8vIG5hbWUgaW5kZXggb2Zmc2V0LCB1c2VkIGluIGJpZ2JlZFxuICAgIC5hcnJheSgnem9vbUxldmVscycsIHtcbiAgICAgIGxlbmd0aDogJ251bVpvb21MZXZlbHMnLFxuICAgICAgdHlwZTogbmV3IFBhcnNlcigpXG4gICAgICAgIC51aW50MzIoJ3JlZHVjdGlvbkxldmVsJylcbiAgICAgICAgLnVpbnQzMigncmVzZXJ2ZWQnKVxuICAgICAgICAudWludDY0KCdkYXRhT2Zmc2V0JylcbiAgICAgICAgLnVpbnQ2NCgnaW5kZXhPZmZzZXQnKSxcbiAgICB9KVxuXG4gIGNvbnN0IHRvdGFsU3VtbWFyeVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQ2NCgnYmFzZXNDb3ZlcmVkJylcbiAgICAuZG91YmxlKCdzY29yZU1pbicpXG4gICAgLmRvdWJsZSgnc2NvcmVNYXgnKVxuICAgIC5kb3VibGUoJ3Njb3JlU3VtJylcbiAgICAuZG91YmxlKCdzY29yZVN1bVNxdWFyZXMnKVxuXG4gIGNvbnN0IGNocm9tVHJlZVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQzMignbWFnaWMnKVxuICAgIC51aW50MzIoJ2Jsb2NrU2l6ZScpXG4gICAgLnVpbnQzMigna2V5U2l6ZScpXG4gICAgLnVpbnQzMigndmFsU2l6ZScpXG4gICAgLnVpbnQ2NCgnaXRlbUNvdW50JylcblxuICBjb25zdCBpc0xlYWZOb2RlID0gbmV3IFBhcnNlcigpXG4gICAgLmVuZGlhbmVzcyhsZSlcbiAgICAudWludDgoJ2lzTGVhZk5vZGUnKVxuICAgIC5za2lwKDEpXG4gICAgLnVpbnQxNignY250JylcblxuICByZXR1cm4ge1xuICAgIGNocm9tVHJlZVBhcnNlcixcbiAgICB0b3RhbFN1bW1hcnlQYXJzZXIsXG4gICAgaGVhZGVyUGFyc2VyLFxuICAgIGlzTGVhZk5vZGUsXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIFtrZXk6IHN0cmluZ106IHVua25vd25cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJCSSB7XG4gIHByb3RlY3RlZCBiYmk6IEdlbmVyaWNGaWxlaGFuZGxlXG5cbiAgcHJvdGVjdGVkIGhlYWRlckNhY2hlID0gbmV3IEFib3J0YWJsZVByb21pc2VDYWNoZSh7XG4gICAgY2FjaGU6IG5ldyBRdWlja0xSVSh7IG1heFNpemU6IDEgfSksXG4gICAgZmlsbDogYXN5bmMgKHBhcmFtczogYW55LCBzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEhlYWRlcih7IC4uLnBhcmFtcywgc2lnbmFsIH0pXG4gICAgfSxcbiAgfSlcblxuICBwcm90ZWN0ZWQgcmVuYW1lUmVmU2VxczogKGE6IHN0cmluZykgPT4gc3RyaW5nXG5cbiAgLyogZmV0Y2ggYW5kIHBhcnNlIGhlYWRlciBpbmZvcm1hdGlvbiBmcm9tIGEgYmlnd2lnIG9yIGJpZ2JlZCBmaWxlXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIGFib3J0IHRoZSBvcGVyYXRpb24sIGNhbiBiZSBudWxsXG4gICAqIEByZXR1cm4gYSBIZWFkZXIgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgZ2V0SGVhZGVyKG9wdHM6IFJlcXVlc3RPcHRpb25zIHwgQWJvcnRTaWduYWwgPSB7fSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSAnYWJvcnRlZCcgaW4gb3B0cyA/IHsgc2lnbmFsOiBvcHRzIH0gOiBvcHRzXG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyQ2FjaGUuZ2V0KEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBvcHRpb25zLCBvcHRpb25zLnNpZ25hbClcbiAgfVxuXG4gIC8qXG4gICAqIEBwYXJhbSBmaWxlaGFuZGxlIC0gYSBmaWxlaGFuZGxlIGZyb20gZ2VuZXJpYy1maWxlaGFuZGxlIG9yIGltcGxlbWVudGluZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgbm9kZTEwIGZzLnByb21pc2VzIEFQSVxuICAgKiBAcGFyYW0gcGF0aCAtIGEgTG9jYWwgZmlsZSBwYXRoIGFzIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB1cmwgLSBhIFVSTCBzdHJpbmdcbiAgICogQHBhcmFtIHJlbmFtZVJlZlNlcXMgLSBhbiBvcHRpb25hbCBtZXRob2QgdG8gcmVuYW1lIHRoZSBpbnRlcm5hbCByZWZlcmVuY2Ugc2VxdWVuY2VzIHVzaW5nIGEgbWFwcGluZyBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGZpbGVoYW5kbGU/OiBHZW5lcmljRmlsZWhhbmRsZVxuICAgICAgcGF0aD86IHN0cmluZ1xuICAgICAgdXJsPzogc3RyaW5nXG4gICAgICByZW5hbWVSZWZTZXFzPzogKGE6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGZpbGVoYW5kbGUsIHJlbmFtZVJlZlNlcXMsIHBhdGgsIHVybCB9ID0gb3B0aW9uc1xuICAgIHRoaXMucmVuYW1lUmVmU2VxcyA9IHJlbmFtZVJlZlNlcXMgfHwgKChzOiBzdHJpbmcpOiBzdHJpbmcgPT4gcylcbiAgICBpZiAoZmlsZWhhbmRsZSkge1xuICAgICAgdGhpcy5iYmkgPSBmaWxlaGFuZGxlXG4gICAgfSBlbHNlIGlmICh1cmwpIHtcbiAgICAgIHRoaXMuYmJpID0gbmV3IFJlbW90ZUZpbGUodXJsKVxuICAgIH0gZWxzZSBpZiAocGF0aCkge1xuICAgICAgdGhpcy5iYmkgPSBuZXcgTG9jYWxGaWxlKHBhdGgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZmlsZSBnaXZlbicpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0SGVhZGVyKG9wdHM6IFJlcXVlc3RPcHRpb25zKSB7XG4gICAgY29uc3QgaGVhZGVyID0gYXdhaXQgdGhpcy5fZ2V0TWFpbkhlYWRlcihvcHRzKVxuICAgIGNvbnN0IGNocm9tcyA9IGF3YWl0IHRoaXMuX3JlYWRDaHJvbVRyZWUoaGVhZGVyLCBvcHRzKVxuICAgIHJldHVybiB7IC4uLmhlYWRlciwgLi4uY2hyb21zIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2dldE1haW5IZWFkZXIob3B0czogUmVxdWVzdE9wdGlvbnMsIHJlcXVlc3RTaXplID0gMjAwMCk6IFByb21pc2U8SGVhZGVyPiB7XG4gICAgY29uc3QgeyBidWZmZXIgfSA9IGF3YWl0IHRoaXMuYmJpLnJlYWQoQnVmZmVyLmFsbG9jKHJlcXVlc3RTaXplKSwgMCwgcmVxdWVzdFNpemUsIDAsIG9wdHMpXG4gICAgY29uc3QgaXNCaWdFbmRpYW4gPSB0aGlzLl9pc0JpZ0VuZGlhbihidWZmZXIpXG4gICAgY29uc3QgcmV0ID0gZ2V0UGFyc2Vycyhpc0JpZ0VuZGlhbilcbiAgICBjb25zdCBoZWFkZXIgPSByZXQuaGVhZGVyUGFyc2VyLnBhcnNlKGJ1ZmZlcikucmVzdWx0XG4gICAgaGVhZGVyLmZpbGVUeXBlID0gaGVhZGVyLm1hZ2ljID09PSBCSUdfQkVEX01BR0lDID8gJ2JpZ2JlZCcgOiAnYmlnd2lnJ1xuICAgIGlmIChoZWFkZXIuYXNPZmZzZXQgPiByZXF1ZXN0U2l6ZSB8fCBoZWFkZXIudG90YWxTdW1tYXJ5T2Zmc2V0ID4gcmVxdWVzdFNpemUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRNYWluSGVhZGVyKG9wdHMsIHJlcXVlc3RTaXplICogMilcbiAgICB9XG4gICAgaWYgKGhlYWRlci5hc09mZnNldCkge1xuICAgICAgaGVhZGVyLmF1dG9TcWwgPSBidWZmZXJcbiAgICAgICAgLnNsaWNlKGhlYWRlci5hc09mZnNldCwgYnVmZmVyLmluZGV4T2YoMCwgaGVhZGVyLmFzT2Zmc2V0KSlcbiAgICAgICAgLnRvU3RyaW5nKCd1dGY4JylcbiAgICB9XG4gICAgaWYgKGhlYWRlci50b3RhbFN1bW1hcnlPZmZzZXQgPiByZXF1ZXN0U2l6ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldE1haW5IZWFkZXIob3B0cywgcmVxdWVzdFNpemUgKiAyKVxuICAgIH1cbiAgICBpZiAoaGVhZGVyLnRvdGFsU3VtbWFyeU9mZnNldCkge1xuICAgICAgY29uc3QgdGFpbCA9IGJ1ZmZlci5zbGljZShoZWFkZXIudG90YWxTdW1tYXJ5T2Zmc2V0KVxuICAgICAgaGVhZGVyLnRvdGFsU3VtbWFyeSA9IHJldC50b3RhbFN1bW1hcnlQYXJzZXIucGFyc2UodGFpbCkucmVzdWx0XG4gICAgfVxuICAgIHJldHVybiB7IC4uLmhlYWRlciwgaXNCaWdFbmRpYW4gfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNCaWdFbmRpYW4oYnVmZmVyOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICBsZXQgcmV0ID0gYnVmZmVyLnJlYWRJbnQzMkxFKDApXG4gICAgaWYgKHJldCA9PT0gQklHX1dJR19NQUdJQyB8fCByZXQgPT09IEJJR19CRURfTUFHSUMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXQgPSBidWZmZXIucmVhZEludDMyQkUoMClcbiAgICBpZiAocmV0ID09PSBCSUdfV0lHX01BR0lDIHx8IHJldCA9PT0gQklHX0JFRF9NQUdJQykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgYSBCaWdXaWcvQmlnQmVkIGZpbGUnKVxuICB9XG5cbiAgLy8gdG9kbzogYWRkIHByb2dyZXNzIGlmIGxvbmcgcnVubmluZ1xuICBwcml2YXRlIGFzeW5jIF9yZWFkQ2hyb21UcmVlKGhlYWRlcjogSGVhZGVyLCBvcHRzOiB7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0pIHtcbiAgICBjb25zdCBpc0JFID0gaGVhZGVyLmlzQmlnRW5kaWFuXG4gICAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICAgIGNvbnN0IHJlZnNCeU51bWJlcjogeyBba2V5OiBudW1iZXJdOiB7IG5hbWU6IHN0cmluZzsgaWQ6IG51bWJlcjsgbGVuZ3RoOiBudW1iZXIgfSB9ID0gW11cbiAgICBjb25zdCByZWZzQnlOYW1lOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge31cbiAgICBjb25zdCB7IGNocm9tVHJlZU9mZnNldCB9ID0gaGVhZGVyXG4gICAgbGV0IHsgdW56b29tZWREYXRhT2Zmc2V0IH0gPSBoZWFkZXJcblxuICAgIHdoaWxlICh1bnpvb21lZERhdGFPZmZzZXQgJSA0ICE9PSAwKSB7XG4gICAgICB1bnpvb21lZERhdGFPZmZzZXQgKz0gMVxuICAgIH1cblxuICAgIGNvbnN0IHsgYnVmZmVyOiBkYXRhIH0gPSBhd2FpdCB0aGlzLmJiaS5yZWFkKFxuICAgICAgQnVmZmVyLmFsbG9jKHVuem9vbWVkRGF0YU9mZnNldCAtIGNocm9tVHJlZU9mZnNldCksXG4gICAgICAwLFxuICAgICAgdW56b29tZWREYXRhT2Zmc2V0IC0gY2hyb21UcmVlT2Zmc2V0LFxuICAgICAgY2hyb21UcmVlT2Zmc2V0LFxuICAgICAgb3B0cyxcbiAgICApXG5cbiAgICBjb25zdCBwID0gZ2V0UGFyc2Vycyhpc0JFKVxuICAgIGNvbnN0IHsga2V5U2l6ZSB9ID0gcC5jaHJvbVRyZWVQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgY29uc3QgbGVhZk5vZGVQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAgIC5lbmRpYW5lc3MobGUpXG4gICAgICAuc3RyaW5nKCdrZXknLCB7IHN0cmlwTnVsbDogdHJ1ZSwgbGVuZ3RoOiBrZXlTaXplIH0pXG4gICAgICAudWludDMyKCdyZWZJZCcpXG4gICAgICAudWludDMyKCdyZWZTaXplJylcbiAgICBjb25zdCBub25sZWFmTm9kZVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5za2lwKGtleVNpemUpXG4gICAgICAudWludDY0KCdjaGlsZE9mZnNldCcpXG4gICAgY29uc3Qgcm9vdE5vZGVPZmZzZXQgPSAzMlxuICAgIGNvbnN0IGJwdFJlYWROb2RlID0gYXN5bmMgKGN1cnJlbnRPZmZzZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgbGV0IG9mZnNldCA9IGN1cnJlbnRPZmZzZXRcbiAgICAgIGlmIChvZmZzZXQgPj0gZGF0YS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcigncmVhZGluZyBiZXlvbmQgZW5kIG9mIGJ1ZmZlcicpXG4gICAgICBjb25zdCByZXQgPSBwLmlzTGVhZk5vZGUucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgY29uc3QgeyBpc0xlYWZOb2RlLCBjbnQgfSA9IHJldC5yZXN1bHRcbiAgICAgIG9mZnNldCArPSByZXQub2Zmc2V0XG4gICAgICBpZiAoaXNMZWFmTm9kZSkge1xuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGNudDsgbiArPSAxKSB7XG4gICAgICAgICAgY29uc3QgbGVhZlJldCA9IGxlYWZOb2RlUGFyc2VyLnBhcnNlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgICAgICBvZmZzZXQgKz0gbGVhZlJldC5vZmZzZXRcbiAgICAgICAgICBjb25zdCB7IGtleSwgcmVmSWQsIHJlZlNpemUgfSA9IGxlYWZSZXQucmVzdWx0XG4gICAgICAgICAgY29uc3QgcmVmUmVjID0geyBuYW1lOiBrZXksIGlkOiByZWZJZCwgbGVuZ3RoOiByZWZTaXplIH1cbiAgICAgICAgICByZWZzQnlOYW1lW3RoaXMucmVuYW1lUmVmU2VxcyhrZXkpXSA9IHJlZklkXG4gICAgICAgICAgcmVmc0J5TnVtYmVyW3JlZklkXSA9IHJlZlJlY1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYXJzZSBpbmRleCBub2RlXG4gICAgICAgIGNvbnN0IG5leHROb2RlcyA9IFtdXG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgY250OyBuICs9IDEpIHtcbiAgICAgICAgICBjb25zdCBub25sZWFmUmV0ID0gbm9ubGVhZk5vZGVQYXJzZXIucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgICAgIGxldCB7IGNoaWxkT2Zmc2V0IH0gPSBub25sZWFmUmV0LnJlc3VsdFxuICAgICAgICAgIG9mZnNldCArPSBub25sZWFmUmV0Lm9mZnNldFxuICAgICAgICAgIGNoaWxkT2Zmc2V0IC09IGNocm9tVHJlZU9mZnNldFxuICAgICAgICAgIG5leHROb2Rlcy5wdXNoKGJwdFJlYWROb2RlKGNoaWxkT2Zmc2V0KSlcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChuZXh0Tm9kZXMpXG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IGJwdFJlYWROb2RlKHJvb3ROb2RlT2Zmc2V0KVxuICAgIHJldHVybiB7XG4gICAgICByZWZzQnlOYW1lLFxuICAgICAgcmVmc0J5TnVtYmVyLFxuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIGZldGNoZXMgdGhlIFwidW56b29tZWRcIiB2aWV3IG9mIHRoZSBiaWd3aWcgZGF0YS4gdGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgYmlnYmVkXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIGEgc2lnbmFsIHRvIG9wdGlvbmFsbHkgYWJvcnQgdGhpcyBvcGVyYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRVbnpvb21lZFZpZXcob3B0czogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEJsb2NrVmlldz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHVuem9vbWVkSW5kZXhPZmZzZXQsXG4gICAgICB6b29tTGV2ZWxzLFxuICAgICAgcmVmc0J5TmFtZSxcbiAgICAgIHVuY29tcHJlc3NCdWZTaXplLFxuICAgICAgaXNCaWdFbmRpYW4sXG4gICAgICBmaWxlVHlwZSxcbiAgICB9ID0gYXdhaXQgdGhpcy5nZXRIZWFkZXIob3B0cylcbiAgICBjb25zdCBuemwgPSB6b29tTGV2ZWxzWzBdXG4gICAgY29uc3QgY2lyTGVuID0gbnpsID8gbnpsLmRhdGFPZmZzZXQgLSB1bnpvb21lZEluZGV4T2Zmc2V0IDogNDAwMFxuICAgIHJldHVybiBuZXcgQmxvY2tWaWV3KFxuICAgICAgdGhpcy5iYmksXG4gICAgICByZWZzQnlOYW1lLFxuICAgICAgdW56b29tZWRJbmRleE9mZnNldCxcbiAgICAgIGNpckxlbixcbiAgICAgIGlzQmlnRW5kaWFuLFxuICAgICAgdW5jb21wcmVzc0J1ZlNpemUgPiAwLFxuICAgICAgZmlsZVR5cGUsXG4gICAgKVxuICB9XG5cbiAgLypcbiAgICogYWJzdHJhY3QgbWV0aG9kIC0gZ2V0IHRoZSB2aWV3IGZvciBhIGdpdmVuIHNjYWxlXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYXN5bmMgZ2V0VmlldyhzY2FsZTogbnVtYmVyLCBvcHRzOiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8QmxvY2tWaWV3PlxuXG4gIC8qKlxuICAgKiBHZXRzIGZlYXR1cmVzIGZyb20gYSBCaWdXaWcgZmlsZVxuICAgKlxuICAgKiBAcGFyYW0gcmVmTmFtZSAtIFRoZSBjaHJvbW9zb21lIG5hbWVcbiAgICogQHBhcmFtIHN0YXJ0IC0gVGhlIHN0YXJ0IG9mIGEgcmVnaW9uXG4gICAqIEBwYXJhbSBlbmQgLSBUaGUgZW5kIG9mIGEgcmVnaW9uXG4gICAqIEBwYXJhbSBvcHRzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYmFzZXNQZXJTcGFuIChlLmcuIHBpeGVscyBwZXIgYmFzZXBhaXIpIG9yIHNjYWxlIHVzZWQgdG8gaW5mZXIgdGhlIHpvb21MZXZlbCB0byB1c2VcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlU3RyZWFtKFxuICAgIHJlZk5hbWU6IHN0cmluZyxcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIGVuZDogbnVtYmVyLFxuICAgIG9wdHM6IFJlcXVlc3RPcHRpb25zICYgeyBzY2FsZT86IG51bWJlcjsgYmFzZXNQZXJTcGFuPzogbnVtYmVyIH0gPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8T2JzZXJ2YWJsZTxGZWF0dXJlW10+PiB7XG4gICAgYXdhaXQgdGhpcy5nZXRIZWFkZXIob3B0cylcbiAgICBjb25zdCBjaHJOYW1lID0gdGhpcy5yZW5hbWVSZWZTZXFzKHJlZk5hbWUpXG4gICAgbGV0IHZpZXc6IEJsb2NrVmlld1xuXG4gICAgaWYgKG9wdHMuYmFzZXNQZXJTcGFuKSB7XG4gICAgICB2aWV3ID0gYXdhaXQgdGhpcy5nZXRWaWV3KDEgLyBvcHRzLmJhc2VzUGVyU3Bhbiwgb3B0cylcbiAgICB9IGVsc2UgaWYgKG9wdHMuc2NhbGUpIHtcbiAgICAgIHZpZXcgPSBhd2FpdCB0aGlzLmdldFZpZXcob3B0cy5zY2FsZSwgb3B0cylcbiAgICB9IGVsc2Uge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxLCBvcHRzKVxuICAgIH1cblxuICAgIGlmICghdmlldykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gZ2V0IGJsb2NrIHZpZXcgZm9yIGRhdGEnKVxuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+KTogdm9pZCA9PiB7XG4gICAgICB2aWV3LnJlYWRXaWdEYXRhKGNock5hbWUsIHN0YXJ0LCBlbmQsIG9ic2VydmVyLCBvcHRzKVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZXMoXG4gICAgcmVmTmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXIsXG4gICAgb3B0czogUmVxdWVzdE9wdGlvbnMgJiB7IHNjYWxlPzogbnVtYmVyOyBiYXNlc1BlclNwYW4/OiBudW1iZXIgfSA9IHsgc2NhbGU6IDEgfSxcbiAgKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICBjb25zdCBvYiA9IGF3YWl0IHRoaXMuZ2V0RmVhdHVyZVN0cmVhbShyZWZOYW1lLCBzdGFydCwgZW5kLCBvcHRzKVxuXG4gICAgY29uc3QgcmV0ID0gYXdhaXQgb2IucGlwZShyZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjLmNvbmNhdChjdXJyKSkpLnRvUHJvbWlzZSgpXG4gICAgcmV0dXJuIHJldCB8fCBbXVxuICB9XG59XG4iXX0=

@@ -6,3 +6,3 @@ import { BBI, Feature, RequestOptions } from './bbi';

readIndicesCache: any;
constructor(opts: any);
constructor(opts?: any);
readIndices(opts?: AbortSignal | RequestOptions): any;

@@ -9,0 +9,0 @@ protected getView(scale: number, opts: RequestOptions): Promise<BlockView>;

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.filterUndef = filterUndef;
exports.BigBed = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _binaryParser = require("@gmod/binary-parser");
var _rxjs = require("rxjs");
var _operators = require("rxjs/operators");
var _abortablePromiseCache = _interopRequireDefault(require("abortable-promise-cache"));
var _quickLru = _interopRequireDefault(require("quick-lru"));
var _bbi = require("./bbi");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(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) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(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 = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(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 });
exports.BigBed = exports.filterUndef = void 0;
var binary_parser_1 = require("@gmod/binary-parser");
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
var quick_lru_1 = __importDefault(require("quick-lru"));
var bbi_1 = require("./bbi");
function filterUndef(ts) {
return ts.filter(function (t) {
return !!t;
});
return ts.filter(function (t) { return !!t; });
}
var BigBed = /*#__PURE__*/function (_BBI) {
(0, _inherits2.default)(BigBed, _BBI);
var _super = _createSuper(BigBed);
function BigBed(opts) {
var _this;
(0, _classCallCheck2.default)(this, BigBed);
_this = _super.call(this, opts);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "readIndicesCache", new _abortablePromiseCache.default({
cache: new _quickLru.default({
maxSize: 1
}),
fill: function () {
var _fill = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(args, signal) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", _this._readIndices(_objectSpread(_objectSpread({}, args), {}, {
signal: signal
})));
case 1:
case "end":
return _context.stop();
}
}
}, _callee);
}));
function fill(_x, _x2) {
return _fill.apply(this, arguments);
}
return fill;
}()
}));
return _this;
}
(0, _createClass2.default)(BigBed, [{
key: "readIndices",
value: function readIndices() {
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var options = 'aborted' in opts ? {
signal: opts
} : opts;
return this.readIndicesCache.get(JSON.stringify(options), options, options.signal);
exports.filterUndef = filterUndef;
var BigBed = /** @class */ (function (_super) {
__extends(BigBed, _super);
function BigBed(opts) {
var _this = _super.call(this, opts) || this;
_this.readIndicesCache = new abortable_promise_cache_1.default({
cache: new quick_lru_1.default({ maxSize: 1 }),
fill: function (args, signal) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this._readIndices(__assign(__assign({}, args), { signal: signal }))];
});
}); },
});
return _this;
}
BigBed.prototype.readIndices = function (opts) {
if (opts === void 0) { opts = {}; }
var options = 'aborted' in opts ? { signal: opts } : opts;
return this.readIndicesCache.get(JSON.stringify(options), options, options.signal);
};
/*

@@ -114,27 +104,9 @@ * retrieve unzoomed view for any scale

*/
}, {
key: "getView",
value: function () {
var _getView = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(scale, opts) {
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", this.getUnzoomedView(opts));
case 1:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function getView(_x3, _x4) {
return _getView.apply(this, arguments);
}
return getView;
}()
BigBed.prototype.getView = function (scale, opts) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.getUnzoomedView(opts)];
});
});
};
/*

@@ -145,69 +117,46 @@ * parse the bigbed extraIndex fields

*/
}, {
key: "_readIndices",
value: function () {
var _readIndices2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(opts) {
var _yield$this$getHeader, extHeaderOffset, isBigEndian, _yield$this$bbi$read, data, le, ret, count, offset, blocklen, len, _yield$this$bbi$read2, buffer, extParser, indices, i;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return this.getHeader(opts);
case 2:
_yield$this$getHeader = _context3.sent;
extHeaderOffset = _yield$this$getHeader.extHeaderOffset;
isBigEndian = _yield$this$getHeader.isBigEndian;
_context3.next = 7;
return this.bbi.read(Buffer.alloc(64), 0, 64, extHeaderOffset);
case 7:
_yield$this$bbi$read = _context3.sent;
data = _yield$this$bbi$read.buffer;
le = isBigEndian ? 'big' : 'little';
ret = new _binaryParser.Parser().endianess(le).uint16('size').uint16('count').uint64('offset').parse(data).result;
count = ret.count, offset = ret.offset; // no extra index is defined if count==0
if (!(count === 0)) {
_context3.next = 14;
break;
BigBed.prototype._readIndices = function (opts) {
return __awaiter(this, void 0, void 0, function () {
var _a, extHeaderOffset, isBigEndian, data, le, ret, count, offset, blocklen, len, buffer, extParser, indices, i;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.getHeader(opts)];
case 1:
_a = _b.sent(), extHeaderOffset = _a.extHeaderOffset, isBigEndian = _a.isBigEndian;
return [4 /*yield*/, this.bbi.read(Buffer.alloc(64), 0, 64, extHeaderOffset)];
case 2:
data = (_b.sent()).buffer;
le = isBigEndian ? 'big' : 'little';
ret = new binary_parser_1.Parser()
.endianess(le)
.uint16('size')
.uint16('count')
.uint64('offset')
.parse(data).result;
count = ret.count, offset = ret.offset;
// no extra index is defined if count==0
if (count === 0) {
return [2 /*return*/, []];
}
blocklen = 20;
len = blocklen * count;
return [4 /*yield*/, this.bbi.read(Buffer.alloc(len), 0, len, offset)];
case 3:
buffer = (_b.sent()).buffer;
extParser = new binary_parser_1.Parser()
.endianess(le)
.int16('type')
.int16('fieldcount')
.uint64('offset')
.skip(4)
.int16('field');
indices = [];
for (i = 0; i < count; i += 1) {
indices.push(extParser.parse(buffer.slice(i * blocklen)).result);
}
return [2 /*return*/, indices];
}
return _context3.abrupt("return", []);
case 14:
blocklen = 20;
len = blocklen * count;
_context3.next = 18;
return this.bbi.read(Buffer.alloc(len), 0, len, offset);
case 18:
_yield$this$bbi$read2 = _context3.sent;
buffer = _yield$this$bbi$read2.buffer;
extParser = new _binaryParser.Parser().endianess(le).int16('type').int16('fieldcount').uint64('offset').skip(4).int16('field');
indices = [];
for (i = 0; i < count; i += 1) {
indices.push(extParser.parse(buffer.slice(i * blocklen)).result);
}
return _context3.abrupt("return", indices);
case 24:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function _readIndices(_x5) {
return _readIndices2.apply(this, arguments);
}
return _readIndices;
}()
});
});
};
/*

@@ -221,204 +170,102 @@ * perform a search in the bigbed extraIndex to find which blocks in the bigbed data to look for the

*/
}, {
key: "searchExtraIndexBlocks",
value: function () {
var _searchExtraIndexBlocks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(name) {
var _this2 = this;
var opts,
_yield$this$getHeader2,
isBigEndian,
indices,
locs,
_args6 = arguments;
return _regenerator.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
opts = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : {};
_context6.next = 3;
return this.getHeader(opts);
case 3:
_yield$this$getHeader2 = _context6.sent;
isBigEndian = _yield$this$getHeader2.isBigEndian;
_context6.next = 7;
return this.readIndices(opts);
case 7:
indices = _context6.sent;
if (indices.length) {
_context6.next = 10;
break;
BigBed.prototype.searchExtraIndexBlocks = function (name, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var isBigEndian, indices, locs, _a;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.getHeader(opts)];
case 1:
isBigEndian = (_b.sent()).isBigEndian;
return [4 /*yield*/, this.readIndices(opts)];
case 2:
indices = _b.sent();
if (!indices.length) {
return [2 /*return*/, []];
}
locs = indices.map(function (index) { return __awaiter(_this, void 0, void 0, function () {
var offset, field, data, p, _a, blockSize, keySize, valSize, bpt, bptReadNode, rootNodeOffset;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
offset = index.offset, field = index.field;
return [4 /*yield*/, this.bbi.read(Buffer.alloc(32), 0, 32, offset, opts)];
case 1:
data = (_b.sent()).buffer;
p = new binary_parser_1.Parser()
.endianess(isBigEndian ? 'big' : 'little')
.int32('magic')
.int32('blockSize')
.int32('keySize')
.int32('valSize')
.uint64('itemCount');
_a = p.parse(data).result, blockSize = _a.blockSize, keySize = _a.keySize, valSize = _a.valSize;
bpt = new binary_parser_1.Parser()
.endianess(isBigEndian ? 'big' : 'little')
.int8('nodeType')
.skip(1)
.int16('cnt')
.choice({
tag: 'nodeType',
choices: {
0: new binary_parser_1.Parser().array('leafkeys', {
length: 'cnt',
type: new binary_parser_1.Parser()
.string('key', { length: keySize, stripNull: true })
.uint64('offset'),
}),
1: new binary_parser_1.Parser().array('keys', {
length: 'cnt',
type: new binary_parser_1.Parser()
.string('key', { length: keySize, stripNull: true })
.uint64('offset')
.uint32('length')
.uint32('reserved'),
}),
},
});
bptReadNode = function (nodeOffset) { return __awaiter(_this, void 0, void 0, function () {
var len, buffer, node, lastOffset, i, key, i;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
len = 4 + blockSize * (keySize + valSize);
return [4 /*yield*/, this.bbi.read(Buffer.alloc(len), 0, len, nodeOffset, opts)];
case 1:
buffer = (_a.sent()).buffer;
node = bpt.parse(buffer).result;
if (node.leafkeys) {
lastOffset = void 0;
for (i = 0; i < node.leafkeys.length; i += 1) {
key = node.leafkeys[i].key;
if (name.localeCompare(key) < 0 && lastOffset) {
return [2 /*return*/, bptReadNode(lastOffset)];
}
lastOffset = node.leafkeys[i].offset;
}
return [2 /*return*/, bptReadNode(lastOffset)];
}
for (i = 0; i < node.keys.length; i += 1) {
if (node.keys[i].key === name) {
return [2 /*return*/, __assign(__assign({}, node.keys[i]), { field: field })];
}
}
return [2 /*return*/, undefined];
}
});
}); };
rootNodeOffset = 32;
return [2 /*return*/, bptReadNode(offset + rootNodeOffset)];
}
});
}); });
_a = filterUndef;
return [4 /*yield*/, Promise.all(locs)];
case 3: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];
}
return _context6.abrupt("return", []);
case 10:
locs = indices.map( /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(index) {
var offset, field, _yield$_this2$bbi$rea, data, p, _p$parse$result, blockSize, keySize, valSize, bpt, bptReadNode, rootNodeOffset;
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
offset = index.offset, field = index.field;
_context5.next = 3;
return _this2.bbi.read(Buffer.alloc(32), 0, 32, offset, opts);
case 3:
_yield$_this2$bbi$rea = _context5.sent;
data = _yield$_this2$bbi$rea.buffer;
p = new _binaryParser.Parser().endianess(isBigEndian ? 'big' : 'little').int32('magic').int32('blockSize').int32('keySize').int32('valSize').uint64('itemCount');
_p$parse$result = p.parse(data).result, blockSize = _p$parse$result.blockSize, keySize = _p$parse$result.keySize, valSize = _p$parse$result.valSize;
bpt = new _binaryParser.Parser().endianess(isBigEndian ? 'big' : 'little').int8('nodeType').skip(1).int16('cnt').choice({
tag: 'nodeType',
choices: {
0: new _binaryParser.Parser().array('leafkeys', {
length: 'cnt',
type: new _binaryParser.Parser().string('key', {
length: keySize,
stripNull: true
}).uint64('offset')
}),
1: new _binaryParser.Parser().array('keys', {
length: 'cnt',
type: new _binaryParser.Parser().string('key', {
length: keySize,
stripNull: true
}).uint64('offset').uint32('length').uint32('reserved')
})
}
});
bptReadNode = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(nodeOffset) {
var len, _yield$_this2$bbi$rea2, buffer, node, lastOffset, i, key, _i;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
len = 4 + blockSize * (keySize + valSize);
_context4.next = 3;
return _this2.bbi.read(Buffer.alloc(len), 0, len, nodeOffset, opts);
case 3:
_yield$_this2$bbi$rea2 = _context4.sent;
buffer = _yield$_this2$bbi$rea2.buffer;
node = bpt.parse(buffer).result;
if (!node.leafkeys) {
_context4.next = 17;
break;
}
i = 0;
case 8:
if (!(i < node.leafkeys.length)) {
_context4.next = 16;
break;
}
key = node.leafkeys[i].key;
if (!(name.localeCompare(key) < 0 && lastOffset)) {
_context4.next = 12;
break;
}
return _context4.abrupt("return", bptReadNode(lastOffset));
case 12:
lastOffset = node.leafkeys[i].offset;
case 13:
i += 1;
_context4.next = 8;
break;
case 16:
return _context4.abrupt("return", bptReadNode(lastOffset));
case 17:
_i = 0;
case 18:
if (!(_i < node.keys.length)) {
_context4.next = 24;
break;
}
if (!(node.keys[_i].key === name)) {
_context4.next = 21;
break;
}
return _context4.abrupt("return", _objectSpread(_objectSpread({}, node.keys[_i]), {}, {
field: field
}));
case 21:
_i += 1;
_context4.next = 18;
break;
case 24:
return _context4.abrupt("return", undefined);
case 25:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return function bptReadNode(_x8) {
return _ref2.apply(this, arguments);
};
}();
rootNodeOffset = 32;
return _context5.abrupt("return", bptReadNode(offset + rootNodeOffset));
case 11:
case "end":
return _context5.stop();
}
}
}, _callee5);
}));
return function (_x7) {
return _ref.apply(this, arguments);
};
}());
_context6.t0 = filterUndef;
_context6.next = 14;
return Promise.all(locs);
case 14:
_context6.t1 = _context6.sent;
return _context6.abrupt("return", (0, _context6.t0)(_context6.t1));
case 16:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
function searchExtraIndexBlocks(_x6) {
return _searchExtraIndexBlocks.apply(this, arguments);
}
return searchExtraIndexBlocks;
}()
});
});
};
/*

@@ -432,78 +279,39 @@ * retrieve the features from the bigbed data that were found through the lookup of the extraIndex

*/
}, {
key: "searchExtraIndex",
value: function () {
var _searchExtraIndex = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(name) {
var opts,
blocks,
view,
res,
ret,
_args7 = arguments;
return _regenerator.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
opts = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : {};
_context7.next = 3;
return this.searchExtraIndexBlocks(name, opts);
case 3:
blocks = _context7.sent;
if (blocks.length) {
_context7.next = 6;
break;
BigBed.prototype.searchExtraIndex = function (name, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var blocks, view, res, ret;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.searchExtraIndexBlocks(name, opts)];
case 1:
blocks = _a.sent();
if (!blocks.length) {
return [2 /*return*/, []];
}
return [4 /*yield*/, this.getUnzoomedView(opts)];
case 2:
view = _a.sent();
res = blocks.map(function (block) {
return new rxjs_1.Observable(function (observer) {
view.readFeatures(observer, [block], opts);
}).pipe((0, operators_1.reduce)(function (acc, curr) { return acc.concat(curr); }), (0, operators_1.map)(function (x) {
for (var i = 0; i < x.length; i += 1) {
x[i].field = block.field;
}
return x;
}));
});
return [4 /*yield*/, rxjs_1.merge.apply(void 0, res).toPromise()];
case 3:
ret = _a.sent();
return [2 /*return*/, ret.filter(function (f) {
return f.rest.split('\t')[f.field - 3] === name;
})];
}
return _context7.abrupt("return", []);
case 6:
_context7.next = 8;
return this.getUnzoomedView(opts);
case 8:
view = _context7.sent;
res = blocks.map(function (block) {
return new _rxjs.Observable(function (observer) {
view.readFeatures(observer, [block], opts);
}).pipe((0, _operators.reduce)(function (acc, curr) {
return acc.concat(curr);
}), (0, _operators.map)(function (x) {
for (var i = 0; i < x.length; i += 1) {
x[i].field = block.field; // eslint-disable-line
}
return x;
}));
});
_context7.next = 12;
return _rxjs.merge.apply(void 0, (0, _toConsumableArray2.default)(res)).toPromise();
case 12:
ret = _context7.sent;
return _context7.abrupt("return", ret.filter(function (f) {
return f.rest.split('\t')[f.field - 3] === name;
}));
case 14:
case "end":
return _context7.stop();
}
}
}, _callee7, this);
}));
function searchExtraIndex(_x9) {
return _searchExtraIndex.apply(this, arguments);
}
return searchExtraIndex;
}()
}]);
return BigBed;
}(_bbi.BBI);
});
});
};
return BigBed;
}(bbi_1.BBI));
exports.BigBed = BigBed;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iaWdiZWQudHMiXSwibmFtZXMiOlsiZmlsdGVyVW5kZWYiLCJ0cyIsImZpbHRlciIsInQiLCJCaWdCZWQiLCJvcHRzIiwiQWJvcnRhYmxlUHJvbWlzZUNhY2hlIiwiY2FjaGUiLCJRdWlja0xSVSIsIm1heFNpemUiLCJmaWxsIiwiYXJncyIsInNpZ25hbCIsIl9yZWFkSW5kaWNlcyIsIm9wdGlvbnMiLCJyZWFkSW5kaWNlc0NhY2hlIiwiZ2V0IiwiSlNPTiIsInN0cmluZ2lmeSIsInNjYWxlIiwiZ2V0VW56b29tZWRWaWV3IiwiZ2V0SGVhZGVyIiwiZXh0SGVhZGVyT2Zmc2V0IiwiaXNCaWdFbmRpYW4iLCJiYmkiLCJyZWFkIiwiQnVmZmVyIiwiYWxsb2MiLCJkYXRhIiwiYnVmZmVyIiwibGUiLCJyZXQiLCJQYXJzZXIiLCJlbmRpYW5lc3MiLCJ1aW50MTYiLCJ1aW50NjQiLCJwYXJzZSIsInJlc3VsdCIsImNvdW50Iiwib2Zmc2V0IiwiYmxvY2tsZW4iLCJsZW4iLCJleHRQYXJzZXIiLCJpbnQxNiIsInNraXAiLCJpbmRpY2VzIiwiaSIsInB1c2giLCJzbGljZSIsIm5hbWUiLCJyZWFkSW5kaWNlcyIsImxlbmd0aCIsImxvY3MiLCJtYXAiLCJpbmRleCIsImZpZWxkIiwicCIsImludDMyIiwiYmxvY2tTaXplIiwia2V5U2l6ZSIsInZhbFNpemUiLCJicHQiLCJpbnQ4IiwiY2hvaWNlIiwidGFnIiwiY2hvaWNlcyIsImFycmF5IiwidHlwZSIsInN0cmluZyIsInN0cmlwTnVsbCIsInVpbnQzMiIsImJwdFJlYWROb2RlIiwibm9kZU9mZnNldCIsIm5vZGUiLCJsZWFma2V5cyIsImtleSIsImxvY2FsZUNvbXBhcmUiLCJsYXN0T2Zmc2V0Iiwia2V5cyIsInVuZGVmaW5lZCIsInJvb3ROb2RlT2Zmc2V0IiwiUHJvbWlzZSIsImFsbCIsInNlYXJjaEV4dHJhSW5kZXhCbG9ja3MiLCJibG9ja3MiLCJ2aWV3IiwicmVzIiwiYmxvY2siLCJPYnNlcnZhYmxlIiwib2JzZXJ2ZXIiLCJyZWFkRmVhdHVyZXMiLCJwaXBlIiwiYWNjIiwiY3VyciIsImNvbmNhdCIsIngiLCJtZXJnZSIsInRvUHJvbWlzZSIsImYiLCJyZXN0Iiwic3BsaXQiLCJCQkkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7Ozs7O0FBaUJPLFNBQVNBLFdBQVQsQ0FBd0JDLEVBQXhCLEVBQW9EO0FBQ3pELFNBQU9BLEVBQUUsQ0FBQ0MsTUFBSCxDQUFVLFVBQUNDLENBQUQ7QUFBQSxXQUE4QixDQUFDLENBQUNBLENBQWhDO0FBQUEsR0FBVixDQUFQO0FBQ0Q7O0lBRVlDLE07Ozs7O0FBUVgsa0JBQW1CQyxJQUFuQixFQUE4QjtBQUFBOztBQUFBO0FBQzVCLDhCQUFNQSxJQUFOO0FBRDRCLG1HQVBKLElBQUlDLDhCQUFKLENBQTBCO0FBQ2xEQyxNQUFBQSxLQUFLLEVBQUUsSUFBSUMsaUJBQUosQ0FBYTtBQUFFQyxRQUFBQSxPQUFPLEVBQUU7QUFBWCxPQUFiLENBRDJDO0FBRWxEQyxNQUFBQSxJQUFJO0FBQUEsNEZBQUUsaUJBQU9DLElBQVAsRUFBa0JDLE1BQWxCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtREFDRyxNQUFLQyxZQUFMLGlDQUF1QkYsSUFBdkI7QUFBNkJDLG9CQUFBQSxNQUFNLEVBQU5BO0FBQTdCLHFCQURIOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQUY7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFGOEMsS0FBMUIsQ0FPSTtBQUFBO0FBRTdCOzs7O2tDQUUyRDtBQUFBLFVBQXpDUCxJQUF5Qyx1RUFBSixFQUFJO0FBQzFELFVBQU1TLE9BQU8sR0FBRyxhQUFhVCxJQUFiLEdBQW9CO0FBQUVPLFFBQUFBLE1BQU0sRUFBRVA7QUFBVixPQUFwQixHQUF1Q0EsSUFBdkQ7QUFDQSxhQUFPLEtBQUtVLGdCQUFMLENBQXNCQyxHQUF0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QU9BLENBQUMsQ0FBQ0MsSUFBRixDQUFPQyxLQUFQLENBQWEsSUFBYixFQUFtQkYsQ0FBQyxDQUFDM0MsS0FBRixHQUFVLENBQTdCLE1BQW9DTixJQUEzQztBQUNELGlCQUZNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQS9LaUJvRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnQGdtb2QvYmluYXJ5LXBhcnNlcidcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBtZXJnZSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBtYXAsIHJlZHVjZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IEFib3J0YWJsZVByb21pc2VDYWNoZSBmcm9tICdhYm9ydGFibGUtcHJvbWlzZS1jYWNoZSdcbmltcG9ydCBRdWlja0xSVSBmcm9tICdxdWljay1scnUnXG5cbmltcG9ydCB7IEJCSSwgRmVhdHVyZSwgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2JiaSdcbmltcG9ydCB7IEJsb2NrVmlldyB9IGZyb20gJy4vYmxvY2tWaWV3J1xuXG5pbnRlcmZhY2UgTG9jIHtcbiAga2V5OiBzdHJpbmdcbiAgb2Zmc2V0OiBudW1iZXJcbiAgbGVuZ3RoOiBudW1iZXJcbiAgZmllbGQ/OiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIEluZGV4IHtcbiAgdHlwZTogbnVtYmVyXG4gIGZpZWxkY291bnQ6IG51bWJlclxuICBvZmZzZXQ6IG51bWJlclxuICBmaWVsZDogbnVtYmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJVbmRlZjxUPih0czogKFQgfCB1bmRlZmluZWQpW10pOiBUW10ge1xuICByZXR1cm4gdHMuZmlsdGVyKCh0OiBUIHwgdW5kZWZpbmVkKTogdCBpcyBUID0+ICEhdClcbn1cblxuZXhwb3J0IGNsYXNzIEJpZ0JlZCBleHRlbmRzIEJCSSB7XG4gIHB1YmxpYyByZWFkSW5kaWNlc0NhY2hlID0gbmV3IEFib3J0YWJsZVByb21pc2VDYWNoZSh7XG4gICAgY2FjaGU6IG5ldyBRdWlja0xSVSh7IG1heFNpemU6IDEgfSksXG4gICAgZmlsbDogYXN5bmMgKGFyZ3M6IGFueSwgc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkSW5kaWNlcyh7IC4uLmFyZ3MsIHNpZ25hbCB9KVxuICAgIH0sXG4gIH0pXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdHM6IGFueSkge1xuICAgIHN1cGVyKG9wdHMpXG4gIH1cblxuICBwdWJsaWMgcmVhZEluZGljZXMob3B0czogQWJvcnRTaWduYWwgfCBSZXF1ZXN0T3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9ICdhYm9ydGVkJyBpbiBvcHRzID8geyBzaWduYWw6IG9wdHMgfSA6IG9wdHNcbiAgICByZXR1cm4gdGhpcy5yZWFkSW5kaWNlc0NhY2hlLmdldChKU09OLnN0cmluZ2lmeShvcHRpb25zKSwgb3B0aW9ucywgb3B0aW9ucy5zaWduYWwpXG4gIH1cblxuICAvKlxuICAgKiByZXRyaWV2ZSB1bnpvb21lZCB2aWV3IGZvciBhbnkgc2NhbGVcbiAgICogQHBhcmFtIHNjYWxlIC0gdW51c2VkXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIGFuIG9wdGlvbmFsIEFib3J0U2lnbmFsIHRvIGtpbGwgb3BlcmF0aW9uXG4gICAqIEByZXR1cm4gcHJvbWlzZSBmb3IgYSBCbG9ja1ZpZXdcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRWaWV3KHNjYWxlOiBudW1iZXIsIG9wdHM6IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxCbG9ja1ZpZXc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVbnpvb21lZFZpZXcob3B0cylcbiAgfVxuXG4gIC8qXG4gICAqIHBhcnNlIHRoZSBiaWdiZWQgZXh0cmFJbmRleCBmaWVsZHNcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIHRvIGFib3J0IG9wZXJhdGlvblxuICAgKiBAcmV0dXJuIGEgUHJvbWlzZSBmb3IgYW4gYXJyYXkgb2YgSW5kZXggZGF0YSBzdHJ1Y3R1cmUgc2luY2UgdGhlcmUgY2FuIGJlIG11bHRpcGxlIGV4dHJhSW5kZXhlcyBpbiBhIGJpZ2JlZCwgc2VlIGJlZFRvQmlnQmVkIGRvY3VtZW50YXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRJbmRpY2VzKG9wdHM6IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxJbmRleFtdPiB7XG4gICAgY29uc3QgeyBleHRIZWFkZXJPZmZzZXQsIGlzQmlnRW5kaWFuIH0gPSBhd2FpdCB0aGlzLmdldEhlYWRlcihvcHRzKVxuICAgIGNvbnN0IHsgYnVmZmVyOiBkYXRhIH0gPSBhd2FpdCB0aGlzLmJiaS5yZWFkKEJ1ZmZlci5hbGxvYyg2NCksIDAsIDY0LCBleHRIZWFkZXJPZmZzZXQpXG4gICAgY29uc3QgbGUgPSBpc0JpZ0VuZGlhbiA/ICdiaWcnIDogJ2xpdHRsZSdcbiAgICBjb25zdCByZXQgPSBuZXcgUGFyc2VyKClcbiAgICAgIC5lbmRpYW5lc3MobGUpXG4gICAgICAudWludDE2KCdzaXplJylcbiAgICAgIC51aW50MTYoJ2NvdW50JylcbiAgICAgIC51aW50NjQoJ29mZnNldCcpXG4gICAgICAucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgY29uc3QgeyBjb3VudCwgb2Zmc2V0IH0gPSByZXRcblxuICAgIC8vIG5vIGV4dHJhIGluZGV4IGlzIGRlZmluZWQgaWYgY291bnQ9PTBcbiAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGNvbnN0IGJsb2NrbGVuID0gMjBcbiAgICBjb25zdCBsZW4gPSBibG9ja2xlbiAqIGNvdW50XG4gICAgY29uc3QgeyBidWZmZXIgfSA9IGF3YWl0IHRoaXMuYmJpLnJlYWQoQnVmZmVyLmFsbG9jKGxlbiksIDAsIGxlbiwgb2Zmc2V0KVxuICAgIGNvbnN0IGV4dFBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5pbnQxNigndHlwZScpXG4gICAgICAuaW50MTYoJ2ZpZWxkY291bnQnKVxuICAgICAgLnVpbnQ2NCgnb2Zmc2V0JylcbiAgICAgIC5za2lwKDQpXG4gICAgICAuaW50MTYoJ2ZpZWxkJylcbiAgICBjb25zdCBpbmRpY2VzID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMSkge1xuICAgICAgaW5kaWNlcy5wdXNoKGV4dFBhcnNlci5wYXJzZShidWZmZXIuc2xpY2UoaSAqIGJsb2NrbGVuKSkucmVzdWx0KVxuICAgIH1cbiAgICByZXR1cm4gaW5kaWNlc1xuICB9XG5cbiAgLypcbiAgICogcGVyZm9ybSBhIHNlYXJjaCBpbiB0aGUgYmlnYmVkIGV4dHJhSW5kZXggdG8gZmluZCB3aGljaCBibG9ja3MgaW4gdGhlIGJpZ2JlZCBkYXRhIHRvIGxvb2sgZm9yIHRoZVxuICAgKiBhY3R1YWwgZmVhdHVyZSBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgdG8gc2VhcmNoIGZvclxuICAgKiBAcGFyYW0gb3B0cyAtIGEgU2VhcmNoT3B0aW9ucyBhcmd1bWVudCB3aXRoIG9wdGlvbmFsIHNpZ25hbFxuICAgKiBAcmV0dXJuIGEgUHJvbWlzZSBmb3IgYW4gYXJyYXkgb2YgYmlnYmVkIGJsb2NrIExvYyBlbnRyaWVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlYXJjaEV4dHJhSW5kZXhCbG9ja3MobmFtZTogc3RyaW5nLCBvcHRzOiBSZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxMb2NbXT4ge1xuICAgIGNvbnN0IHsgaXNCaWdFbmRpYW4gfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyKG9wdHMpXG4gICAgY29uc3QgaW5kaWNlcyA9IGF3YWl0IHRoaXMucmVhZEluZGljZXMob3B0cylcbiAgICBpZiAoIWluZGljZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gICAgY29uc3QgbG9jcyA9IGluZGljZXMubWFwKFxuICAgICAgYXN5bmMgKGluZGV4OiBhbnkpOiBQcm9taXNlPExvYyB8IHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICBjb25zdCB7IG9mZnNldCwgZmllbGQgfSA9IGluZGV4XG4gICAgICAgIGNvbnN0IHsgYnVmZmVyOiBkYXRhIH0gPSBhd2FpdCB0aGlzLmJiaS5yZWFkKEJ1ZmZlci5hbGxvYygzMiksIDAsIDMyLCBvZmZzZXQsIG9wdHMpXG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUGFyc2VyKClcbiAgICAgICAgICAuZW5kaWFuZXNzKGlzQmlnRW5kaWFuID8gJ2JpZycgOiAnbGl0dGxlJylcbiAgICAgICAgICAuaW50MzIoJ21hZ2ljJylcbiAgICAgICAgICAuaW50MzIoJ2Jsb2NrU2l6ZScpXG4gICAgICAgICAgLmludDMyKCdrZXlTaXplJylcbiAgICAgICAgICAuaW50MzIoJ3ZhbFNpemUnKVxuICAgICAgICAgIC51aW50NjQoJ2l0ZW1Db3VudCcpXG5cbiAgICAgICAgY29uc3QgeyBibG9ja1NpemUsIGtleVNpemUsIHZhbFNpemUgfSA9IHAucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgICAgIGNvbnN0IGJwdCA9IG5ldyBQYXJzZXIoKVxuICAgICAgICAgIC5lbmRpYW5lc3MoaXNCaWdFbmRpYW4gPyAnYmlnJyA6ICdsaXR0bGUnKVxuICAgICAgICAgIC5pbnQ4KCdub2RlVHlwZScpXG4gICAgICAgICAgLnNraXAoMSlcbiAgICAgICAgICAuaW50MTYoJ2NudCcpXG4gICAgICAgICAgLmNob2ljZSh7XG4gICAgICAgICAgICB0YWc6ICdub2RlVHlwZScsXG4gICAgICAgICAgICBjaG9pY2VzOiB7XG4gICAgICAgICAgICAgIDA6IG5ldyBQYXJzZXIoKS5hcnJheSgnbGVhZmtleXMnLCB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAnY250JyxcbiAgICAgICAgICAgICAgICB0eXBlOiBuZXcgUGFyc2VyKClcbiAgICAgICAgICAgICAgICAgIC5zdHJpbmcoJ2tleScsIHsgbGVuZ3RoOiBrZXlTaXplLCBzdHJpcE51bGw6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgIC51aW50NjQoJ29mZnNldCcpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMTogbmV3IFBhcnNlcigpLmFycmF5KCdrZXlzJywge1xuICAgICAgICAgICAgICAgIGxlbmd0aDogJ2NudCcsXG4gICAgICAgICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpXG4gICAgICAgICAgICAgICAgICAuc3RyaW5nKCdrZXknLCB7IGxlbmd0aDoga2V5U2l6ZSwgc3RyaXBOdWxsOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAudWludDY0KCdvZmZzZXQnKVxuICAgICAgICAgICAgICAgICAgLnVpbnQzMignbGVuZ3RoJylcbiAgICAgICAgICAgICAgICAgIC51aW50MzIoJ3Jlc2VydmVkJyksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJwdFJlYWROb2RlID0gYXN5bmMgKG5vZGVPZmZzZXQ6IG51bWJlcik6IFByb21pc2U8TG9jIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgICAgY29uc3QgbGVuID0gNCArIGJsb2NrU2l6ZSAqIChrZXlTaXplICsgdmFsU2l6ZSlcbiAgICAgICAgICBjb25zdCB7IGJ1ZmZlciB9ID0gYXdhaXQgdGhpcy5iYmkucmVhZChCdWZmZXIuYWxsb2MobGVuKSwgMCwgbGVuLCBub2RlT2Zmc2V0LCBvcHRzKVxuICAgICAgICAgIGNvbnN0IG5vZGUgPSBicHQucGFyc2UoYnVmZmVyKS5yZXN1bHRcbiAgICAgICAgICBpZiAobm9kZS5sZWFma2V5cykge1xuICAgICAgICAgICAgbGV0IGxhc3RPZmZzZXRcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5sZWFma2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGtleSB9ID0gbm9kZS5sZWFma2V5c1tpXVxuICAgICAgICAgICAgICBpZiAobmFtZS5sb2NhbGVDb21wYXJlKGtleSkgPCAwICYmIGxhc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnB0UmVhZE5vZGUobGFzdE9mZnNldClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0T2Zmc2V0ID0gbm9kZS5sZWFma2V5c1tpXS5vZmZzZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBicHRSZWFkTm9kZShsYXN0T2Zmc2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUua2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKG5vZGUua2V5c1tpXS5rZXkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ubm9kZS5rZXlzW2ldLCBmaWVsZCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlT2Zmc2V0ID0gMzJcbiAgICAgICAgcmV0dXJuIGJwdFJlYWROb2RlKG9mZnNldCArIHJvb3ROb2RlT2Zmc2V0KVxuICAgICAgfSxcbiAgICApXG4gICAgcmV0dXJuIGZpbHRlclVuZGVmKGF3YWl0IFByb21pc2UuYWxsKGxvY3MpKVxuICB9XG5cbiAgLypcbiAgICogcmV0cmlldmUgdGhlIGZlYXR1cmVzIGZyb20gdGhlIGJpZ2JlZCBkYXRhIHRoYXQgd2VyZSBmb3VuZCB0aHJvdWdoIHRoZSBsb29rdXAgb2YgdGhlIGV4dHJhSW5kZXhcbiAgICogbm90ZSB0aGF0IHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBleHRyYUluZGV4LCBzZWUgdGhlIEJpZ0JlZCBzcGVjaWZpY2F0aW9uIGFuZCB0aGUgLWV4dHJhSW5kZXggYXJndW1lbnQgdG8gYmVkVG9CaWdCZWRcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSB0byBzZWFyY2ggZm9yXG4gICAqIEBwYXJhbSBvcHRzIC0gYSBTZWFyY2hPcHRpb25zIGFyZ3VtZW50IHdpdGggb3B0aW9uYWwgc2lnbmFsXG4gICAqIEByZXR1cm4gYSBQcm9taXNlIGZvciBhbiBhcnJheSBvZiBGZWF0dXJlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VhcmNoRXh0cmFJbmRleChuYW1lOiBzdHJpbmcsIG9wdHM6IFJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xuICAgIGNvbnN0IGJsb2NrcyA9IGF3YWl0IHRoaXMuc2VhcmNoRXh0cmFJbmRleEJsb2NrcyhuYW1lLCBvcHRzKVxuICAgIGlmICghYmxvY2tzLmxlbmd0aCkgcmV0dXJuIFtdXG4gICAgY29uc3QgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VW56b29tZWRWaWV3KG9wdHMpXG4gICAgY29uc3QgcmVzID0gYmxvY2tzLm1hcChibG9jayA9PiB7XG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+KSA9PiB7XG4gICAgICAgIHZpZXcucmVhZEZlYXR1cmVzKG9ic2VydmVyLCBbYmxvY2tdLCBvcHRzKVxuICAgICAgfSkucGlwZShcbiAgICAgICAgcmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYy5jb25jYXQoY3VycikpLFxuICAgICAgICBtYXAoeCA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgeFtpXS5maWVsZCA9IGJsb2NrLmZpZWxkIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHhcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfSlcbiAgICBjb25zdCByZXQgPSBhd2FpdCBtZXJnZSguLi5yZXMpLnRvUHJvbWlzZSgpXG4gICAgcmV0dXJuIHJldC5maWx0ZXIoKGY6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGYucmVzdC5zcGxpdCgnXFx0JylbZi5maWVsZCAtIDNdID09PSBuYW1lXG4gICAgfSlcbiAgfVxufVxuIl19
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
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 __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.BigWig = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _blockView = require("./blockView");
var _bbi = require("./bbi");
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 = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
var BigWig = /*#__PURE__*/function (_BBI) {
(0, _inherits2.default)(BigWig, _BBI);
var _super = _createSuper(BigWig);
function BigWig() {
(0, _classCallCheck2.default)(this, BigWig);
return _super.apply(this, arguments);
}
(0, _createClass2.default)(BigWig, [{
key: "getView",
var blockView_1 = require("./blockView");
var bbi_1 = require("./bbi");
var BigWig = /** @class */ (function (_super) {
__extends(BigWig, _super);
function BigWig() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**

@@ -53,73 +70,32 @@ * Retrieves a BlockView of a specific zoomLevel

*/
value: function () {
var _getView = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(scale, opts) {
var _yield$this$getHeader, zoomLevels, refsByName, fileSize, isBigEndian, uncompressBufSize, basesPerPx, maxLevel, i, zh, indexLength;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.getHeader(opts);
case 2:
_yield$this$getHeader = _context.sent;
zoomLevels = _yield$this$getHeader.zoomLevels;
refsByName = _yield$this$getHeader.refsByName;
fileSize = _yield$this$getHeader.fileSize;
isBigEndian = _yield$this$getHeader.isBigEndian;
uncompressBufSize = _yield$this$getHeader.uncompressBufSize;
basesPerPx = 1 / scale;
maxLevel = zoomLevels.length;
if (!fileSize) {
// if we don't know the file size, we can't fetch the highest zoom level :-(
maxLevel -= 1;
BigWig.prototype.getView = function (scale, opts) {
return __awaiter(this, void 0, void 0, function () {
var _a, zoomLevels, refsByName, fileSize, isBigEndian, uncompressBufSize, basesPerPx, maxLevel, i, zh, indexLength;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.getHeader(opts)];
case 1:
_a = _b.sent(), zoomLevels = _a.zoomLevels, refsByName = _a.refsByName, fileSize = _a.fileSize, isBigEndian = _a.isBigEndian, uncompressBufSize = _a.uncompressBufSize;
basesPerPx = 1 / scale;
maxLevel = zoomLevels.length;
if (!fileSize) {
// if we don't know the file size, we can't fetch the highest zoom level :-(
maxLevel -= 1;
}
for (i = maxLevel; i >= 0; i -= 1) {
zh = zoomLevels[i];
if (zh && zh.reductionLevel <= 2 * basesPerPx) {
indexLength = i < zoomLevels.length - 1
? zoomLevels[i + 1].dataOffset - zh.indexOffset
: fileSize - 4 - zh.indexOffset;
return [2 /*return*/, new blockView_1.BlockView(this.bbi, refsByName, zh.indexOffset, indexLength, isBigEndian, uncompressBufSize > 0, 'summary')];
}
}
return [2 /*return*/, this.getUnzoomedView(opts)];
}
i = maxLevel;
case 12:
if (!(i >= 0)) {
_context.next = 20;
break;
}
zh = zoomLevels[i];
if (!(zh && zh.reductionLevel <= 2 * basesPerPx)) {
_context.next = 17;
break;
}
indexLength = i < zoomLevels.length - 1 ? zoomLevels[i + 1].dataOffset - zh.indexOffset : fileSize - 4 - zh.indexOffset;
return _context.abrupt("return", new _blockView.BlockView(this.bbi, refsByName, zh.indexOffset, indexLength, isBigEndian, uncompressBufSize > 0, 'summary'));
case 17:
i -= 1;
_context.next = 12;
break;
case 20:
return _context.abrupt("return", this.getUnzoomedView(opts));
case 21:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function getView(_x, _x2) {
return _getView.apply(this, arguments);
}
return getView;
}()
}]);
return BigWig;
}(_bbi.BBI);
});
});
};
return BigWig;
}(bbi_1.BBI));
exports.BigWig = BigWig;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iaWd3aWcudHMiXSwibmFtZXMiOlsiQmlnV2lnIiwic2NhbGUiLCJvcHRzIiwiZ2V0SGVhZGVyIiwiem9vbUxldmVscyIsInJlZnNCeU5hbWUiLCJmaWxlU2l6ZSIsImlzQmlnRW5kaWFuIiwidW5jb21wcmVzc0J1ZlNpemUiLCJiYXNlc1BlclB4IiwibWF4TGV2ZWwiLCJsZW5ndGgiLCJpIiwiemgiLCJyZWR1Y3Rpb25MZXZlbCIsImluZGV4TGVuZ3RoIiwiZGF0YU9mZnNldCIsImluZGV4T2Zmc2V0IiwiQmxvY2tWaWV3IiwiYmJpIiwiZ2V0VW56b29tZWRWaWV3IiwiQkJJIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7SUFFYUEsTTs7Ozs7Ozs7Ozs7OztBQUNYOzs7Ozs7Ozs7OEdBUXdCQyxLLEVBQWVDLEk7Ozs7Ozs7O3VCQU8zQixLQUFLQyxTQUFMLENBQWVELElBQWYsQzs7OztBQUxSRSxnQkFBQUEsVSx5QkFBQUEsVTtBQUNBQyxnQkFBQUEsVSx5QkFBQUEsVTtBQUNBQyxnQkFBQUEsUSx5QkFBQUEsUTtBQUNBQyxnQkFBQUEsVyx5QkFBQUEsVztBQUNBQyxnQkFBQUEsaUIseUJBQUFBLGlCO0FBRUlDLGdCQUFBQSxVLEdBQWEsSUFBSVIsSztBQUNuQlMsZ0JBQUFBLFEsR0FBV04sVUFBVSxDQUFDTyxNOztBQUMxQixvQkFBSSxDQUFDTCxRQUFMLEVBQWU7QUFDYjtBQUNBSSxrQkFBQUEsUUFBUSxJQUFJLENBQVo7QUFDRDs7QUFFUUUsZ0JBQUFBLEMsR0FBSUYsUTs7O3NCQUFVRSxDQUFDLElBQUksQzs7Ozs7QUFDcEJDLGdCQUFBQSxFLEdBQUtULFVBQVUsQ0FBQ1EsQ0FBRCxDOztzQkFDakJDLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxjQUFILElBQXFCLElBQUlMLFU7Ozs7O0FBQzNCTSxnQkFBQUEsVyxHQUNKSCxDQUFDLEdBQUdSLFVBQVUsQ0FBQ08sTUFBWCxHQUFvQixDQUF4QixHQUNJUCxVQUFVLENBQUNRLENBQUMsR0FBRyxDQUFMLENBQVYsQ0FBa0JJLFVBQWxCLEdBQStCSCxFQUFFLENBQUNJLFdBRHRDLEdBRUlYLFFBQVEsR0FBRyxDQUFYLEdBQWVPLEVBQUUsQ0FBQ0ksVztpREFDakIsSUFBSUMsb0JBQUosQ0FDTCxLQUFLQyxHQURBLEVBRUxkLFVBRkssRUFHTFEsRUFBRSxDQUFDSSxXQUhFLEVBSUxGLFdBSkssRUFLTFIsV0FMSyxFQU1MQyxpQkFBaUIsR0FBRyxDQU5mLEVBT0wsU0FQSyxDOzs7QUFQb0JJLGdCQUFBQSxDQUFDLElBQUksQzs7Ozs7aURBa0I3QixLQUFLUSxlQUFMLENBQXFCbEIsSUFBckIsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMUNpQm1CLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbG9ja1ZpZXcgfSBmcm9tICcuL2Jsb2NrVmlldydcbmltcG9ydCB7IEJCSSwgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2JiaSdcblxuZXhwb3J0IGNsYXNzIEJpZ1dpZyBleHRlbmRzIEJCSSB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBCbG9ja1ZpZXcgb2YgYSBzcGVjaWZpYyB6b29tTGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHJlZk5hbWUgLSBUaGUgY2hyb21vc29tZSBuYW1lXG4gICAqIEBwYXJhbSBzdGFydCAtIFRoZSBzdGFydCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gZW5kIC0gVGhlIGVuZCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gb3B0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIGJhc2VzUGVyU3BhbiAoZS5nLiBwaXhlbHMgcGVyIGJhc2VwYWlyKSBvciBzY2FsZSB1c2VkIHRvIGluZmVyIHRoZSB6b29tTGV2ZWwgdG8gdXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmlldyhzY2FsZTogbnVtYmVyLCBvcHRzOiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8QmxvY2tWaWV3PiB7XG4gICAgY29uc3Qge1xuICAgICAgem9vbUxldmVscyxcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICBmaWxlU2l6ZSxcbiAgICAgIGlzQmlnRW5kaWFuLFxuICAgICAgdW5jb21wcmVzc0J1ZlNpemUsXG4gICAgfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyKG9wdHMpXG4gICAgY29uc3QgYmFzZXNQZXJQeCA9IDEgLyBzY2FsZVxuICAgIGxldCBtYXhMZXZlbCA9IHpvb21MZXZlbHMubGVuZ3RoXG4gICAgaWYgKCFmaWxlU2l6ZSkge1xuICAgICAgLy8gaWYgd2UgZG9uJ3Qga25vdyB0aGUgZmlsZSBzaXplLCB3ZSBjYW4ndCBmZXRjaCB0aGUgaGlnaGVzdCB6b29tIGxldmVsIDotKFxuICAgICAgbWF4TGV2ZWwgLT0gMVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBtYXhMZXZlbDsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgIGNvbnN0IHpoID0gem9vbUxldmVsc1tpXVxuICAgICAgaWYgKHpoICYmIHpoLnJlZHVjdGlvbkxldmVsIDw9IDIgKiBiYXNlc1BlclB4KSB7XG4gICAgICAgIGNvbnN0IGluZGV4TGVuZ3RoID1cbiAgICAgICAgICBpIDwgem9vbUxldmVscy5sZW5ndGggLSAxXG4gICAgICAgICAgICA/IHpvb21MZXZlbHNbaSArIDFdLmRhdGFPZmZzZXQgLSB6aC5pbmRleE9mZnNldFxuICAgICAgICAgICAgOiBmaWxlU2l6ZSAtIDQgLSB6aC5pbmRleE9mZnNldFxuICAgICAgICByZXR1cm4gbmV3IEJsb2NrVmlldyhcbiAgICAgICAgICB0aGlzLmJiaSxcbiAgICAgICAgICByZWZzQnlOYW1lLFxuICAgICAgICAgIHpoLmluZGV4T2Zmc2V0LFxuICAgICAgICAgIGluZGV4TGVuZ3RoLFxuICAgICAgICAgIGlzQmlnRW5kaWFuLFxuICAgICAgICAgIHVuY29tcHJlc3NCdWZTaXplID4gMCxcbiAgICAgICAgICAnc3VtbWFyeScsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VW56b29tZWRWaWV3KG9wdHMpXG4gIH1cbn1cbiJdfQ==
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
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 });
exports.BlockView = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _binaryParser = require("@gmod/binary-parser");
var _abortablePromiseCache = _interopRequireDefault(require("abortable-promise-cache"));
var _zlib = _interopRequireDefault(require("zlib"));
var _quickLru = _interopRequireDefault(require("quick-lru"));
var _range = _interopRequireDefault(require("./range"));
var _util = require("./util");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(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) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var binary_parser_1 = require("@gmod/binary-parser");
var abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
var zlib_1 = __importDefault(require("zlib"));
var quick_lru_1 = __importDefault(require("quick-lru"));
var range_1 = __importDefault(require("./range"));
var util_1 = require("./util");
var BIG_WIG_TYPE_GRAPH = 1;
var BIG_WIG_TYPE_VSTEP = 2;
var BIG_WIG_TYPE_FSTEP = 3;
function getParsers(isBigEndian) {
var _choices;
var le = isBigEndian ? 'big' : 'little';
var summaryParser = new _binaryParser.Parser().endianess(le).uint32('chromId').uint32('start').uint32('end').uint32('validCnt').float('minScore').float('maxScore').float('sumData').float('sumSqData');
var leafParser = new _binaryParser.Parser().endianess(le).uint8('isLeaf').skip(1).uint16('cnt').choice({
tag: 'isLeaf',
choices: {
1: new _binaryParser.Parser().array('blocksToFetch', {
length: 'cnt',
type: new _binaryParser.Parser().uint32('startChrom').uint32('startBase').uint32('endChrom').uint32('endBase').uint64('blockOffset').uint64('blockSize')
}),
0: new _binaryParser.Parser().array('recurOffsets', {
length: 'cnt',
type: new _binaryParser.Parser().uint32('startChrom').uint32('startBase').uint32('endChrom').uint32('endBase').uint64('blockOffset')
})
}
});
var bigBedParser = new _binaryParser.Parser().endianess(le).uint32('chromId').int32('start').int32('end').string('rest', {
zeroTerminated: true
});
var bigWigParser = new _binaryParser.Parser().endianess(le).skip(4).int32('blockStart').skip(4).uint32('itemStep').uint32('itemSpan').uint8('blockType').skip(1).uint16('itemCount').choice({
tag: 'blockType',
choices: (_choices = {}, (0, _defineProperty2.default)(_choices, BIG_WIG_TYPE_FSTEP, new _binaryParser.Parser().array('items', {
length: 'itemCount',
type: new _binaryParser.Parser().float('score')
})), (0, _defineProperty2.default)(_choices, BIG_WIG_TYPE_VSTEP, new _binaryParser.Parser().array('items', {
length: 'itemCount',
type: new _binaryParser.Parser().int32('start').float('score')
})), (0, _defineProperty2.default)(_choices, BIG_WIG_TYPE_GRAPH, new _binaryParser.Parser().array('items', {
length: 'itemCount',
type: new _binaryParser.Parser().int32('start').int32('end').float('score')
})), _choices)
});
return {
bigWigParser: bigWigParser,
bigBedParser: bigBedParser,
summaryParser: summaryParser,
leafParser: leafParser
};
var _a;
var le = isBigEndian ? 'big' : 'little';
var summaryParser = new binary_parser_1.Parser()
.endianess(le)
.uint32('chromId')
.uint32('start')
.uint32('end')
.uint32('validCnt')
.float('minScore')
.float('maxScore')
.float('sumData')
.float('sumSqData');
var leafParser = new binary_parser_1.Parser()
.endianess(le)
.uint8('isLeaf')
.skip(1)
.uint16('cnt')
.choice({
tag: 'isLeaf',
choices: {
1: new binary_parser_1.Parser().array('blocksToFetch', {
length: 'cnt',
type: new binary_parser_1.Parser()
.uint32('startChrom')
.uint32('startBase')
.uint32('endChrom')
.uint32('endBase')
.uint64('blockOffset')
.uint64('blockSize'),
}),
0: new binary_parser_1.Parser().array('recurOffsets', {
length: 'cnt',
type: new binary_parser_1.Parser()
.uint32('startChrom')
.uint32('startBase')
.uint32('endChrom')
.uint32('endBase')
.uint64('blockOffset'),
}),
},
});
var bigBedParser = new binary_parser_1.Parser()
.endianess(le)
.uint32('chromId')
.int32('start')
.int32('end')
.string('rest', {
zeroTerminated: true,
});
var bigWigParser = new binary_parser_1.Parser()
.endianess(le)
.skip(4)
.int32('blockStart')
.skip(4)
.uint32('itemStep')
.uint32('itemSpan')
.uint8('blockType')
.skip(1)
.uint16('itemCount')
.choice({
tag: 'blockType',
choices: (_a = {},
_a[BIG_WIG_TYPE_FSTEP] = new binary_parser_1.Parser().array('items', {
length: 'itemCount',
type: new binary_parser_1.Parser().float('score'),
}),
_a[BIG_WIG_TYPE_VSTEP] = new binary_parser_1.Parser().array('items', {
length: 'itemCount',
type: new binary_parser_1.Parser().int32('start').float('score'),
}),
_a[BIG_WIG_TYPE_GRAPH] = new binary_parser_1.Parser().array('items', {
length: 'itemCount',
type: new binary_parser_1.Parser().int32('start').int32('end').float('score'),
}),
_a),
});
return {
bigWigParser: bigWigParser,
bigBedParser: bigBedParser,
summaryParser: summaryParser,
leafParser: leafParser,
};
}

@@ -88,430 +154,275 @@ /**

*/
var BlockView = /*#__PURE__*/function () {
function BlockView(bbi, refsByName, cirTreeOffset, cirTreeLength, isBigEndian, isCompressed, blockType) {
var _this = this;
(0, _classCallCheck2.default)(this, BlockView);
(0, _defineProperty2.default)(this, "cirTreeOffset", void 0);
(0, _defineProperty2.default)(this, "cirTreeLength", void 0);
(0, _defineProperty2.default)(this, "bbi", void 0);
(0, _defineProperty2.default)(this, "isCompressed", void 0);
(0, _defineProperty2.default)(this, "isBigEndian", void 0);
(0, _defineProperty2.default)(this, "refsByName", void 0);
(0, _defineProperty2.default)(this, "blockType", void 0);
(0, _defineProperty2.default)(this, "cirTreePromise", void 0);
(0, _defineProperty2.default)(this, "featureCache", new _abortablePromiseCache.default({
cache: new _quickLru.default({
maxSize: 1000
}),
fill: function () {
var _fill = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(requestData, signal) {
var length, offset, _yield$_this$bbi$read, buffer;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
length = requestData.length, offset = requestData.offset;
_context.next = 3;
return _this.bbi.read(Buffer.alloc(length), 0, length, offset, {
signal: signal
});
case 3:
_yield$_this$bbi$read = _context.sent;
buffer = _yield$_this$bbi$read.buffer;
return _context.abrupt("return", buffer);
case 6:
case "end":
return _context.stop();
}
}
}, _callee);
}));
function fill(_x, _x2) {
return _fill.apply(this, arguments);
var BlockView = /** @class */ (function () {
function BlockView(bbi, refsByName, cirTreeOffset, cirTreeLength, isBigEndian, isCompressed, blockType) {
var _this = this;
this.featureCache = new abortable_promise_cache_1.default({
cache: new quick_lru_1.default({ maxSize: 1000 }),
fill: function (requestData, signal) { return __awaiter(_this, void 0, void 0, function () {
var length, offset, buffer;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
length = requestData.length, offset = requestData.offset;
return [4 /*yield*/, this.bbi.read(Buffer.alloc(length), 0, length, offset, { signal: signal })];
case 1:
buffer = (_a.sent()).buffer;
return [2 /*return*/, buffer];
}
});
}); },
});
if (!(cirTreeOffset >= 0)) {
throw new Error('invalid cirTreeOffset!');
}
return fill;
}()
}));
(0, _defineProperty2.default)(this, "leafParser", void 0);
(0, _defineProperty2.default)(this, "bigWigParser", void 0);
(0, _defineProperty2.default)(this, "bigBedParser", void 0);
(0, _defineProperty2.default)(this, "summaryParser", void 0);
if (!(cirTreeOffset >= 0)) throw new Error('invalid cirTreeOffset!');
if (!(cirTreeLength > 0)) throw new Error('invalid cirTreeLength!');
this.cirTreeOffset = cirTreeOffset;
this.cirTreeLength = cirTreeLength;
this.isCompressed = isCompressed;
this.refsByName = refsByName;
this.isBigEndian = isBigEndian;
this.bbi = bbi;
this.blockType = blockType;
Object.assign(this, getParsers(isBigEndian));
}
(0, _createClass2.default)(BlockView, [{
key: "readWigData",
value: function () {
var _readWigData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(chrName, start, end, observer, opts) {
var _this2 = this;
var refsByName, bbi, cirTreeOffset, isBigEndian, signal, chrId, request, _yield$this$cirTreePr, buffer, cirBlockSize, blocksToFetch, outstanding, cirFobRecur2, filterFeats, cirFobStartFetch, cirFobRecur;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
refsByName = this.refsByName, bbi = this.bbi, cirTreeOffset = this.cirTreeOffset, isBigEndian = this.isBigEndian;
signal = opts.signal;
chrId = refsByName[chrName];
if (chrId === undefined) {
observer.complete();
}
request = {
chrId: chrId,
start: start,
end: end
};
if (!this.cirTreePromise) {
this.cirTreePromise = bbi.read(Buffer.alloc(48), 0, 48, cirTreeOffset, {
signal: signal
});
}
_context3.next = 9;
return this.cirTreePromise;
case 9:
_yield$this$cirTreePr = _context3.sent;
buffer = _yield$this$cirTreePr.buffer;
cirBlockSize = isBigEndian ? buffer.readUInt32BE(4) : buffer.readUInt32LE(4);
blocksToFetch = [];
outstanding = 0; //eslint-disable-next-line prefer-const
filterFeats = function filterFeats(b) {
return (b.startChrom < chrId || b.startChrom === chrId && b.startBase <= end) && (b.endChrom > chrId || b.endChrom === chrId && b.endBase >= start);
};
cirFobStartFetch = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(off, fr, level) {
var length, offset, resultBuffer, i;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
length = fr.max() - fr.min();
offset = fr.min();
_context2.next = 5;
return _this2.featureCache.get("".concat(length, "_").concat(offset), {
length: length,
offset: offset
}, signal);
case 5:
resultBuffer = _context2.sent;
for (i = 0; i < off.length; i += 1) {
if (fr.contains(off[i])) {
cirFobRecur2(resultBuffer, off[i] - offset, level, observer, opts);
outstanding -= 1;
if (outstanding === 0) {
_this2.readFeatures(observer, blocksToFetch, _objectSpread(_objectSpread({}, opts), {}, {
request: request
}));
if (!(cirTreeLength > 0)) {
throw new Error('invalid cirTreeLength!');
}
this.cirTreeOffset = cirTreeOffset;
this.cirTreeLength = cirTreeLength;
this.isCompressed = isCompressed;
this.refsByName = refsByName;
this.isBigEndian = isBigEndian;
this.bbi = bbi;
this.blockType = blockType;
Object.assign(this, getParsers(isBigEndian));
}
BlockView.prototype.readWigData = function (chrName, start, end, observer, opts) {
return __awaiter(this, void 0, void 0, function () {
var _a, refsByName, bbi, cirTreeOffset, isBigEndian, signal_1, chrId_1, request_1, buffer, cirBlockSize_1, blocksToFetch_1, outstanding_1, cirFobRecur2_1, filterFeats_1, cirFobStartFetch_1, cirFobRecur_1, e_1;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 2, , 3]);
_a = this, refsByName = _a.refsByName, bbi = _a.bbi, cirTreeOffset = _a.cirTreeOffset, isBigEndian = _a.isBigEndian;
signal_1 = opts.signal;
chrId_1 = refsByName[chrName];
if (chrId_1 === undefined) {
observer.complete();
}
request_1 = { chrId: chrId_1, start: start, end: end };
if (!this.cirTreePromise) {
this.cirTreePromise = bbi.read(Buffer.alloc(48), 0, 48, cirTreeOffset, {
signal: signal_1,
});
}
return [4 /*yield*/, this.cirTreePromise];
case 1:
buffer = (_b.sent()).buffer;
cirBlockSize_1 = isBigEndian
? buffer.readUInt32BE(4)
: buffer.readUInt32LE(4);
blocksToFetch_1 = [];
outstanding_1 = 0;
filterFeats_1 = function (b) {
return (b.startChrom < chrId_1 ||
(b.startChrom === chrId_1 && b.startBase <= end)) &&
(b.endChrom > chrId_1 || (b.endChrom === chrId_1 && b.endBase >= start));
};
cirFobStartFetch_1 = function (off, fr, level) { return __awaiter(_this, void 0, void 0, function () {
var length_1, offset, resultBuffer, i, e_2;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
length_1 = fr.max() - fr.min();
offset = fr.min();
return [4 /*yield*/, this.featureCache.get("".concat(length_1, "_").concat(offset), { length: length_1, offset: offset }, signal_1)];
case 1:
resultBuffer = _a.sent();
for (i = 0; i < off.length; i += 1) {
if (fr.contains(off[i])) {
cirFobRecur2_1(resultBuffer, off[i] - offset, level, observer, opts);
outstanding_1 -= 1;
if (outstanding_1 === 0) {
this.readFeatures(observer, blocksToFetch_1, __assign(__assign({}, opts), { request: request_1 }));
}
}
}
return [3 /*break*/, 3];
case 2:
e_2 = _a.sent();
observer.error(e_2);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
}
});
}); };
cirFobRecur_1 = function (offset, level) {
try {
outstanding_1 += offset.length;
var maxCirBlockSpan = 4 + cirBlockSize_1 * 32; // Upper bound on size, based on a completely full leaf node.
var spans = new range_1.default(offset[0], offset[0] + maxCirBlockSpan);
for (var i = 1; i < offset.length; i += 1) {
var blockSpan = new range_1.default(offset[i], offset[i] + maxCirBlockSpan);
spans = spans.union(blockSpan);
}
spans
.getRanges()
.map(function (fr) { return cirFobStartFetch_1(offset, fr, level); });
}
_context2.next = 12;
break;
case 9:
_context2.prev = 9;
_context2.t0 = _context2["catch"](0);
observer.error(_context2.t0);
case 12:
case "end":
return _context2.stop();
}
}
}, _callee2, null, [[0, 9]]);
}));
return function cirFobStartFetch(_x8, _x9, _x10) {
return _ref.apply(this, arguments);
};
}();
cirFobRecur = function cirFobRecur(offset, level) {
try {
outstanding += offset.length;
var maxCirBlockSpan = 4 + cirBlockSize * 32; // Upper bound on size, based on a completely full leaf node.
var spans = new _range.default(offset[0], offset[0] + maxCirBlockSpan);
for (var i = 1; i < offset.length; i += 1) {
var blockSpan = new _range.default(offset[i], offset[i] + maxCirBlockSpan);
spans = spans.union(blockSpan);
}
spans.getRanges().map(function (fr) {
return cirFobStartFetch(offset, fr, level);
});
} catch (e) {
observer.error(e);
}
};
cirFobRecur2 = function cirFobRecur2(cirBlockData, offset, level) {
try {
var data = cirBlockData.slice(offset);
var p = _this2.leafParser.parse(data).result;
if (p.blocksToFetch) {
blocksToFetch = blocksToFetch.concat(p.blocksToFetch.filter(filterFeats).map(function (l) {
return {
offset: l.blockOffset,
length: l.blockSize
catch (e) {
observer.error(e);
}
};
}));
}
if (p.recurOffsets) {
var recurOffsets = p.recurOffsets.filter(filterFeats).map(function (l) {
return l.blockOffset;
});
if (recurOffsets.length > 0) {
cirFobRecur(recurOffsets, level + 1);
}
}
} catch (e) {
observer.error(e);
}
};
return _context3.abrupt("return", cirFobRecur([cirTreeOffset + 48], 1));
case 21:
_context3.prev = 21;
_context3.t0 = _context3["catch"](0);
observer.error(_context3.t0);
case 24:
case "end":
return _context3.stop();
cirFobRecur2_1 = function (cirBlockData, offset, level) {
try {
var data = cirBlockData.slice(offset);
var p = _this.leafParser.parse(data).result;
if (p.blocksToFetch) {
blocksToFetch_1 = blocksToFetch_1.concat(p.blocksToFetch.filter(filterFeats_1).map(function (l) { return ({
offset: l.blockOffset,
length: l.blockSize,
}); }));
}
if (p.recurOffsets) {
var recurOffsets = p.recurOffsets
.filter(filterFeats_1)
.map(function (l) { return l.blockOffset; });
if (recurOffsets.length > 0) {
cirFobRecur_1(recurOffsets, level + 1);
}
}
}
catch (e) {
observer.error(e);
}
};
return [2 /*return*/, cirFobRecur_1([cirTreeOffset + 48], 1)];
case 2:
e_1 = _b.sent();
observer.error(e_1);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
});
};
BlockView.prototype.parseSummaryBlock = function (data, startOffset, request) {
var features = [];
var currOffset = startOffset;
while (currOffset < data.byteLength) {
var res = this.summaryParser.parse(data.slice(currOffset));
features.push(res.result);
currOffset += res.offset;
}
var items = features;
if (request) {
items = items.filter(function (elt) { return elt.chromId === request.chrId; });
}
items = items.map(function (elt) { return ({
start: elt.start,
end: elt.end,
maxScore: elt.maxScore,
minScore: elt.minScore,
score: elt.sumData / (elt.validCnt || 1),
summary: true,
}); });
return request
? items.filter(function (f) { return BlockView.coordFilter(f, request); })
: items;
};
BlockView.prototype.parseBigBedBlock = function (data, startOffset, offset, request) {
var items = [];
var currOffset = startOffset;
while (currOffset < data.byteLength) {
var res = this.bigBedParser.parse(data.slice(currOffset));
res.result.uniqueId = "bb-".concat(offset + currOffset);
items.push(res.result);
currOffset += res.offset;
}
return request
? items.filter(function (f) { return BlockView.coordFilter(f, request); })
: items;
};
BlockView.prototype.parseBigWigBlock = function (bytes, startOffset, request) {
var data = bytes.slice(startOffset);
var results = this.bigWigParser.parse(data).result;
var items = results.items, itemSpan = results.itemSpan, itemStep = results.itemStep, blockStart = results.blockStart, blockType = results.blockType;
if (blockType === BIG_WIG_TYPE_FSTEP) {
for (var i = 0; i < items.length; i++) {
items[i].start = blockStart + i * itemStep;
items[i].end = blockStart + i * itemStep + itemSpan;
}
}
}, _callee3, this, [[0, 21]]);
}));
function readWigData(_x3, _x4, _x5, _x6, _x7) {
return _readWigData.apply(this, arguments);
}
return readWigData;
}()
}, {
key: "parseSummaryBlock",
value: function parseSummaryBlock(data, startOffset, request) {
var features = [];
var currOffset = startOffset;
while (currOffset < data.byteLength) {
var res = this.summaryParser.parse(data.slice(currOffset));
features.push(res.result);
currOffset += res.offset;
}
var items = features;
if (request) items = items.filter(function (elt) {
return elt.chromId === request.chrId;
});
items = items.map(function (elt) {
return {
start: elt.start,
end: elt.end,
maxScore: elt.maxScore,
minScore: elt.minScore,
score: elt.sumData / (elt.validCnt || 1),
summary: true
};
});
return request ? items.filter(function (f) {
return BlockView.coordFilter(f, request);
}) : items;
}
}, {
key: "parseBigBedBlock",
value: function parseBigBedBlock(data, startOffset, offset, request) {
var items = [];
var currOffset = startOffset;
while (currOffset < data.byteLength) {
var res = this.bigBedParser.parse(data.slice(currOffset));
res.result.uniqueId = "bb-".concat(offset + currOffset);
items.push(res.result);
currOffset += res.offset;
}
return request ? items.filter(function (f) {
return BlockView.coordFilter(f, request);
}) : items;
}
}, {
key: "parseBigWigBlock",
value: function parseBigWigBlock(bytes, startOffset, request) {
var data = bytes.slice(startOffset);
var results = this.bigWigParser.parse(data).result;
var items = results.items,
itemSpan = results.itemSpan,
itemStep = results.itemStep,
blockStart = results.blockStart,
blockType = results.blockType;
if (blockType === BIG_WIG_TYPE_FSTEP) {
for (var i = 0; i < items.length; i++) {
items[i].start = blockStart + i * itemStep;
items[i].end = blockStart + i * itemStep + itemSpan;
}
} else if (blockType === BIG_WIG_TYPE_VSTEP) {
for (var _i = 0; _i < items.length; _i++) {
items[_i].end = items[_i].start + itemSpan;
else if (blockType === BIG_WIG_TYPE_VSTEP) {
for (var i = 0; i < items.length; i++) {
items[i].end = items[i].start + itemSpan;
}
}
}
return request ? items.filter(function (f) {
return BlockView.coordFilter(f, request);
}) : items;
}
}, {
key: "readFeatures",
value: function () {
var _readFeatures = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(observer, blocks) {
var _this3 = this;
var opts,
blockType,
isCompressed,
signal,
request,
blockGroupsToFetch,
_args5 = arguments;
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
opts = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {};
_context5.prev = 1;
blockType = this.blockType, isCompressed = this.isCompressed;
signal = opts.signal, request = opts.request;
blockGroupsToFetch = (0, _util.groupBlocks)(blocks);
(0, _util.checkAbortSignal)(signal);
_context5.next = 8;
return Promise.all(blockGroupsToFetch.map( /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(blockGroup) {
var length, offset, data;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
(0, _util.checkAbortSignal)(signal);
length = blockGroup.length, offset = blockGroup.offset;
_context4.next = 4;
return _this3.featureCache.get("".concat(length, "_").concat(offset), blockGroup, signal);
case 4:
data = _context4.sent;
blockGroup.blocks.forEach(function (block) {
(0, _util.checkAbortSignal)(signal);
var blockOffset = block.offset - blockGroup.offset;
var resultData = data;
if (isCompressed) {
resultData = _zlib.default.inflateSync(data.slice(blockOffset));
blockOffset = 0;
}
(0, _util.checkAbortSignal)(signal);
switch (blockType) {
case 'summary':
observer.next(_this3.parseSummaryBlock(resultData, blockOffset, request));
break;
case 'bigwig':
observer.next(_this3.parseBigWigBlock(resultData, blockOffset, request));
break;
case 'bigbed':
observer.next( // eslint-disable-next-line no-bitwise
_this3.parseBigBedBlock(resultData, blockOffset, block.offset * (1 << 8), request));
break;
default:
console.warn("Don't know what to do with ".concat(blockType));
}
});
case 6:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return function (_x13) {
return _ref2.apply(this, arguments);
};
}()));
case 8:
observer.complete();
_context5.next = 14;
break;
case 11:
_context5.prev = 11;
_context5.t0 = _context5["catch"](1);
observer.error(_context5.t0);
case 14:
case "end":
return _context5.stop();
}
}
}, _callee5, this, [[1, 11]]);
}));
function readFeatures(_x11, _x12) {
return _readFeatures.apply(this, arguments);
}
return readFeatures;
}()
}], [{
key: "coordFilter",
value: function coordFilter(f, range) {
return f.start < range.end && f.end >= range.start;
}
}]);
return BlockView;
}();
return request
? items.filter(function (f) { return BlockView.coordFilter(f, request); })
: items;
};
BlockView.coordFilter = function (f, range) {
return f.start < range.end && f.end >= range.start;
};
BlockView.prototype.readFeatures = function (observer, blocks, opts) {
if (opts === void 0) { opts = {}; }
return __awaiter(this, void 0, void 0, function () {
var _a, blockType_1, isCompressed_1, signal_2, request_2, blockGroupsToFetch, e_3;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 2, , 3]);
_a = this, blockType_1 = _a.blockType, isCompressed_1 = _a.isCompressed;
signal_2 = opts.signal, request_2 = opts.request;
blockGroupsToFetch = (0, util_1.groupBlocks)(blocks);
(0, util_1.checkAbortSignal)(signal_2);
return [4 /*yield*/, Promise.all(blockGroupsToFetch.map(function (blockGroup) { return __awaiter(_this, void 0, void 0, function () {
var length, offset, data;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
(0, util_1.checkAbortSignal)(signal_2);
length = blockGroup.length, offset = blockGroup.offset;
return [4 /*yield*/, this.featureCache.get("".concat(length, "_").concat(offset), blockGroup, signal_2)];
case 1:
data = _a.sent();
blockGroup.blocks.forEach(function (block) {
(0, util_1.checkAbortSignal)(signal_2);
var blockOffset = block.offset - blockGroup.offset;
var resultData = data;
if (isCompressed_1) {
resultData = zlib_1.default.inflateSync(data.slice(blockOffset));
blockOffset = 0;
}
(0, util_1.checkAbortSignal)(signal_2);
switch (blockType_1) {
case 'summary':
observer.next(_this.parseSummaryBlock(resultData, blockOffset, request_2));
break;
case 'bigwig':
observer.next(_this.parseBigWigBlock(resultData, blockOffset, request_2));
break;
case 'bigbed':
observer.next(_this.parseBigBedBlock(resultData, blockOffset,
// eslint-disable-next-line no-bitwise
block.offset * (1 << 8), request_2));
break;
default:
console.warn("Don't know what to do with ".concat(blockType_1));
}
});
return [2 /*return*/];
}
});
}); }))];
case 1:
_b.sent();
observer.complete();
return [3 /*break*/, 3];
case 2:
e_3 = _b.sent();
observer.error(e_3);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
});
};
return BlockView;
}());
exports.BlockView = BlockView;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ibG9ja1ZpZXcudHMiXSwibmFtZXMiOlsiQklHX1dJR19UWVBFX0dSQVBIIiwiQklHX1dJR19UWVBFX1ZTVEVQIiwiQklHX1dJR19UWVBFX0ZTVEVQIiwiZ2V0UGFyc2VycyIsImlzQmlnRW5kaWFuIiwibGUiLCJzdW1tYXJ5UGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwidWludDMyIiwiZmxvYXQiLCJsZWFmUGFyc2VyIiwidWludDgiLCJza2lwIiwidWludDE2IiwiY2hvaWNlIiwidGFnIiwiY2hvaWNlcyIsImFycmF5IiwibGVuZ3RoIiwidHlwZSIsInVpbnQ2NCIsImJpZ0JlZFBhcnNlciIsImludDMyIiwic3RyaW5nIiwiemVyb1Rlcm1pbmF0ZWQiLCJiaWdXaWdQYXJzZXIiLCJCbG9ja1ZpZXciLCJiYmkiLCJyZWZzQnlOYW1lIiwiY2lyVHJlZU9mZnNldCIsImNpclRyZWVMZW5ndGgiLCJpc0NvbXByZXNzZWQiLCJibG9ja1R5cGUiLCJBYm9ydGFibGVQcm9taXNlQ2FjaGUiLCJjYWNoZSIsIlF1aWNrTFJVIiwibWF4U2l6ZSIsImZpbGwiLCJyZXF1ZXN0RGF0YSIsInNpZ25hbCIsIm9mZnNldCIsInJlYWQiLCJCdWZmZXIiLCJhbGxvYyIsImJ1ZmZlciIsIkVycm9yIiwiT2JqZWN0IiwiYXNzaWduIiwiY2hyTmFtZSIsInN0YXJ0IiwiZW5kIiwib2JzZXJ2ZXIiLCJvcHRzIiwiY2hySWQiLCJ1bmRlZmluZWQiLCJjb21wbGV0ZSIsInJlcXVlc3QiLCJjaXJUcmVlUHJvbWlzZSIsImNpckJsb2NrU2l6ZSIsInJlYWRVSW50MzJCRSIsInJlYWRVSW50MzJMRSIsImJsb2Nrc1RvRmV0Y2giLCJvdXRzdGFuZGluZyIsImZpbHRlckZlYXRzIiwiYiIsInN0YXJ0Q2hyb20iLCJzdGFydEJhc2UiLCJlbmRDaHJvbSIsImVuZEJhc2UiLCJjaXJGb2JTdGFydEZldGNoIiwib2ZmIiwiZnIiLCJsZXZlbCIsIm1heCIsIm1pbiIsImZlYXR1cmVDYWNoZSIsImdldCIsInJlc3VsdEJ1ZmZlciIsImkiLCJjb250YWlucyIsImNpckZvYlJlY3VyMiIsInJlYWRGZWF0dXJlcyIsImVycm9yIiwiY2lyRm9iUmVjdXIiLCJtYXhDaXJCbG9ja1NwYW4iLCJzcGFucyIsIlJhbmdlIiwiYmxvY2tTcGFuIiwidW5pb24iLCJnZXRSYW5nZXMiLCJtYXAiLCJlIiwiY2lyQmxvY2tEYXRhIiwiZGF0YSIsInNsaWNlIiwicCIsInBhcnNlIiwicmVzdWx0IiwiY29uY2F0IiwiZmlsdGVyIiwibCIsImJsb2NrT2Zmc2V0IiwiYmxvY2tTaXplIiwicmVjdXJPZmZzZXRzIiwic3RhcnRPZmZzZXQiLCJmZWF0dXJlcyIsImN1cnJPZmZzZXQiLCJieXRlTGVuZ3RoIiwicmVzIiwicHVzaCIsIml0ZW1zIiwiZWx0IiwiY2hyb21JZCIsIm1heFNjb3JlIiwibWluU2NvcmUiLCJzY29yZSIsInN1bURhdGEiLCJ2YWxpZENudCIsInN1bW1hcnkiLCJmIiwiY29vcmRGaWx0ZXIiLCJ1bmlxdWVJZCIsImJ5dGVzIiwicmVzdWx0cyIsIml0ZW1TcGFuIiwiaXRlbVN0ZXAiLCJibG9ja1N0YXJ0IiwiYmxvY2tzIiwiYmxvY2tHcm91cHNUb0ZldGNoIiwiUHJvbWlzZSIsImFsbCIsImJsb2NrR3JvdXAiLCJmb3JFYWNoIiwiYmxvY2siLCJyZXN1bHREYXRhIiwiemxpYiIsImluZmxhdGVTeW5jIiwibmV4dCIsInBhcnNlU3VtbWFyeUJsb2NrIiwicGFyc2VCaWdXaWdCbG9jayIsInBhcnNlQmlnQmVkQmxvY2siLCJjb25zb2xlIiwid2FybiIsInJhbmdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7OztBQXNDQSxJQUFNQSxrQkFBa0IsR0FBRyxDQUEzQjtBQUNBLElBQU1DLGtCQUFrQixHQUFHLENBQTNCO0FBQ0EsSUFBTUMsa0JBQWtCLEdBQUcsQ0FBM0I7O0FBRUEsU0FBU0MsVUFBVCxDQUFv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InNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1iaXR3aXNlOiBbXCJlcnJvclwiLCB7IFwiYWxsb3dcIjogW1wifFwiXSB9XSAqL1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnQGdtb2QvYmluYXJ5LXBhcnNlcidcbmltcG9ydCBBYm9ydGFibGVQcm9taXNlQ2FjaGUgZnJvbSAnYWJvcnRhYmxlLXByb21pc2UtY2FjaGUnXG5pbXBvcnQgeyBHZW5lcmljRmlsZWhhbmRsZSB9IGZyb20gJ2dlbmVyaWMtZmlsZWhhbmRsZSdcbmltcG9ydCB6bGliIGZyb20gJ3psaWInXG5pbXBvcnQgUXVpY2tMUlUgZnJvbSAncXVpY2stbHJ1J1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4vYmJpJ1xuaW1wb3J0IFJhbmdlIGZyb20gJy4vcmFuZ2UnXG5pbXBvcnQgeyBncm91cEJsb2NrcywgY2hlY2tBYm9ydFNpZ25hbCB9IGZyb20gJy4vdXRpbCdcblxuaW50ZXJmYWNlIENvb3JkUmVxdWVzdCB7XG4gIGNocklkOiBudW1iZXJcbiAgc3RhcnQ6IG51bWJlclxuICBlbmQ6IG51bWJlclxufVxuaW50ZXJmYWNlIERhdGFCbG9jayB7XG4gIHN0YXJ0Q2hyb206IG51bWJlclxuICBlbmRDaHJvbTogbnVtYmVyXG4gIHN0YXJ0QmFzZTogbnVtYmVyXG4gIGVuZEJhc2U6IG51bWJlclxuICB2YWxpZENudDogbnVtYmVyXG4gIG1pblZhbDogbnVtYmVyXG4gIG1heFZhbDogbnVtYmVyXG4gIHN1bURhdGE6IG51bWJlclxuICBzdW1TcURhdGE6IG51bWJlclxufVxuaW50ZXJmYWNlIFJlYWREYXRhIHtcbiAgb2Zmc2V0OiBudW1iZXJcbiAgbGVuZ3RoOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFN1bW1hcnlCbG9jayB7XG4gIGNocm9tSWQ6IG51bWJlclxuICBzdGFydDogbnVtYmVyXG4gIGVuZDogbnVtYmVyXG4gIHZhbGlkQ250OiBudW1iZXJcbiAgbWluU2NvcmU6IG51bWJlclxuICBtYXhTY29yZTogbnVtYmVyXG4gIHN1bURhdGE6IG51bWJlclxuICBzdW1TcURhdGE6IG51bWJlclxufVxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuICByZXF1ZXN0PzogQ29vcmRSZXF1ZXN0XG59XG5cbmNvbnN0IEJJR19XSUdfVFlQRV9HUkFQSCA9IDFcbmNvbnN0IEJJR19XSUdfVFlQRV9WU1RFUCA9IDJcbmNvbnN0IEJJR19XSUdfVFlQRV9GU1RFUCA9IDNcblxuZnVuY3Rpb24gZ2V0UGFyc2Vycyhpc0JpZ0VuZGlhbjogYm9vbGVhbik6IGFueSB7XG4gIGNvbnN0IGxlID0gaXNCaWdFbmRpYW4gPyAnYmlnJyA6ICdsaXR0bGUnXG4gIGNvbnN0IHN1bW1hcnlQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50MzIoJ2Nocm9tSWQnKVxuICAgIC51aW50MzIoJ3N0YXJ0JylcbiAgICAudWludDMyKCdlbmQnKVxuICAgIC51aW50MzIoJ3ZhbGlkQ250JylcbiAgICAuZmxvYXQoJ21pblNjb3JlJylcbiAgICAuZmxvYXQoJ21heFNjb3JlJylcbiAgICAuZmxvYXQoJ3N1bURhdGEnKVxuICAgIC5mbG9hdCgnc3VtU3FEYXRhJylcblxuICBjb25zdCBsZWFmUGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAgLmVuZGlhbmVzcyhsZSlcbiAgICAudWludDgoJ2lzTGVhZicpXG4gICAgLnNraXAoMSlcbiAgICAudWludDE2KCdjbnQnKVxuICAgIC5jaG9pY2Uoe1xuICAgICAgdGFnOiAnaXNMZWFmJyxcbiAgICAgIGNob2ljZXM6IHtcbiAgICAgICAgMTogbmV3IFBhcnNlcigpLmFycmF5KCdibG9ja3NUb0ZldGNoJywge1xuICAgICAgICAgIGxlbmd0aDogJ2NudCcsXG4gICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpXG4gICAgICAgICAgICAudWludDMyKCdzdGFydENocm9tJylcbiAgICAgICAgICAgIC51aW50MzIoJ3N0YXJ0QmFzZScpXG4gICAgICAgICAgICAudWludDMyKCdlbmRDaHJvbScpXG4gICAgICAgICAgICAudWludDMyKCdlbmRCYXNlJylcbiAgICAgICAgICAgIC51aW50NjQoJ2Jsb2NrT2Zmc2V0JylcbiAgICAgICAgICAgIC51aW50NjQoJ2Jsb2NrU2l6ZScpLFxuICAgICAgICB9KSxcbiAgICAgICAgMDogbmV3IFBhcnNlcigpLmFycmF5KCdyZWN1ck9mZnNldHMnLCB7XG4gICAgICAgICAgbGVuZ3RoOiAnY250JyxcbiAgICAgICAgICB0eXBlOiBuZXcgUGFyc2VyKClcbiAgICAgICAgICAgIC51aW50MzIoJ3N0YXJ0Q2hyb20nKVxuICAgICAgICAgICAgLnVpbnQzMignc3RhcnRCYXNlJylcbiAgICAgICAgICAgIC51aW50MzIoJ2VuZENocm9tJylcbiAgICAgICAgICAgIC51aW50MzIoJ2VuZEJhc2UnKVxuICAgICAgICAgICAgLnVpbnQ2NCgnYmxvY2tPZmZzZXQnKSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pXG4gIGNvbnN0IGJpZ0JlZFBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQzMignY2hyb21JZCcpXG4gICAgLmludDMyKCdzdGFydCcpXG4gICAgLmludDMyKCdlbmQnKVxuICAgIC5zdHJpbmcoJ3Jlc3QnLCB7XG4gICAgICB6ZXJvVGVybWluYXRlZDogdHJ1ZSxcbiAgICB9KVxuXG4gIGNvbnN0IGJpZ1dpZ1BhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnNraXAoNClcbiAgICAuaW50MzIoJ2Jsb2NrU3RhcnQnKVxuICAgIC5za2lwKDQpXG4gICAgLnVpbnQzMignaXRlbVN0ZXAnKVxuICAgIC51aW50MzIoJ2l0ZW1TcGFuJylcbiAgICAudWludDgoJ2Jsb2NrVHlwZScpXG4gICAgLnNraXAoMSlcbiAgICAudWludDE2KCdpdGVtQ291bnQnKVxuICAgIC5jaG9pY2Uoe1xuICAgICAgdGFnOiAnYmxvY2tUeXBlJyxcbiAgICAgIGNob2ljZXM6IHtcbiAgICAgICAgW0JJR19XSUdfVFlQRV9GU1RFUF06IG5ldyBQYXJzZXIoKS5hcnJheSgnaXRlbXMnLCB7XG4gICAgICAgICAgbGVuZ3RoOiAnaXRlbUNvdW50JyxcbiAgICAgICAgICB0eXBlOiBuZXcgUGFyc2VyKCkuZmxvYXQoJ3Njb3JlJyksXG4gICAgICAgIH0pLFxuICAgICAgICBbQklHX1dJR19UWVBFX1ZTVEVQXTogbmV3IFBhcnNlcigpLmFycmF5KCdpdGVtcycsIHtcbiAgICAgICAgICBsZW5ndGg6ICdpdGVtQ291bnQnLFxuICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKS5pbnQzMignc3RhcnQnKS5mbG9hdCgnc2NvcmUnKSxcbiAgICAgICAgfSksXG4gICAgICAgIFtCSUdfV0lHX1RZUEVfR1JBUEhdOiBuZXcgUGFyc2VyKCkuYXJyYXkoJ2l0ZW1zJywge1xuICAgICAgICAgIGxlbmd0aDogJ2l0ZW1Db3VudCcsXG4gICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpXG4gICAgICAgICAgICAuaW50MzIoJ3N0YXJ0JylcbiAgICAgICAgICAgIC5pbnQzMignZW5kJylcbiAgICAgICAgICAgIC5mbG9hdCgnc2NvcmUnKSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pXG4gIHJldHVybiB7XG4gICAgYmlnV2lnUGFyc2VyLFxuICAgIGJpZ0JlZFBhcnNlcixcbiAgICBzdW1tYXJ5UGFyc2VyLFxuICAgIGxlYWZQYXJzZXIsXG4gIH1cbn1cblxuLyoqXG4gKiBWaWV3IGludG8gYSBzdWJzZXQgb2YgdGhlIGRhdGEgaW4gYSBCaWdXaWcgZmlsZS5cbiAqXG4gKiBBZGFwdGVkIGJ5IFJvYmVydCBCdWVscyBhbmQgQ29saW4gRGllc2ggZnJvbSBiaWd3aWcuanMgaW4gdGhlIERhbGxpYW5jZSBHZW5vbWVcbiAqIEV4cGxvcmVyIGJ5IFRob21hcyBEb3duLlxuICogQGNvbnN0cnVjdHNcbiAqL1xuXG5leHBvcnQgY2xhc3MgQmxvY2tWaWV3IHtcbiAgcHJpdmF0ZSBjaXJUcmVlT2Zmc2V0OiBudW1iZXJcblxuICBwcml2YXRlIGNpclRyZWVMZW5ndGg6IG51bWJlclxuXG4gIHByaXZhdGUgYmJpOiBHZW5lcmljRmlsZWhhbmRsZVxuXG4gIHByaXZhdGUgaXNDb21wcmVzc2VkOiBib29sZWFuXG5cbiAgcHJpdmF0ZSBpc0JpZ0VuZGlhbjogYm9vbGVhblxuXG4gIHByaXZhdGUgcmVmc0J5TmFtZTogYW55XG5cbiAgcHJpdmF0ZSBibG9ja1R5cGU6IHN0cmluZ1xuXG4gIHByaXZhdGUgY2lyVHJlZVByb21pc2U/OiBQcm9taXNlPHsgYnl0ZXNSZWFkOiBudW1iZXI7IGJ1ZmZlcjogQnVmZmVyIH0+XG5cbiAgcHJpdmF0ZSBmZWF0dXJlQ2FjaGUgPSBuZXcgQWJvcnRhYmxlUHJvbWlzZUNhY2hlKHtcbiAgICBjYWNoZTogbmV3IFF1aWNrTFJVKHsgbWF4U2l6ZTogMTAwMCB9KSxcblxuICAgIGZpbGw6IGFzeW5jIChyZXF1ZXN0RGF0YTogUmVhZERhdGEsIHNpZ25hbDogQWJvcnRTaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IHsgbGVuZ3RoLCBvZmZzZXQgfSA9IHJlcXVlc3REYXRhXG4gICAgICBjb25zdCB7IGJ1ZmZlciB9ID0gYXdhaXQgdGhpcy5iYmkucmVhZChCdWZmZXIuYWxsb2MobGVuZ3RoKSwgMCwgbGVuZ3RoLCBvZmZzZXQsIHsgc2lnbmFsIH0pXG4gICAgICByZXR1cm4gYnVmZmVyXG4gICAgfSxcbiAgfSlcblxuICBwcml2YXRlIGxlYWZQYXJzZXI6IGFueVxuXG4gIHByaXZhdGUgYmlnV2lnUGFyc2VyOiBhbnlcblxuICBwcml2YXRlIGJpZ0JlZFBhcnNlcjogYW55XG5cbiAgcHJpdmF0ZSBzdW1tYXJ5UGFyc2VyOiBhbnlcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgYmJpOiBHZW5lcmljRmlsZWhhbmRsZSxcbiAgICByZWZzQnlOYW1lOiBhbnksXG4gICAgY2lyVHJlZU9mZnNldDogbnVtYmVyLFxuICAgIGNpclRyZWVMZW5ndGg6IG51bWJlcixcbiAgICBpc0JpZ0VuZGlhbjogYm9vbGVhbixcbiAgICBpc0NvbXByZXNzZWQ6IGJvb2xlYW4sXG4gICAgYmxvY2tUeXBlOiBzdHJpbmcsXG4gICkge1xuICAgIGlmICghKGNpclRyZWVPZmZzZXQgPj0gMCkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXJUcmVlT2Zmc2V0IScpXG4gICAgaWYgKCEoY2lyVHJlZUxlbmd0aCA+IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lyVHJlZUxlbmd0aCEnKVxuXG4gICAgdGhpcy5jaXJUcmVlT2Zmc2V0ID0gY2lyVHJlZU9mZnNldFxuICAgIHRoaXMuY2lyVHJlZUxlbmd0aCA9IGNpclRyZWVMZW5ndGhcbiAgICB0aGlzLmlzQ29tcHJlc3NlZCA9IGlzQ29tcHJlc3NlZFxuICAgIHRoaXMucmVmc0J5TmFtZSA9IHJlZnNCeU5hbWVcbiAgICB0aGlzLmlzQmlnRW5kaWFuID0gaXNCaWdFbmRpYW5cbiAgICB0aGlzLmJiaSA9IGJiaVxuICAgIHRoaXMuYmxvY2tUeXBlID0gYmxvY2tUeXBlXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBnZXRQYXJzZXJzKGlzQmlnRW5kaWFuKSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkV2lnRGF0YShcbiAgICBjaHJOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvYnNlcnZlcjogT2JzZXJ2ZXI8RmVhdHVyZVtdPixcbiAgICBvcHRzOiBPcHRpb25zLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyByZWZzQnlOYW1lLCBiYmksIGNpclRyZWVPZmZzZXQsIGlzQmlnRW5kaWFuIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0c1xuICAgICAgY29uc3QgY2hySWQgPSByZWZzQnlOYW1lW2Nock5hbWVdXG4gICAgICBpZiAoY2hySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpXG4gICAgICB9XG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBjaHJJZCwgc3RhcnQsIGVuZCB9XG4gICAgICBpZiAoIXRoaXMuY2lyVHJlZVByb21pc2UpIHtcbiAgICAgICAgdGhpcy5jaXJUcmVlUHJvbWlzZSA9IGJiaS5yZWFkKEJ1ZmZlci5hbGxvYyg0OCksIDAsIDQ4LCBjaXJUcmVlT2Zmc2V0LCB7IHNpZ25hbCB9KVxuICAgICAgfVxuICAgICAgY29uc3QgeyBidWZmZXIgfSA9IGF3YWl0IHRoaXMuY2lyVHJlZVByb21pc2VcbiAgICAgIGNvbnN0IGNpckJsb2NrU2l6ZSA9IGlzQmlnRW5kaWFuID8gYnVmZmVyLnJlYWRVSW50MzJCRSg0KSA6IGJ1ZmZlci5yZWFkVUludDMyTEUoNClcbiAgICAgIGxldCBibG9ja3NUb0ZldGNoOiBhbnlbXSA9IFtdXG4gICAgICBsZXQgb3V0c3RhbmRpbmcgPSAwXG5cbiAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgbGV0IGNpckZvYlJlY3VyMjogRnVuY3Rpb25cblxuICAgICAgY29uc3QgZmlsdGVyRmVhdHMgPSAoYjogRGF0YUJsb2NrKTogYm9vbGVhbiA9PlxuICAgICAgICAoYi5zdGFydENocm9tIDwgY2hySWQgfHwgKGIuc3RhcnRDaHJvbSA9PT0gY2hySWQgJiYgYi5zdGFydEJhc2UgPD0gZW5kKSkgJiZcbiAgICAgICAgKGIuZW5kQ2hyb20gPiBjaHJJZCB8fCAoYi5lbmRDaHJvbSA9PT0gY2hySWQgJiYgYi5lbmRCYXNlID49IHN0YXJ0KSlcblxuICAgICAgY29uc3QgY2lyRm9iU3RhcnRGZXRjaCA9IGFzeW5jIChvZmY6IGFueSwgZnI6IGFueSwgbGV2ZWw6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGZyLm1heCgpIC0gZnIubWluKClcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSBmci5taW4oKVxuICAgICAgICAgIGNvbnN0IHJlc3VsdEJ1ZmZlciA9IGF3YWl0IHRoaXMuZmVhdHVyZUNhY2hlLmdldChcbiAgICAgICAgICAgIGAke2xlbmd0aH1fJHtvZmZzZXR9YCxcbiAgICAgICAgICAgIHsgbGVuZ3RoLCBvZmZzZXQgfSxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICApXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmYubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChmci5jb250YWlucyhvZmZbaV0pKSB7XG4gICAgICAgICAgICAgIGNpckZvYlJlY3VyMihyZXN1bHRCdWZmZXIsIG9mZltpXSAtIG9mZnNldCwgbGV2ZWwsIG9ic2VydmVyLCBvcHRzKVxuICAgICAgICAgICAgICBvdXRzdGFuZGluZyAtPSAxXG4gICAgICAgICAgICAgIGlmIChvdXRzdGFuZGluZyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZEZlYXR1cmVzKG9ic2VydmVyLCBibG9ja3NUb0ZldGNoLCB7IC4uLm9wdHMsIHJlcXVlc3QgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNpckZvYlJlY3VyID0gKG9mZnNldDogYW55LCBsZXZlbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb3V0c3RhbmRpbmcgKz0gb2Zmc2V0Lmxlbmd0aFxuXG4gICAgICAgICAgY29uc3QgbWF4Q2lyQmxvY2tTcGFuID0gNCArIGNpckJsb2NrU2l6ZSAqIDMyIC8vIFVwcGVyIGJvdW5kIG9uIHNpemUsIGJhc2VkIG9uIGEgY29tcGxldGVseSBmdWxsIGxlYWYgbm9kZS5cbiAgICAgICAgICBsZXQgc3BhbnMgPSBuZXcgUmFuZ2Uob2Zmc2V0WzBdLCBvZmZzZXRbMF0gKyBtYXhDaXJCbG9ja1NwYW4pXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvZmZzZXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrU3BhbiA9IG5ldyBSYW5nZShvZmZzZXRbaV0sIG9mZnNldFtpXSArIG1heENpckJsb2NrU3BhbilcbiAgICAgICAgICAgIHNwYW5zID0gc3BhbnMudW5pb24oYmxvY2tTcGFuKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzcGFucy5nZXRSYW5nZXMoKS5tYXAoKGZyOiBSYW5nZSkgPT4gY2lyRm9iU3RhcnRGZXRjaChvZmZzZXQsIGZyLCBsZXZlbCkpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNpckZvYlJlY3VyMiA9IChjaXJCbG9ja0RhdGE6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gY2lyQmxvY2tEYXRhLnNsaWNlKG9mZnNldClcblxuICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmxlYWZQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgICAgICAgaWYgKHAuYmxvY2tzVG9GZXRjaCkge1xuICAgICAgICAgICAgYmxvY2tzVG9GZXRjaCA9IGJsb2Nrc1RvRmV0Y2guY29uY2F0KFxuICAgICAgICAgICAgICBwLmJsb2Nrc1RvRmV0Y2hcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZpbHRlckZlYXRzKVxuICAgICAgICAgICAgICAgIC5tYXAoKGw6IGFueSk6IGFueSA9PiAoeyBvZmZzZXQ6IGwuYmxvY2tPZmZzZXQsIGxlbmd0aDogbC5ibG9ja1NpemUgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocC5yZWN1ck9mZnNldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3VyT2Zmc2V0cyA9IHAucmVjdXJPZmZzZXRzXG4gICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVyRmVhdHMpXG4gICAgICAgICAgICAgIC5tYXAoKGw6IGFueSk6IGFueSA9PiBsLmJsb2NrT2Zmc2V0KVxuICAgICAgICAgICAgaWYgKHJlY3VyT2Zmc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNpckZvYlJlY3VyKHJlY3VyT2Zmc2V0cywgbGV2ZWwgKyAxKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNpckZvYlJlY3VyKFtjaXJUcmVlT2Zmc2V0ICsgNDhdLCAxKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9ic2VydmVyLmVycm9yKGUpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVN1bW1hcnlCbG9jayhkYXRhOiBCdWZmZXIsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIHJlcXVlc3Q/OiBDb29yZFJlcXVlc3QpOiBGZWF0dXJlW10ge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gW11cbiAgICBsZXQgY3Vyck9mZnNldCA9IHN0YXJ0T2Zmc2V0XG4gICAgd2hpbGUgKGN1cnJPZmZzZXQgPCBkYXRhLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc3VtbWFyeVBhcnNlci5wYXJzZShkYXRhLnNsaWNlKGN1cnJPZmZzZXQpKVxuICAgICAgZmVhdHVyZXMucHVzaChyZXMucmVzdWx0KVxuICAgICAgY3Vyck9mZnNldCArPSByZXMub2Zmc2V0XG4gICAgfVxuICAgIGxldCBpdGVtcyA9IGZlYXR1cmVzXG4gICAgaWYgKHJlcXVlc3QpIGl0ZW1zID0gaXRlbXMuZmlsdGVyKChlbHQ6IFN1bW1hcnlCbG9jayk6IGJvb2xlYW4gPT4gZWx0LmNocm9tSWQgPT09IHJlcXVlc3QuY2hySWQpXG4gICAgaXRlbXMgPSBpdGVtcy5tYXAoXG4gICAgICAoZWx0OiBTdW1tYXJ5QmxvY2spOiBGZWF0dXJlID0+ICh7XG4gICAgICAgIHN0YXJ0OiBlbHQuc3RhcnQsXG4gICAgICAgIGVuZDogZWx0LmVuZCxcbiAgICAgICAgbWF4U2NvcmU6IGVsdC5tYXhTY29yZSxcbiAgICAgICAgbWluU2NvcmU6IGVsdC5taW5TY29yZSxcbiAgICAgICAgc2NvcmU6IGVsdC5zdW1EYXRhIC8gKGVsdC52YWxpZENudCB8fCAxKSxcbiAgICAgICAgc3VtbWFyeTogdHJ1ZSxcbiAgICAgIH0pLFxuICAgIClcbiAgICByZXR1cm4gcmVxdWVzdCA/IGl0ZW1zLmZpbHRlcihmID0+IEJsb2NrVmlldy5jb29yZEZpbHRlcihmLCByZXF1ZXN0KSkgOiBpdGVtc1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUJpZ0JlZEJsb2NrKFxuICAgIGRhdGE6IEJ1ZmZlcixcbiAgICBzdGFydE9mZnNldDogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHJlcXVlc3Q/OiBDb29yZFJlcXVlc3QsXG4gICk6IEZlYXR1cmVbXSB7XG4gICAgY29uc3QgaXRlbXMgPSBbXVxuICAgIGxldCBjdXJyT2Zmc2V0ID0gc3RhcnRPZmZzZXRcbiAgICB3aGlsZSAoY3Vyck9mZnNldCA8IGRhdGEuYnl0ZUxlbmd0aCkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5iaWdCZWRQYXJzZXIucGFyc2UoZGF0YS5zbGljZShjdXJyT2Zmc2V0KSlcbiAgICAgIHJlcy5yZXN1bHQudW5pcXVlSWQgPSBgYmItJHtvZmZzZXQgKyBjdXJyT2Zmc2V0fWBcbiAgICAgIGl0ZW1zLnB1c2gocmVzLnJlc3VsdClcbiAgICAgIGN1cnJPZmZzZXQgKz0gcmVzLm9mZnNldFxuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0ID8gaXRlbXMuZmlsdGVyKChmOiBhbnkpID0+IEJsb2NrVmlldy5jb29yZEZpbHRlcihmLCByZXF1ZXN0KSkgOiBpdGVtc1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUJpZ1dpZ0Jsb2NrKGJ5dGVzOiBCdWZmZXIsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIHJlcXVlc3Q/OiBDb29yZFJlcXVlc3QpOiBGZWF0dXJlW10ge1xuICAgIGNvbnN0IGRhdGEgPSBieXRlcy5zbGljZShzdGFydE9mZnNldClcbiAgICBjb25zdCByZXN1bHRzID0gdGhpcy5iaWdXaWdQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgY29uc3QgeyBpdGVtcywgaXRlbVNwYW4sIGl0ZW1TdGVwLCBibG9ja1N0YXJ0LCBibG9ja1R5cGUgfSA9IHJlc3VsdHNcbiAgICBpZiAoYmxvY2tUeXBlID09PSBCSUdfV0lHX1RZUEVfRlNURVApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlbXNbaV0uc3RhcnQgPSBibG9ja1N0YXJ0ICsgaSAqIGl0ZW1TdGVwXG4gICAgICAgIGl0ZW1zW2ldLmVuZCA9IGJsb2NrU3RhcnQgKyBpICogaXRlbVN0ZXAgKyBpdGVtU3BhblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYmxvY2tUeXBlID09PSBCSUdfV0lHX1RZUEVfVlNURVApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlbXNbaV0uZW5kID0gaXRlbXNbaV0uc3RhcnQgKyBpdGVtU3BhblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdCA/IGl0ZW1zLmZpbHRlcigoZjogYW55KSA9PiBCbG9ja1ZpZXcuY29vcmRGaWx0ZXIoZiwgcmVxdWVzdCkpIDogaXRlbXNcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvb3JkRmlsdGVyKGY6IEZlYXR1cmUsIHJhbmdlOiBDb29yZFJlcXVlc3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZi5zdGFydCA8IHJhbmdlLmVuZCAmJiBmLmVuZCA+PSByYW5nZS5zdGFydFxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlYWRGZWF0dXJlcyhcbiAgICBvYnNlcnZlcjogT2JzZXJ2ZXI8RmVhdHVyZVtdPixcbiAgICBibG9ja3M6IGFueSxcbiAgICBvcHRzOiBPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGJsb2NrVHlwZSwgaXNDb21wcmVzc2VkIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHNpZ25hbCwgcmVxdWVzdCB9ID0gb3B0c1xuICAgICAgY29uc3QgYmxvY2tHcm91cHNUb0ZldGNoID0gZ3JvdXBCbG9ja3MoYmxvY2tzKVxuICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgYmxvY2tHcm91cHNUb0ZldGNoLm1hcChhc3luYyAoYmxvY2tHcm91cDogYW55KSA9PiB7XG4gICAgICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGgsIG9mZnNldCB9ID0gYmxvY2tHcm91cFxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZlYXR1cmVDYWNoZS5nZXQoYCR7bGVuZ3RofV8ke29mZnNldH1gLCBibG9ja0dyb3VwLCBzaWduYWwpXG4gICAgICAgICAgYmxvY2tHcm91cC5ibG9ja3MuZm9yRWFjaCgoYmxvY2s6IGFueSkgPT4ge1xuICAgICAgICAgICAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpXG4gICAgICAgICAgICBsZXQgYmxvY2tPZmZzZXQgPSBibG9jay5vZmZzZXQgLSBibG9ja0dyb3VwLm9mZnNldFxuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEgPSBkYXRhXG4gICAgICAgICAgICBpZiAoaXNDb21wcmVzc2VkKSB7XG4gICAgICAgICAgICAgIHJlc3VsdERhdGEgPSB6bGliLmluZmxhdGVTeW5jKGRhdGEuc2xpY2UoYmxvY2tPZmZzZXQpKVxuICAgICAgICAgICAgICBibG9ja09mZnNldCA9IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGJsb2NrVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucGFyc2VTdW1tYXJ5QmxvY2socmVzdWx0RGF0YSwgYmxvY2tPZmZzZXQsIHJlcXVlc3QpKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ2JpZ3dpZyc6XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLnBhcnNlQmlnV2lnQmxvY2socmVzdWx0RGF0YSwgYmxvY2tPZmZzZXQsIHJlcXVlc3QpKVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ2JpZ2JlZCc6XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmlnQmVkQmxvY2socmVzdWx0RGF0YSwgYmxvY2tPZmZzZXQsIGJsb2NrLm9mZnNldCAqICgxIDw8IDgpLCByZXF1ZXN0KSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoICR7YmxvY2tUeXBlfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "BigWig", {
enumerable: true,
get: function get() {
return _bigwig.BigWig;
}
});
Object.defineProperty(exports, "BigBed", {
enumerable: true,
get: function get() {
return _bigbed.BigBed;
}
});
Object.defineProperty(exports, "Feature", {
enumerable: true,
get: function get() {
return _bbi.Feature;
}
});
Object.defineProperty(exports, "Header", {
enumerable: true,
get: function get() {
return _bbi.Header;
}
});
Object.defineProperty(exports, "RequestOptions", {
enumerable: true,
get: function get() {
return _bbi.RequestOptions;
}
});
var _bigwig = require("./bigwig");
var _bigbed = require("./bigbed");
var _bbi = require("./bbi");
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEJpZ1dpZyB9IGZyb20gJy4vYmlnd2lnJ1xuZXhwb3J0IHsgQmlnQmVkIH0gZnJvbSAnLi9iaWdiZWQnXG5leHBvcnQgeyBGZWF0dXJlLCBIZWFkZXIsIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi9iYmknXG4iXX0=
Object.defineProperty(exports, "__esModule", { value: true });
exports.BigBed = exports.BigWig = void 0;
var bigwig_1 = require("./bigwig");
Object.defineProperty(exports, "BigWig", { enumerable: true, get: function () { return bigwig_1.BigWig; } });
var bigbed_1 = require("./bigbed");
Object.defineProperty(exports, "BigBed", { enumerable: true, get: function () { return bigbed_1.BigBed; } });
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
/* eslint prefer-rest-params:0, no-nested-ternary:0 */
Object.defineProperty(exports, "__esModule", { value: true });
/**

@@ -22,168 +8,121 @@ * Adapted from a combination of Range and _Compound in the

*/
var Range = /*#__PURE__*/function () {
function Range(arg1, arg2) {
(0, _classCallCheck2.default)(this, Range);
(0, _defineProperty2.default)(this, "ranges", void 0);
this.ranges = arguments.length === 2 ? [{
min: arg1,
max: arg2
}] : 0 in arg1 ? Object.assign({}, arg1) : [arg1];
}
(0, _createClass2.default)(Range, [{
key: "min",
value: function min() {
return this.ranges[0].min;
var Range = /** @class */ (function () {
function Range(arg1, arg2) {
this.ranges =
arguments.length === 2
? [{ min: arg1, max: arg2 }]
: 0 in arg1
? Object.assign({}, arg1)
: [arg1];
}
}, {
key: "max",
value: function max() {
return this.ranges[this.ranges.length - 1].max;
}
}, {
key: "contains",
value: function contains(pos) {
for (var s = 0; s < this.ranges.length; s += 1) {
var r = this.ranges[s];
if (r.min <= pos && r.max >= pos) {
return true;
Range.prototype.min = function () {
return this.ranges[0].min;
};
Range.prototype.max = function () {
return this.ranges[this.ranges.length - 1].max;
};
Range.prototype.contains = function (pos) {
for (var s = 0; s < this.ranges.length; s += 1) {
var r = this.ranges[s];
if (r.min <= pos && r.max >= pos) {
return true;
}
}
}
return false;
}
}, {
key: "isContiguous",
value: function isContiguous() {
return this.ranges.length > 1;
}
}, {
key: "getRanges",
value: function getRanges() {
return this.ranges.map(function (r) {
return new Range(r.min, r.max);
});
}
}, {
key: "toString",
value: function toString() {
return this.ranges.map(function (r) {
return "[".concat(r.min, "-").concat(r.max, "]");
}).join(',');
}
}, {
key: "union",
value: function union(s1) {
var ranges = this.getRanges().concat(s1.getRanges()).sort(this.rangeOrder);
var oranges = [];
var current = ranges[0];
for (var i = 1; i < ranges.length; i += 1) {
var nxt = ranges[i];
if (nxt.min() > current.max() + 1) {
oranges.push(current);
current = nxt;
} else if (nxt.max() > current.max()) {
current = new Range(current.min(), nxt.max());
return false;
};
Range.prototype.isContiguous = function () {
return this.ranges.length > 1;
};
Range.prototype.getRanges = function () {
return this.ranges.map(function (r) { return new Range(r.min, r.max); });
};
Range.prototype.toString = function () {
return this.ranges.map(function (r) { return "[".concat(r.min, "-").concat(r.max, "]"); }).join(',');
};
Range.prototype.union = function (s1) {
var ranges = this.getRanges().concat(s1.getRanges()).sort(this.rangeOrder);
var oranges = [];
var current = ranges[0];
for (var i = 1; i < ranges.length; i += 1) {
var nxt = ranges[i];
if (nxt.min() > current.max() + 1) {
oranges.push(current);
current = nxt;
}
else if (nxt.max() > current.max()) {
current = new Range(current.min(), nxt.max());
}
}
}
oranges.push(current);
if (oranges.length === 1) {
return oranges[0];
}
return new Range(oranges);
}
}, {
key: "intersection",
value: function intersection(arg) {
// eslint-disable-next-line @typescript-eslint/no-this-alias
var s0 = this;
var s1 = arg;
var r0 = this.ranges();
var r1 = s1.ranges();
var l0 = r0.length;
var l1 = r1.length;
var i0 = 0;
var i1 = 0;
var or = [];
while (i0 < l0 && i1 < l1) {
s0 = r0[i0];
s1 = r1[i1];
var lapMin = Math.max(s0.min(), s1.min());
var lapMax = Math.min(s0.max(), s1.max());
if (lapMax >= lapMin) {
or.push(new Range(lapMin, lapMax));
oranges.push(current);
if (oranges.length === 1) {
return oranges[0];
}
if (s0.max() > s1.max()) {
i1 += 1;
} else {
i0 += 1;
return new Range(oranges);
};
Range.prototype.intersection = function (arg) {
// eslint-disable-next-line @typescript-eslint/no-this-alias
var s0 = this;
var s1 = arg;
var r0 = this.ranges();
var r1 = s1.ranges();
var l0 = r0.length;
var l1 = r1.length;
var i0 = 0;
var i1 = 0;
var or = [];
while (i0 < l0 && i1 < l1) {
s0 = r0[i0];
s1 = r1[i1];
var lapMin = Math.max(s0.min(), s1.min());
var lapMax = Math.min(s0.max(), s1.max());
if (lapMax >= lapMin) {
or.push(new Range(lapMin, lapMax));
}
if (s0.max() > s1.max()) {
i1 += 1;
}
else {
i0 += 1;
}
}
}
if (or.length === 0) {
throw new Error('found range of length 0');
}
if (or.length === 1) {
return or[0];
}
return new Range(or);
}
}, {
key: "coverage",
value: function coverage() {
var tot = 0;
var rl = this.ranges();
for (var ri = 0; ri < rl.length; ri += 1) {
var r = rl[ri];
tot += r.max() - r.min() + 1;
}
return tot;
}
}, {
key: "rangeOrder",
value: function rangeOrder(tmpa, tmpb) {
var a = tmpa;
var b = tmpb;
if (arguments.length < 2) {
b = a;
a = this;
}
if (a.min() < b.min()) {
return -1;
}
if (a.min() > b.min()) {
return 1;
}
if (a.max() < b.max()) {
return -1;
}
if (b.max() > a.max()) {
return 1;
}
return 0;
}
}]);
return Range;
}();
if (or.length === 0) {
throw new Error('found range of length 0');
}
if (or.length === 1) {
return or[0];
}
return new Range(or);
};
Range.prototype.coverage = function () {
var tot = 0;
var rl = this.ranges();
for (var ri = 0; ri < rl.length; ri += 1) {
var r = rl[ri];
tot += r.max() - r.min() + 1;
}
return tot;
};
Range.prototype.rangeOrder = function (tmpa, tmpb) {
var a = tmpa;
var b = tmpb;
if (arguments.length < 2) {
b = a;
a = this;
}
if (a.min() < b.min()) {
return -1;
}
if (a.min() > b.min()) {
return 1;
}
if (a.max() < b.max()) {
return -1;
}
if (b.max() > a.max()) {
return 1;
}
return 0;
};
return Range;
}());
exports.default = Range;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yYW5nZS50cyJdLCJuYW1lcyI6WyJSYW5nZSIsImFyZzEiLCJhcmcyIiwicmFuZ2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibWluIiwibWF4IiwiT2JqZWN0IiwiYXNzaWduIiwicG9zIiwicyIsInIiLCJtYXAiLCJqb2luIiwiczEiLCJnZXRSYW5nZXMiLCJjb25jYXQiLCJzb3J0IiwicmFuZ2VPcmRlciIsIm9yYW5nZXMiLCJjdXJyZW50IiwiaSIsIm54dCIsInB1c2giLCJhcmciLCJzMCIsInIwIiwicjEiLCJsMCIsImwxIiwiaTAiLCJpMSIsIm9yIiwibGFwTWluIiwiTWF0aCIsImxhcE1heCIsIkVycm9yIiwidG90IiwicmwiLCJyaSIsInRtcGEiLCJ0bXBiIiwiYSIsImIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOzs7O0lBSXFCQSxLO0FBR25CLGlCQUFtQkMsSUFBbkIsRUFBOEJDLElBQTlCLEVBQTBDO0FBQUE7QUFBQTtBQUN4QyxTQUFLQyxNQUFMLEdBQ0VDLFNBQVMsQ0FBQ0MsTUFBVixLQUFxQixDQUFyQixHQUNJLENBQUM7QUFBRUMsTUFBQUEsR0FBRyxFQUFFTCxJQUFQO0FBQWFNLE1BQUFBLEdBQUcsRUFBRUw7QUFBbEIsS0FBRCxDQURKLEdBRUksS0FBS0QsSUFBTCxHQUNBTyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCUixJQUFsQixDQURBLEdBRUEsQ0FBQ0EsSUFBRCxDQUxOO0FBTUQ7Ozs7MEJBRW9CO0FBQ25CLGFBQU8sS0FBS0UsTUFBTCxDQUFZLENBQVosRUFBZUcsR0FBdEI7QUFDRDs7OzBCQUVvQjtBQUNuQixhQUFPLEtBQUtILE1BQUwsQ0FBWSxLQUFLQSxNQUFMLENBQVlFLE1BQVosR0FBcUIsQ0FBakMsRUFBb0NFLEdBQTNDO0FBQ0Q7Ozs2QkFFZUcsRyxFQUFzQjtBQUNwQyxXQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsS0FBS1Is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LE1BQXpCLEVBQWlDbUMsRUFBRSxJQUFJLENBQXZDLEVBQTBDO0FBQ3hDLFlBQU01QixDQUFDLEdBQUcyQixFQUFFLENBQUNDLEVBQUQsQ0FBWjtBQUNBRixRQUFBQSxHQUFHLElBQUkxQixDQUFDLENBQUNMLEdBQUYsS0FBVUssQ0FBQyxDQUFDTixHQUFGLEVBQVYsR0FBb0IsQ0FBM0I7QUFDRDs7QUFDRCxhQUFPZ0MsR0FBUDtBQUNEOzs7K0JBRWlCRyxJLEVBQWFDLEksRUFBcUI7QUFDbEQsVUFBSUMsQ0FBQyxHQUFHRixJQUFSO0FBQ0EsVUFBSUcsQ0FBQyxHQUFHRixJQUFSOztBQUNBLFVBQUl0QyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEJ1QyxRQUFBQSxDQUFDLEdBQUdELENBQUo7QUFDQUEsUUFBQUEsQ0FBQyxHQUFHLElBQUo7QUFDRDs7QUFFRCxVQUFJQSxDQUFDLENBQUNyQyxHQUFGLEtBQVVzQyxDQUFDLENBQUN0QyxHQUFGLEVBQWQsRUFBdUI7QUFDckIsZUFBTyxDQUFDLENBQVI7QUFDRDs7QUFDRCxVQUFJcUMsQ0FBQyxDQUFDckMsR0FBRixLQUFVc0MsQ0FBQyxDQUFDdEMsR0FBRixFQUFkLEVBQXVCO0FBQ3JCLGVBQU8sQ0FBUDtBQUNEOztBQUNELFVBQUlxQyxDQUFDLENBQUNwQyxHQUFGLEtBQVVxQyxDQUFDLENBQUNyQyxHQUFGLEVBQWQsRUFBdUI7QUFDckIsZUFBTyxDQUFDLENBQVI7QUFDRDs7QUFDRCxVQUFJcUMsQ0FBQyxDQUFDckMsR0FBRixLQUFVb0MsQ0FBQyxDQUFDcEMsR0FBRixFQUFkLEVBQXVCO0FBQ3JCLGVBQU8sQ0FBUDtBQUNEOztBQUNELGFBQU8sQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IHByZWZlci1yZXN0LXBhcmFtczowLCBuby1uZXN0ZWQtdGVybmFyeTowICovXG5cbi8qKlxuICogQWRhcHRlZCBmcm9tIGEgY29tYmluYXRpb24gb2YgUmFuZ2UgYW5kIF9Db21wb3VuZCBpbiB0aGVcbiAqIERhbGxpYW5jZSBHZW5vbWUgRXhwbG9yZXIsIChjKSBUaG9tYXMgRG93biAyMDA2LTIwMTAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhbmdlIHtcbiAgcHVibGljIHJhbmdlczogYW55XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFyZzE6IGFueSwgYXJnMj86IGFueSkge1xuICAgIHRoaXMucmFuZ2VzID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDJcbiAgICAgICAgPyBbeyBtaW46IGFyZzEsIG1heDogYXJnMiB9XVxuICAgICAgICA6IDAgaW4gYXJnMVxuICAgICAgICA/IE9iamVjdC5hc3NpZ24oe30sIGFyZzEpXG4gICAgICAgIDogW2FyZzFdXG4gIH1cblxuICBwdWJsaWMgbWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzWzBdLm1pblxuICB9XG5cbiAgcHVibGljIG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJhbmdlc1t0aGlzLnJhbmdlcy5sZW5ndGggLSAxXS5tYXhcbiAgfVxuXG4gIHB1YmxpYyBjb250YWlucyhwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBzICs9IDEpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLnJhbmdlc1tzXVxuICAgICAgaWYgKHIubWluIDw9IHBvcyAmJiByLm1heCA+PSBwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgaXNDb250aWd1b3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJhbmdlcy5sZW5ndGggPiAxXG4gIH1cblxuICBwdWJsaWMgZ2V0UmFuZ2VzKCk6IFJhbmdlW10ge1xuICAgIHJldHVybiB0aGlzLnJhbmdlcy5tYXAoKHI6IFJhbmdlKSA9PiBuZXcgUmFuZ2Uoci5taW4sIHIubWF4KSlcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJhbmdlcy5tYXAoKHI6IFJhbmdlKSA9PiBgWyR7ci5taW59LSR7ci5tYXh9XWApLmpvaW4oJywnKVxuICB9XG5cbiAgcHVibGljIHVuaW9uKHMxOiBSYW5nZSk6IFJhbmdlIHtcbiAgICBjb25zdCByYW5nZXMgPSB0aGlzLmdldFJhbmdlcygpXG4gICAgICAuY29uY2F0KHMxLmdldFJhbmdlcygpKVxuICAgICAgLnNvcnQodGhpcy5yYW5nZU9yZGVyKVxuICAgIGNvbnN0IG9yYW5nZXMgPSBbXVxuICAgIGxldCBjdXJyZW50ID0gcmFuZ2VzWzBdXG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgbnh0ID0gcmFuZ2VzW2ldXG4gICAgICBpZiAobnh0Lm1pbigpID4gY3VycmVudC5tYXgoKSArIDEpIHtcbiAgICAgICAgb3Jhbmdlcy5wdXNoKGN1cnJlbnQpXG4gICAgICAgIGN1cnJlbnQgPSBueHRcbiAgICAgIH0gZWxzZSBpZiAobnh0Lm1heCgpID4gY3VycmVudC5tYXgoKSkge1xuICAgICAgICBjdXJyZW50ID0gbmV3IFJhbmdlKGN1cnJlbnQubWluKCksIG54dC5tYXgoKSlcbiAgICAgIH1cbiAgICB9XG4gICAgb3Jhbmdlcy5wdXNoKGN1cnJlbnQpXG5cbiAgICBpZiAob3Jhbmdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBvcmFuZ2VzWzBdXG4gICAgfVxuICAgIHJldHVybiBuZXcgUmFuZ2Uob3JhbmdlcylcbiAgfVxuXG4gIHB1YmxpYyBpbnRlcnNlY3Rpb24oYXJnOiBSYW5nZSk6IFJhbmdlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBsZXQgczAgPSB0aGlzXG4gICAgbGV0IHMxID0gYXJnXG4gICAgY29uc3QgcjAgPSB0aGlzLnJhbmdlcygpXG4gICAgY29uc3QgcjEgPSBzMS5yYW5nZXMoKVxuICAgIGNvbnN0IGwwID0gcjAubGVuZ3RoXG5cbiAgICBjb25zdCBsMSA9IHIxLmxlbmd0aFxuICAgIGxldCBpMCA9IDBcblxuICAgIGxldCBpMSA9IDBcbiAgICBjb25zdCBvciA9IFtdXG5cbiAgICB3aGlsZSAoaTAgPCBsMCAmJiBpMSA8IGwxKSB7XG4gICAgICBzMCA9IHIwW2kwXVxuICAgICAgczEgPSByMVtpMV1cbiAgICAgIGNvbnN0IGxhcE1pbiA9IE1hdGgubWF4KHMwLm1pbigpLCBzMS5taW4oKSlcbiAgICAgIGNvbnN0IGxhcE1heCA9IE1hdGgubWluKHMwLm1heCgpLCBzMS5tYXgoKSlcbiAgICAgIGlmIChsYXBNYXggPj0gbGFwTWluKSB7XG4gICAgICAgIG9yLnB1c2gobmV3IFJhbmdlKGxhcE1pbiwgbGFwTWF4KSlcbiAgICAgIH1cbiAgICAgIGlmIChzMC5tYXgoKSA+IHMxLm1heCgpKSB7XG4gICAgICAgIGkxICs9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkwICs9IDFcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3IubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvdW5kIHJhbmdlIG9mIGxlbmd0aCAwJylcbiAgICB9XG4gICAgaWYgKG9yLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG9yWzBdXG4gICAgfVxuICAgIHJldHVybiBuZXcgUmFuZ2Uob3IpXG4gIH1cblxuICBwdWJsaWMgY292ZXJhZ2UoKTogbnVtYmVyIHtcbiAgICBsZXQgdG90ID0gMFxuICAgIGNvbnN0IHJsID0gdGhpcy5yYW5nZXMoKVxuICAgIGZvciAobGV0IHJpID0gMDsgcmkgPCBybC5sZW5ndGg7IHJpICs9IDEpIHtcbiAgICAgIGNvbnN0IHIgPSBybFtyaV1cbiAgICAgIHRvdCArPSByLm1heCgpIC0gci5taW4oKSArIDFcbiAgICB9XG4gICAgcmV0dXJuIHRvdFxuICB9XG5cbiAgcHVibGljIHJhbmdlT3JkZXIodG1wYTogUmFuZ2UsIHRtcGI6IFJhbmdlKTogbnVtYmVyIHtcbiAgICBsZXQgYSA9IHRtcGFcbiAgICBsZXQgYiA9IHRtcGJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGIgPSBhXG4gICAgICBhID0gdGhpc1xuICAgIH1cblxuICAgIGlmIChhLm1pbigpIDwgYi5taW4oKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmIChhLm1pbigpID4gYi5taW4oKSkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgaWYgKGEubWF4KCkgPCBiLm1heCgpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgaWYgKGIubWF4KCkgPiBhLm1heCgpKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICByZXR1cm4gMFxuICB9XG59XG4iXX0=
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.groupBlocks = groupBlocks;
exports.checkAbortSignal = checkAbortSignal;
exports.abortBreakPoint = abortBreakPoint;
exports.AbortError = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(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 __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.abortBreakPoint = exports.checkAbortSignal = exports.groupBlocks = exports.AbortError = void 0;
/* eslint no-bitwise: ["error", { "allow": ["|"] }] */
var AbortError = /*#__PURE__*/function (_Error) {
(0, _inherits2.default)(AbortError, _Error);
var _super = _createSuper(AbortError);
function AbortError(message) {
var _this;
(0, _classCallCheck2.default)(this, AbortError);
_this = _super.call(this, message);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "code", void 0);
_this.code = 'ERR_ABORTED';
return _this;
}
return AbortError;
}( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error)); // sort blocks by file offset and
var AbortError = /** @class */ (function (_super) {
__extends(AbortError, _super);
function AbortError(message) {
var _this = _super.call(this, message) || this;
_this.code = 'ERR_ABORTED';
return _this;
}
return AbortError;
}(Error));
exports.AbortError = AbortError;
// sort blocks by file offset and
// group blocks that are within 2KB of eachother
exports.AbortError = AbortError;
function groupBlocks(blocks) {
blocks.sort(function (b0, b1) {
return (b0.offset | 0) - (b1.offset | 0);
});
var blockGroups = [];
var lastBlock;
var lastBlockEnd;
for (var i = 0; i < blocks.length; i += 1) {
if (lastBlock && blocks[i].offset - lastBlockEnd <= 2000) {
lastBlock.length += blocks[i].length - lastBlockEnd + blocks[i].offset;
lastBlock.blocks.push(blocks[i]);
} else {
blockGroups.push(lastBlock = {
blocks: [blocks[i]],
length: blocks[i].length,
offset: blocks[i].offset
});
blocks.sort(function (b0, b1) { return (b0.offset | 0) - (b1.offset | 0); });
var blockGroups = [];
var lastBlock;
var lastBlockEnd;
for (var i = 0; i < blocks.length; i += 1) {
if (lastBlock && blocks[i].offset - lastBlockEnd <= 2000) {
lastBlock.length += blocks[i].length - lastBlockEnd + blocks[i].offset;
lastBlock.blocks.push(blocks[i]);
}
else {
blockGroups.push((lastBlock = {
blocks: [blocks[i]],
length: blocks[i].length,
offset: blocks[i].offset,
}));
}
lastBlockEnd = lastBlock.offset + lastBlock.length;
}
lastBlockEnd = lastBlock.offset + lastBlock.length;
}
return blockGroups;
return blockGroups;
}
exports.groupBlocks = groupBlocks;
/**

@@ -94,18 +101,19 @@ * 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 AbortError('aborted');
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 AbortError('aborted');
e.code = 'ERR_ABORTED';
throw e;
}
}
}
exports.checkAbortSignal = checkAbortSignal;
/**

@@ -117,29 +125,15 @@ * 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.resolve();
case 2:
checkAbortSignal(signal);
case 3:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _abortBreakPoint.apply(this, arguments);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbIkFib3J0RXJyb3IiLCJtZXNzYWdlIiwiY29kZSIsIkVycm9yIiwiZ3JvdXBCbG9ja3MiLCJibG9ja3MiLCJzb3J0IiwiYjAiLCJiMSIsIm9mZnNldCIsImJsb2NrR3JvdXBzIiwibGFzdEJsb2NrIiwibGFzdEJsb2NrRW5kIiwiaSIsImxlbmd0aCIsInB1c2giLCJjaGVja0Fib3J0U2lnbmFsIiwic2lnbmFsIiwiYWJvcnRlZCIsIkRPTUV4Y2VwdGlvbiIsImUiLCJhYm9ydEJyZWFrUG9pbnQiLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0lBQ2FBLFU7Ozs7O0FBR1gsc0JBQW1CQyxPQUFuQixFQUFvQztBQUFBOztBQUFBO0FBQ2xDLDhCQUFNQSxPQUFOO0FBRGtDO0FBRWxDLFVBQUtDLElBQUwsR0FBWSxhQUFaO0FBRmtDO0FBR25DOzs7K0NBTjZCQyxLLElBUWhDO0FBQ0E7Ozs7O0FBQ08sU0FBU0MsV0FBVCxDQUFxQkMsTUFBckIsRUFBMkM7QUFDaERBLEVBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLFVBQUNDLEVBQUQsRUFBS0MsRUFBTDtBQUFBLFdBQVksQ0FBQ0QsRUFBRSxDQUFDRSxNQUFILEdBQVksQ0FBYixLQUFtQkQsRUFBRSxDQUFDQyxNQUFILEdBQVksQ0FBL0IsQ0FBWjtBQUFBLEdBQVo7QUFFQSxNQUFNQyxXQUFXLEdBQUcsRUFBcEI7QUFDQSxNQUFJQyxTQUFKO0FBQ0EsTUFBSUMsWUFBSjs7QUFDQSxPQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdSLE1BQU0sQ0FBQ1MsTUFBM0IsRUFBbUNELENBQUMsSUFBSSxDQUF4QyxFQUEyQztBQUN6QyxRQUFJRixTQUFTLElBQUlOLE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVKLE1BQVYsR0FBbUJHLFlBQW5CLElBQW1DLElBQXBELEVBQTBEO0FBQ3hERCxNQUFBQSxTQUFTLENBQUNHLE1BQVYsSUFBb0JULE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVDLE1BQVYsR0FBbUJGLFlBQW5CLEdBQWtDUCxNQUFNLENBQUNRLENBQUQsQ0FBTixDQUFVSixNQUFoRTtBQUNBRSxNQUFBQSxTQUFTLENBQUNOLE1BQVYsQ0FBaUJVLElBQWpCLENBQXNCVixNQUFNLENBQUNRLENBQUQsQ0FBNUI7QUFDRCxLQUhELE1BR087QUFDTEgsTUFBQUEsV0FBVyxDQUFDSyxJQUFaLENBQ0dKLFNBQVMsR0FBRztBQUNYTixRQUFBQSxNQUFNLEVBQUUsQ0FBQ0EsTUFBTSxDQUFDUSxDQUFELENBQVAsQ0FERztBQUVYQyxRQUFBQSxNQUFNLEVBQUVULE1BQU0sQ0FBQ1EsQ0FBRCxDQUFOLENBQVVDLE1BRlA7QUFHWEwsUUFBQUEsTUFBTSxFQUFFSixNQUFNLENBQUNRLENBQUQsQ0FBTixDQUFVSjtBQUhQLE9BRGY7QUFPRDs7QUFDREcsSUFBQUEsWUFBWSxHQUFHRCxTQUFTLENBQUNGLE1BQVYsR0FBbUJFLFNBQVMsQ0FBQ0csTUFBNUM7QUFDRDs7QUFFRCxTQUFPSixXQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OztBQVdPLFNBQVNNLGdCQUFULENBQTBCQyxNQUExQixFQUFzRDtBQUMzRCxNQUFJLENBQUNBLE1BQUwsRUFBYTs7QUFFYixNQUFJQSxNQUFNLENBQUNDLE9BQVgsRUFBb0I7QUFDbEI7QUFDQSxRQUFJLE9BQU9DLFlBQVAsS0FBd0IsV0FBNUIsRUFBeUM7QUFDdkMsWUFBTSxJQUFJQSxZQUFKLENBQWlCLFNBQWpCLEVBQTRCLFlBQTVCLENBQU47QUFDRCxLQUZELE1BRU87QUFDTCxVQUFNQyxDQUFDLEdBQUcsSUFBSXBCLFVBQUosQ0FBZSxTQUFmLENBQVY7QUFDQW9CLE1BQUFBLENBQUMsQ0FBQ2xCLElBQUYsR0FBUyxhQUFUO0FBQ0EsWUFBTWtCLENBQU47QUFDRDtBQUNGO0FBQ0Y7QUFFRDs7Ozs7Ozs7U0FNc0JDLGU7Ozs7OzZGQUFmLGlCQUErQkosTUFBL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQ0NLLE9BQU8sQ0FBQ0MsT0FBUixFQUREOztBQUFBO0FBRUxQLFlBQUFBLGdCQUFnQixDQUFDQyxNQUFELENBQWhCOztBQUZLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEciLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcInxcIl0gfV0gKi9cbmV4cG9ydCBjbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgY29kZTogc3RyaW5nXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5jb2RlID0gJ0VSUl9BQk9SVEVEJ1xuICB9XG59XG4vLyBzb3J0IGJsb2NrcyBieSBmaWxlIG9mZnNldCBhbmRcbi8vIGdyb3VwIGJsb2NrcyB0aGF0IGFyZSB3aXRoaW4gMktCIG9mIGVhY2hvdGhlclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQmxvY2tzKGJsb2NrczogYW55W10pOiBhbnlbXSB7XG4gIGJsb2Nrcy5zb3J0KChiMCwgYjEpID0+IChiMC5vZmZzZXQgfCAwKSAtIChiMS5vZmZzZXQgfCAwKSlcblxuICBjb25zdCBibG9ja0dyb3VwcyA9IFtdXG4gIGxldCBsYXN0QmxvY2tcbiAgbGV0IGxhc3RCbG9ja0VuZFxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChsYXN0QmxvY2sgJiYgYmxvY2tzW2ldLm9mZnNldCAtIGxhc3RCbG9ja0VuZCA8PSAyMDAwKSB7XG4gICAgICBsYXN0QmxvY2subGVuZ3RoICs9IGJsb2Nrc1tpXS5sZW5ndGggLSBsYXN0QmxvY2tFbmQgKyBibG9ja3NbaV0ub2Zmc2V0XG4gICAgICBsYXN0QmxvY2suYmxvY2tzLnB1c2goYmxvY2tzW2ldKVxuICAgIH0gZWxzZSB7XG4gICAgICBibG9ja0dyb3Vwcy5wdXNoKFxuICAgICAgICAobGFzdEJsb2NrID0ge1xuICAgICAgICAgIGJsb2NrczogW2Jsb2Nrc1tpXV0sXG4gICAgICAgICAgbGVuZ3RoOiBibG9ja3NbaV0ubGVuZ3RoLFxuICAgICAgICAgIG9mZnNldDogYmxvY2tzW2ldLm9mZnNldCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuICAgIGxhc3RCbG9ja0VuZCA9IGxhc3RCbG9jay5vZmZzZXQgKyBsYXN0QmxvY2subGVuZ3RoXG4gIH1cblxuICByZXR1cm4gYmxvY2tHcm91cHNcbn1cblxuLyoqXG4gKiBQcm9wZXJseSBjaGVjayBpZiB0aGUgZ2l2ZW4gQWJvcnRTaWduYWwgaXMgYWJvcnRlZC5cbiAqIFBlciB0aGUgc3RhbmRhcmQsIGlmIHRoZSBzaWduYWwgcmVhZHMgYXMgYWJvcnRlZCxcbiAqIHRoaXMgZnVuY3Rpb24gdGhyb3dzIGVpdGhlciBhIERPTUV4Y2VwdGlvbiBBYm9ydEVycm9yLCBvciBhIHJlZ3VsYXIgZXJyb3JcbiAqIHdpdGggYSBgY29kZWAgYXR0cmlidXRlIHNldCB0byBgRVJSX0FCT1JURURgLlxuICpcbiAqIEZvciBjb252ZW5pZW5jZSwgcGFzc2luZyBgdW5kZWZpbmVkYCBpcyBhIG5vLW9wXG4gKlxuICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gW3NpZ25hbF0gYW4gQWJvcnRTaWduYWwsIG9yIGFueXRoaW5nIHdpdGggYW4gYGFib3J0ZWRgIGF0dHJpYnV0ZVxuICogQHJldHVybnMgbm90aGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBYm9ydFNpZ25hbChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuXG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2JhbSBhYm9ydGVkIScpXG4gICAgaWYgKHR5cGVvZiBET01FeGNlcHRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlID0gbmV3IEFib3J0RXJyb3IoJ2Fib3J0ZWQnKVxuICAgICAgZS5jb2RlID0gJ0VSUl9BQk9SVEVEJ1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNraXBzIHRvIHRoZSBuZXh0IHRpY2ssIHRoZW4gcnVucyBgY2hlY2tBYm9ydFNpZ25hbGAuXG4gKiBBd2FpdCB0aGlzIHRvIGluc2lkZSBhbiBvdGhlcndpc2Ugc3luY2hyb25vdXMgbG9vcCB0b1xuICogcHJvdmlkZSBhIHBsYWNlIHRvIGJyZWFrIHdoZW4gYW4gYWJvcnQgc2lnbmFsIGlzIHJlY2VpdmVkLlxuICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gc2lnbmFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhYm9ydEJyZWFrUG9pbnQoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcbiAgY2hlY2tBYm9ydFNpZ25hbChzaWduYWwpXG59XG4iXX0=
exports.abortBreakPoint = abortBreakPoint;
{
"name": "@gmod/bbi",
"version": "1.0.30",
"version": "1.0.31",
"description": "Parser for BigWig/BigBed 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,5 @@ "scripts": {

"lint": "eslint --report-unused-disable-directives --max-warnings 0 --ext .js,.ts src",
"clean": "rimraf dist",
"clean": "rimraf dist esm",
"prebuild": "npm run clean",
"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",
"build": "tsc --target es2018 --outDir esm && tsc --target es5 --outDir dist",
"preversion": "npm run lint && npm test && npm run build",

@@ -44,5 +44,4 @@ "version": "standard-changelog && git add CHANGELOG.md",

"dependencies": {
"@babel/runtime": "^7.4.4",
"@gmod/binary-parser": "^1.3.5",
"abortable-promise-cache": "^1.0.1",
"@gmod/binary-parser": "^1.4.0",
"abortable-promise-cache": "^1.4.1",
"buffer-crc32": "^0.2.13",

@@ -55,10 +54,4 @@ "es6-promisify": "^6.0.1",

"devDependencies": {
"@babel/cli": "^7.4.4",
"@babel/core": "^7.4.4",
"@babel/plugin-proposal-class-properties": "^7.4.4",
"@babel/plugin-transform-runtime": "^7.4.4",
"@babel/preset-env": "^7.4.4",
"@babel/preset-typescript": "^7.3.3",
"@gmod/bed": "^2.0.0",
"@types/jest": "^24.0.13",
"@types/jest": "^27.0.3",
"@types/long": "^4.0.0",

@@ -68,16 +61,13 @@ "@types/node": "^12.0.2",

"@typescript-eslint/parser": "^2.0.0",
"babel-eslint": "^10.0.1",
"babel-preset-typescript": "^7.0.0-alpha.19",
"cross-fetch": "^3.0.2",
"eslint": "^5.16.0",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-config-prettier": "^4.2.0",
"eslint-plugin-import": "^2.17.2",
"eslint-plugin-jest": "^22.5.1",
"eslint-plugin-prettier": "^3.1.0",
"jest": "^24.8.0",
"prettier": "^1.17.1",
"eslint": "^7.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^27.4.3",
"prettier": "^2.5.1",
"rimraf": "^2.6.3",
"standard-changelog": "^2.0.11",
"typescript": "^3.4.5"
"ts-jest": "^27.0.7",
"typescript": "^4.5.2"
},

@@ -84,0 +74,0 @@ "publishConfig": {

# bbi-js
[![NPM version](https://img.shields.io/npm/v/@gmod/bbi.svg?style=flat-square)](https://npmjs.org/package/@gmod/bbi)
[![Build Status](https://img.shields.io/travis/GMOD/bbi-js/master.svg?style=flat-square)](https://travis-ci.org/GMOD/bbi-js) [![Coverage Status](https://img.shields.io/codecov/c/github/GMOD/bbi-js/master.svg?style=flat-square)](https://codecov.io/gh/GMOD/bbi-js/branch/master)
[![Coverage Status](https://img.shields.io/codecov/c/github/GMOD/bbi-js/master.svg?style=flat-square)](https://codecov.io/gh/GMOD/bbi-js/branch/master)
[![Build Status](https://img.shields.io/github/workflow/status/GMOD/bbi-js/Push/master?logo=github&style=flat-query)](https://github.com/GMOD/bbi-js/actions?query=branch%3Amaster+workflow%3APush+)
A parser for bigwig and bigbed file formats

@@ -22,3 +22,2 @@

If using remotely, you can use it in combination with generic-filehandle or your own implementation of something like generic-filehandle

@@ -47,4 +46,2 @@ https://github.com/GMOD/generic-filehandle/

## Documentation

@@ -56,7 +53,6 @@

* path - path to a local file
* url - path to a url
* filehandle - a filehandle instance that you can implement as a custom class yourself. path and url are based on https://www.npmjs.com/package/generic-filehandle but by implementing a class containing the Filehandle interface specified therein, you can pass it to this module
- path - path to a local file
- url - path to a url
- filehandle - a filehandle instance that you can implement as a custom class yourself. path and url are based on https://www.npmjs.com/package/generic-filehandle but by implementing a class containing the Filehandle interface specified therein, you can pass it to this module
### BigWig

@@ -66,10 +62,9 @@

* refName - a name of a chromosome in the file
* start - a 0-based half open start coordinate
* end - a 0-based half open end coordinate
* opts.scale - indicates zoom level to use, specified as pxPerBp, e.g. being zoomed out, you might have 100bp per pixel so opts.scale would be 1/100. the zoom level that is returned is the one which has reductionLevel<=2/opts.scale (reductionLevel is a property of the zoom level structure in the bigwig file data)
* opts.basesPerScale - optional, inverse of opts.scale e.g. bpPerPx
* opts.signal - optional, an AbortSignal to halt processing
- refName - a name of a chromosome in the file
- start - a 0-based half open start coordinate
- end - a 0-based half open end coordinate
- opts.scale - indicates zoom level to use, specified as pxPerBp, e.g. being zoomed out, you might have 100bp per pixel so opts.scale would be 1/100. the zoom level that is returned is the one which has reductionLevel<=2/opts.scale (reductionLevel is a property of the zoom level structure in the bigwig file data)
- opts.basesPerScale - optional, inverse of opts.scale e.g. bpPerPx
- opts.signal - optional, an AbortSignal to halt processing
Returns a promise to an array of features. If an incorrect refName or no features are found the result is an empty array.

@@ -85,6 +80,5 @@

### Understanding scale and reductionLevel
Here is what the reductionLevel structure looks like in a file. The zoomLevel that is chosen is the first reductionLevel<2*opts.basesPerScale (or reductionLevel<2/opts.scale) when scanning backwards through this list
Here is what the reductionLevel structure looks like in a file. The zoomLevel that is chosen is the first reductionLevel<2\*opts.basesPerScale (or reductionLevel<2/opts.scale) when scanning backwards through this list

@@ -99,3 +93,2 @@ [ { reductionLevel: 40, ... },

#### getFeatureStream(refName, start, end, opts)

@@ -118,6 +111,6 @@

* refName - a name of a chromosome in the file
* start - a 0-based half open start coordinate
* end - a 0-based half open end coordinate
* opts.signal - optional, an AbortSignal to halt processing
- refName - a name of a chromosome in the file
- start - a 0-based half open start coordinate
- end - a 0-based half open end coordinate
- opts.signal - optional, an AbortSignal to halt processing

@@ -143,5 +136,4 @@ returns a promise to an array of features. no concept of zoom levels is used with bigwig data

The BigBed line contents are returned as a raw text line e.g. {start: 0, end:100, rest: "ENST00000456328.2\t1000\t..."} where "rest" contains tab delimited text for the fields from 4 and on in the BED format. Since BED files from BigBed format often come with autoSql (a description of all the columns) it can be useful to parse it with BED parser that can handle autoSql. The rest line can be parsed by the @gmod/bed module, which is not by default integrated with this module, but can be combined with it as follows
The BigBed line contents are returned as a raw text line e.g. {start: 0, end:100, rest: "ENST00000456328.2\t1000\t..."} where "rest" contains tab delimited text for the fields from 4 and on in the BED format. Since BED files from BigBed format often come with autoSql (a description of all the columns) it can be useful to parse it with BED parser that can handle autoSql. The rest line can be parsed by the @gmod/bed module, which is not by default integrated with this module, but can be combined with it as follows
```js

@@ -192,3 +184,2 @@ import {BigBed} from '@gmod/bbi'

## Academic Use

@@ -201,2 +192,1 @@

MIT © [Colin Diesh](https://github.com/cmdcolin)
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