@jbrowse/plugin-gff3 1.7.11 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/Gff3Adapter/Gff3Adapter.js +284 -390
  2. package/dist/Gff3Adapter/Gff3Adapter.js.map +1 -0
  3. package/dist/Gff3Adapter/configSchema.js +9 -21
  4. package/dist/Gff3Adapter/configSchema.js.map +1 -0
  5. package/dist/Gff3Adapter/index.js +8 -14
  6. package/dist/Gff3Adapter/index.js.map +1 -0
  7. package/dist/Gff3TabixAdapter/Gff3TabixAdapter.js +305 -386
  8. package/dist/Gff3TabixAdapter/Gff3TabixAdapter.js.map +1 -0
  9. package/dist/Gff3TabixAdapter/configSchema.js +27 -40
  10. package/dist/Gff3TabixAdapter/configSchema.js.map +1 -0
  11. package/dist/Gff3TabixAdapter/index.js +8 -14
  12. package/dist/Gff3TabixAdapter/index.js.map +1 -0
  13. package/dist/index.js +109 -130
  14. package/dist/index.js.map +1 -0
  15. package/esm/Gff3Adapter/Gff3Adapter.d.ts +17 -0
  16. package/esm/Gff3Adapter/Gff3Adapter.js +146 -0
  17. package/esm/Gff3Adapter/Gff3Adapter.js.map +1 -0
  18. package/esm/Gff3Adapter/configSchema.d.ts +2 -0
  19. package/esm/Gff3Adapter/configSchema.js +8 -0
  20. package/esm/Gff3Adapter/configSchema.js.map +1 -0
  21. package/esm/Gff3Adapter/index.d.ts +1 -0
  22. package/esm/Gff3Adapter/index.js +2 -0
  23. package/esm/Gff3Adapter/index.js.map +1 -0
  24. package/esm/Gff3TabixAdapter/Gff3TabixAdapter.d.ts +20 -0
  25. package/esm/Gff3TabixAdapter/Gff3TabixAdapter.js +186 -0
  26. package/esm/Gff3TabixAdapter/Gff3TabixAdapter.js.map +1 -0
  27. package/esm/Gff3TabixAdapter/configSchema.d.ts +2 -0
  28. package/esm/Gff3TabixAdapter/configSchema.js +27 -0
  29. package/esm/Gff3TabixAdapter/configSchema.js.map +1 -0
  30. package/esm/Gff3TabixAdapter/index.d.ts +1 -0
  31. package/esm/Gff3TabixAdapter/index.js +2 -0
  32. package/esm/Gff3TabixAdapter/index.js.map +1 -0
  33. package/esm/index.d.ts +6 -0
  34. package/esm/index.js +62 -0
  35. package/esm/index.js.map +1 -0
  36. package/package.json +17 -9
  37. package/dist/Gff3Adapter/Gff3Adapter.test.js +0 -71
  38. package/dist/Gff3TabixAdapter/Gff3TabixAdapter.test.js +0 -74
@@ -1,401 +1,295 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
-
16
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
21
-
22
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
-
26
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
-
28
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
29
-
30
- var _BaseAdapter = require("@jbrowse/core/data_adapters/BaseAdapter");
31
-
32
- var _io = require("@jbrowse/core/util/io");
33
-
34
- var _rxjs = require("@jbrowse/core/util/rxjs");
35
-
36
- var _intervalTree = _interopRequireDefault(require("@flatten-js/interval-tree"));
37
-
38
- var _simpleFeature = _interopRequireDefault(require("@jbrowse/core/util/simpleFeature"));
39
-
40
- var _bgzfFilehandle = require("@gmod/bgzf-filehandle");
41
-
42
- var _gff = _interopRequireDefault(require("@gmod/gff"));
43
-
44
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
-
46
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
-
48
- 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); }; }
49
-
50
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
-
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (_) try {
44
+ 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;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __read = (this && this.__read) || function (o, n) {
65
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
66
+ if (!m) return o;
67
+ var i = m.call(o), r, ar = [], e;
68
+ try {
69
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
70
+ }
71
+ catch (error) { e = { error: error }; }
72
+ finally {
73
+ try {
74
+ if (r && !r.done && (m = i["return"])) m.call(i);
75
+ }
76
+ finally { if (e) throw e.error; }
77
+ }
78
+ return ar;
79
+ };
80
+ var __importDefault = (this && this.__importDefault) || function (mod) {
81
+ return (mod && mod.__esModule) ? mod : { "default": mod };
82
+ };
83
+ Object.defineProperty(exports, "__esModule", { value: true });
84
+ var BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
85
+ var io_1 = require("@jbrowse/core/util/io");
86
+ var rxjs_1 = require("@jbrowse/core/util/rxjs");
87
+ var interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
88
+ var simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeature"));
89
+ var bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
90
+ var gff_1 = __importDefault(require("@gmod/gff"));
52
91
  function isGzip(buf) {
53
- return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
92
+ return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
54
93
  }
55
-
56
- var _default = /*#__PURE__*/function (_BaseFeatureDataAdapt) {
57
- (0, _inherits2.default)(_default, _BaseFeatureDataAdapt);
58
-
59
- var _super = _createSuper(_default);
60
-
61
- function _default() {
62
- var _this;
63
-
64
- (0, _classCallCheck2.default)(this, _default);
65
-
66
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
67
- args[_key] = arguments[_key];
94
+ var default_1 = /** @class */ (function (_super) {
95
+ __extends(default_1, _super);
96
+ function default_1() {
97
+ return _super !== null && _super.apply(this, arguments) || this;
68
98
  }
69
-
70
- _this = _super.call.apply(_super, [this].concat(args));
71
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "gffFeatures", void 0);
72
- return _this;
73
- }
74
-
75
- (0, _createClass2.default)(_default, [{
76
- key: "loadDataP",
77
- value: function () {
78
- var _loadDataP = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
79
- var _this2 = this;
80
-
81
- var pm, buf, buffer, data, lines, headerLines, i, header, feats, intervalTree;
82
- return _regenerator.default.wrap(function _callee$(_context) {
83
- while (1) {
84
- switch (_context.prev = _context.next) {
85
- case 0:
86
- pm = this.pluginManager;
87
- _context.next = 3;
88
- return (0, _io.openLocation)(this.getConf('gffLocation'), pm).readFile();
89
-
90
- case 3:
91
- buf = _context.sent;
92
-
93
- if (!isGzip(buf)) {
94
- _context.next = 10;
95
- break;
99
+ default_1.prototype.loadDataP = function () {
100
+ return __awaiter(this, void 0, void 0, function () {
101
+ var pm, buf, buffer, _a, data, lines, headerLines, i, header, feats, intervalTree;
102
+ var _this = this;
103
+ return __generator(this, function (_b) {
104
+ switch (_b.label) {
105
+ case 0:
106
+ pm = this.pluginManager;
107
+ return [4 /*yield*/, (0, io_1.openLocation)(this.getConf('gffLocation'), pm).readFile()];
108
+ case 1:
109
+ buf = _b.sent();
110
+ if (!isGzip(buf)) return [3 /*break*/, 3];
111
+ return [4 /*yield*/, (0, bgzf_filehandle_1.unzip)(buf)];
112
+ case 2:
113
+ _a = _b.sent();
114
+ return [3 /*break*/, 4];
115
+ case 3:
116
+ _a = buf;
117
+ _b.label = 4;
118
+ case 4:
119
+ buffer = _a;
120
+ // 512MB max chrome string length is 512MB
121
+ if (buffer.length > 536870888) {
122
+ throw new Error('Data exceeds maximum string length (512MB)');
123
+ }
124
+ data = new TextDecoder('utf8', { fatal: true }).decode(buffer);
125
+ lines = data.split('\n');
126
+ headerLines = [];
127
+ for (i = 0; i < lines.length && lines[i].startsWith('#'); i++) {
128
+ headerLines.push(lines[i]);
129
+ }
130
+ header = headerLines.join('\n');
131
+ feats = gff_1.default.parseStringSync(data, {
132
+ parseFeatures: true,
133
+ parseComments: false,
134
+ parseDirectives: false,
135
+ parseSequences: false,
136
+ });
137
+ intervalTree = feats
138
+ .flat()
139
+ .map(function (f, i) {
140
+ return new simpleFeature_1.default({
141
+ data: _this.featureData(f),
142
+ id: "".concat(_this.id, "-offset-").concat(i),
143
+ });
144
+ })
145
+ .reduce(function (acc, obj) {
146
+ var key = obj.get('refName');
147
+ if (!acc[key]) {
148
+ acc[key] = new interval_tree_1.default();
149
+ }
150
+ acc[key].insert([obj.get('start'), obj.get('end')], obj);
151
+ return acc;
152
+ }, {});
153
+ return [2 /*return*/, { header: header, intervalTree: intervalTree }];
96
154
  }
97
-
98
- _context.next = 7;
99
- return (0, _bgzfFilehandle.unzip)(buf);
100
-
101
- case 7:
102
- _context.t0 = _context.sent;
103
- _context.next = 11;
104
- break;
105
-
106
- case 10:
107
- _context.t0 = buf;
108
-
109
- case 11:
110
- buffer = _context.t0;
111
-
112
- if (!(buffer.length > 536870888)) {
113
- _context.next = 14;
114
- break;
155
+ });
156
+ });
157
+ };
158
+ default_1.prototype.loadData = function () {
159
+ return __awaiter(this, void 0, void 0, function () {
160
+ var _this = this;
161
+ return __generator(this, function (_a) {
162
+ if (!this.gffFeatures) {
163
+ this.gffFeatures = this.loadDataP().catch(function (e) {
164
+ _this.gffFeatures = undefined;
165
+ throw e;
166
+ });
115
167
  }
116
-
117
- throw new Error('Data exceeds maximum string length (512MB)');
118
-
119
- case 14:
120
- data = new TextDecoder('utf8', {
121
- fatal: true
122
- }).decode(buffer);
123
- lines = data.split('\n');
124
- headerLines = [];
125
-
126
- for (i = 0; i < lines.length && lines[i].startsWith('#'); i++) {
127
- headerLines.push(lines[i]);
168
+ return [2 /*return*/, this.gffFeatures];
169
+ });
170
+ });
171
+ };
172
+ default_1.prototype.getRefNames = function (opts) {
173
+ if (opts === void 0) { opts = {}; }
174
+ return __awaiter(this, void 0, void 0, function () {
175
+ var intervalTree;
176
+ return __generator(this, function (_a) {
177
+ switch (_a.label) {
178
+ case 0: return [4 /*yield*/, this.loadData()];
179
+ case 1:
180
+ intervalTree = (_a.sent()).intervalTree;
181
+ return [2 /*return*/, Object.keys(intervalTree)];
128
182
  }
129
-
130
- header = headerLines.join('\n');
131
- feats = _gff.default.parseStringSync(data, {
132
- parseFeatures: true,
133
- parseComments: false,
134
- parseDirectives: false,
135
- parseSequences: false
136
- });
137
- intervalTree = feats.flat().map(function (f, i) {
138
- return new _simpleFeature.default({
139
- data: _this2.featureData(f),
140
- id: "".concat(_this2.id, "-offset-").concat(i)
141
- });
142
- }).reduce(function (acc, obj) {
143
- var key = obj.get('refName');
144
-
145
- if (!acc[key]) {
146
- acc[key] = new _intervalTree.default();
147
- }
148
-
149
- acc[key].insert([obj.get('start'), obj.get('end')], obj);
150
- return acc;
151
- }, {});
152
- return _context.abrupt("return", {
153
- header: header,
154
- intervalTree: intervalTree
155
- });
156
-
157
- case 22:
158
- case "end":
159
- return _context.stop();
160
- }
161
- }
162
- }, _callee, this);
163
- }));
164
-
165
- function loadDataP() {
166
- return _loadDataP.apply(this, arguments);
167
- }
168
-
169
- return loadDataP;
170
- }()
171
- }, {
172
- key: "loadData",
173
- value: function () {
174
- var _loadData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
175
- var _this3 = this;
176
-
177
- return _regenerator.default.wrap(function _callee2$(_context2) {
178
- while (1) {
179
- switch (_context2.prev = _context2.next) {
180
- case 0:
181
- if (!this.gffFeatures) {
182
- this.gffFeatures = this.loadDataP().catch(function (e) {
183
- _this3.gffFeatures = undefined;
184
- throw e;
185
- });
183
+ });
184
+ });
185
+ };
186
+ default_1.prototype.getHeader = function () {
187
+ return __awaiter(this, void 0, void 0, function () {
188
+ var header;
189
+ return __generator(this, function (_a) {
190
+ switch (_a.label) {
191
+ case 0: return [4 /*yield*/, this.loadData()];
192
+ case 1:
193
+ header = (_a.sent()).header;
194
+ return [2 /*return*/, header];
186
195
  }
187
-
188
- return _context2.abrupt("return", this.gffFeatures);
189
-
190
- case 2:
191
- case "end":
192
- return _context2.stop();
193
- }
194
- }
195
- }, _callee2, this);
196
- }));
197
-
198
- function loadData() {
199
- return _loadData.apply(this, arguments);
200
- }
201
-
202
- return loadData;
203
- }()
204
- }, {
205
- key: "getRefNames",
206
- value: function () {
207
- var _getRefNames = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
208
- var opts,
209
- _yield$this$loadData,
210
- intervalTree,
211
- _args3 = arguments;
212
-
213
- return _regenerator.default.wrap(function _callee3$(_context3) {
214
- while (1) {
215
- switch (_context3.prev = _context3.next) {
216
- case 0:
217
- opts = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {};
218
- _context3.next = 3;
219
- return this.loadData();
220
-
221
- case 3:
222
- _yield$this$loadData = _context3.sent;
223
- intervalTree = _yield$this$loadData.intervalTree;
224
- return _context3.abrupt("return", Object.keys(intervalTree));
225
-
226
- case 6:
227
- case "end":
228
- return _context3.stop();
229
- }
230
- }
231
- }, _callee3, this);
232
- }));
233
-
234
- function getRefNames() {
235
- return _getRefNames.apply(this, arguments);
236
- }
237
-
238
- return getRefNames;
239
- }()
240
- }, {
241
- key: "getHeader",
242
- value: function () {
243
- var _getHeader = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
244
- var _yield$this$loadData2, header;
245
-
246
- return _regenerator.default.wrap(function _callee4$(_context4) {
247
- while (1) {
248
- switch (_context4.prev = _context4.next) {
249
- case 0:
250
- _context4.next = 2;
251
- return this.loadData();
252
-
253
- case 2:
254
- _yield$this$loadData2 = _context4.sent;
255
- header = _yield$this$loadData2.header;
256
- return _context4.abrupt("return", header);
257
-
258
- case 5:
259
- case "end":
260
- return _context4.stop();
196
+ });
197
+ });
198
+ };
199
+ default_1.prototype.getFeatures = function (query, opts) {
200
+ var _this = this;
201
+ if (opts === void 0) { opts = {}; }
202
+ return (0, rxjs_1.ObservableCreate)(function (observer) { return __awaiter(_this, void 0, void 0, function () {
203
+ var start, end, refName, intervalTree, e_1;
204
+ var _a;
205
+ return __generator(this, function (_b) {
206
+ switch (_b.label) {
207
+ case 0:
208
+ _b.trys.push([0, 2, , 3]);
209
+ start = query.start, end = query.end, refName = query.refName;
210
+ return [4 /*yield*/, this.loadData()];
211
+ case 1:
212
+ intervalTree = (_b.sent()).intervalTree;
213
+ (_a = intervalTree[refName]) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(function (f) { return observer.next(f); });
214
+ observer.complete();
215
+ return [3 /*break*/, 3];
216
+ case 2:
217
+ e_1 = _b.sent();
218
+ observer.error(e_1);
219
+ return [3 /*break*/, 3];
220
+ case 3: return [2 /*return*/];
221
+ }
222
+ });
223
+ }); }, opts.signal);
224
+ };
225
+ default_1.prototype.featureData = function (data) {
226
+ var _this = this;
227
+ var f = __assign({}, data);
228
+ f.start -= 1; // convert to interbase
229
+ if (data.strand === '+') {
230
+ f.strand = 1;
231
+ }
232
+ else if (data.strand === '-') {
233
+ f.strand = -1;
234
+ }
235
+ else if (data.strand === '.') {
236
+ f.strand = 0;
237
+ }
238
+ else {
239
+ f.strand = undefined;
240
+ }
241
+ f.phase = Number(data.phase);
242
+ f.refName = data.seq_id;
243
+ if (data.score === null) {
244
+ delete f.score;
245
+ }
246
+ if (data.phase === null) {
247
+ delete f.score;
248
+ }
249
+ var defaultFields = [
250
+ 'start',
251
+ 'end',
252
+ 'seq_id',
253
+ 'score',
254
+ 'type',
255
+ 'source',
256
+ 'phase',
257
+ 'strand',
258
+ ];
259
+ var dataAttributes = data.attributes || {};
260
+ Object.keys(dataAttributes).forEach(function (a) {
261
+ var _a, _b;
262
+ var b = a.toLowerCase();
263
+ if (defaultFields.includes(b)) {
264
+ // add "suffix" to tag name if it already exists
265
+ // reproduces behavior of NCList
266
+ b += '2';
261
267
  }
262
- }
263
- }, _callee4, this);
264
- }));
265
-
266
- function getHeader() {
267
- return _getHeader.apply(this, arguments);
268
- }
269
-
270
- return getHeader;
271
- }()
272
- }, {
273
- key: "getFeatures",
274
- value: function getFeatures(query) {
275
- var _this4 = this;
276
-
277
- var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
278
- return (0, _rxjs.ObservableCreate)( /*#__PURE__*/function () {
279
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(observer) {
280
- var _intervalTree$refName, start, end, refName, _yield$_this4$loadDat, intervalTree;
281
-
282
- return _regenerator.default.wrap(function _callee5$(_context5) {
283
- while (1) {
284
- switch (_context5.prev = _context5.next) {
285
- case 0:
286
- _context5.prev = 0;
287
- start = query.start, end = query.end, refName = query.refName;
288
- _context5.next = 4;
289
- return _this4.loadData();
290
-
291
- case 4:
292
- _yield$_this4$loadDat = _context5.sent;
293
- intervalTree = _yield$_this4$loadDat.intervalTree;
294
- (_intervalTree$refName = intervalTree[refName]) === null || _intervalTree$refName === void 0 ? void 0 : _intervalTree$refName.search([start, end]).forEach(function (f) {
295
- return observer.next(f);
296
- });
297
- observer.complete();
298
- _context5.next = 13;
299
- break;
300
-
301
- case 10:
302
- _context5.prev = 10;
303
- _context5.t0 = _context5["catch"](0);
304
- observer.error(_context5.t0);
305
-
306
- case 13:
307
- case "end":
308
- return _context5.stop();
309
- }
268
+ if (dataAttributes[a] !== null) {
269
+ var attr = dataAttributes[a];
270
+ if (Array.isArray(attr) && attr.length === 1) {
271
+ ;
272
+ _a = attr, _b = __read(_a, 1), attr = _b[0];
273
+ }
274
+ f[b] = attr;
310
275
  }
311
- }, _callee5, null, [[0, 10]]);
312
- }));
313
-
314
- return function (_x) {
315
- return _ref.apply(this, arguments);
316
- };
317
- }(), opts.signal);
318
- }
319
- }, {
320
- key: "featureData",
321
- value: function featureData(data) {
322
- var _this5 = this;
323
-
324
- var f = _objectSpread({}, data);
325
-
326
- f.start -= 1; // convert to interbase
327
-
328
- if (data.strand === '+') {
329
- f.strand = 1;
330
- } else if (data.strand === '-') {
331
- f.strand = -1;
332
- } else if (data.strand === '.') {
333
- f.strand = 0;
334
- } else {
335
- f.strand = undefined;
336
- }
337
-
338
- f.phase = Number(data.phase);
339
- f.refName = data.seq_id;
340
-
341
- if (data.score === null) {
342
- delete f.score;
343
- }
344
-
345
- if (data.phase === null) {
346
- delete f.score;
347
- }
348
-
349
- var defaultFields = ['start', 'end', 'seq_id', 'score', 'type', 'source', 'phase', 'strand'];
350
- var dataAttributes = data.attributes || {};
351
- Object.keys(dataAttributes).forEach(function (a) {
352
- var b = a.toLowerCase();
353
-
354
- if (defaultFields.includes(b)) {
355
- // add "suffix" to tag name if it already exists
356
- // reproduces behavior of NCList
357
- b += '2';
276
+ });
277
+ f.refName = f.seq_id;
278
+ // the SimpleFeature constructor takes care of recursively inflating subfeatures
279
+ if (data.child_features && data.child_features.length) {
280
+ f.subfeatures = data.child_features
281
+ .map(function (childLocs) { return childLocs.map(function (childLoc) { return _this.featureData(childLoc); }); })
282
+ .flat();
358
283
  }
359
-
360
- if (dataAttributes[a] !== null) {
361
- var attr = dataAttributes[a];
362
-
363
- if (Array.isArray(attr) && attr.length === 1) {
364
- ;
365
- var _attr = attr;
366
-
367
- var _attr2 = (0, _slicedToArray2.default)(_attr, 1);
368
-
369
- attr = _attr2[0];
370
- }
371
-
372
- f[b] = attr;
373
- }
374
- });
375
- f.refName = f.seq_id; // the SimpleFeature constructor takes care of recursively inflating subfeatures
376
-
377
- if (data.child_features && data.child_features.length) {
378
- f.subfeatures = data.child_features.map(function (childLocs) {
379
- return childLocs.map(function (childLoc) {
380
- return _this5.featureData(childLoc);
381
- });
382
- }).flat();
383
- }
384
-
385
- delete f.child_features;
386
- delete f.data;
387
- delete f.derived_features;
388
- delete f.attributes;
389
- delete f.seq_id;
390
- return f;
391
- }
392
- }, {
393
- key: "freeResources",
394
- value: function
395
- /* { region } */
396
- freeResources() {}
397
- }]);
398
- return _default;
399
- }(_BaseAdapter.BaseFeatureDataAdapter);
400
-
401
- exports.default = _default;
284
+ delete f.child_features;
285
+ delete f.data;
286
+ delete f.derived_features;
287
+ delete f.attributes;
288
+ delete f.seq_id;
289
+ return f;
290
+ };
291
+ default_1.prototype.freeResources = function ( /* { region } */) { };
292
+ return default_1;
293
+ }(BaseAdapter_1.BaseFeatureDataAdapter));
294
+ exports.default = default_1;
295
+ //# sourceMappingURL=Gff3Adapter.js.map