@jbrowse/plugin-gff3 2.0.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Gff3Adapter/Gff3Adapter.js +85 -228
- package/dist/Gff3Adapter/Gff3Adapter.js.map +1 -1
- package/dist/Gff3Adapter/configSchema.js +1 -1
- package/dist/Gff3Adapter/configSchema.js.map +1 -1
- package/dist/Gff3TabixAdapter/Gff3TabixAdapter.js +113 -235
- package/dist/Gff3TabixAdapter/Gff3TabixAdapter.js.map +1 -1
- package/dist/Gff3TabixAdapter/configSchema.js +2 -2
- package/dist/Gff3TabixAdapter/configSchema.js.map +1 -1
- package/dist/index.js +34 -60
- package/dist/index.js.map +1 -1
- package/package.json +4 -5
|
@@ -1,230 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
81
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
82
4
|
};
|
|
83
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
6
|
+
const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
|
|
7
|
+
const io_1 = require("@jbrowse/core/util/io");
|
|
8
|
+
const rxjs_1 = require("@jbrowse/core/util/rxjs");
|
|
9
|
+
const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
|
|
10
|
+
const simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeature"));
|
|
11
|
+
const bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
|
|
12
|
+
const gff_1 = __importDefault(require("@gmod/gff"));
|
|
91
13
|
function isGzip(buf) {
|
|
92
14
|
return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
|
|
93
15
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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 }];
|
|
154
|
-
}
|
|
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
|
-
});
|
|
167
|
-
}
|
|
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)];
|
|
182
|
-
}
|
|
183
|
-
});
|
|
16
|
+
class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
17
|
+
async loadDataP() {
|
|
18
|
+
const pm = this.pluginManager;
|
|
19
|
+
const buf = await (0, io_1.openLocation)(this.getConf('gffLocation'), pm).readFile();
|
|
20
|
+
const buffer = isGzip(buf) ? await (0, bgzf_filehandle_1.unzip)(buf) : buf;
|
|
21
|
+
// 512MB max chrome string length is 512MB
|
|
22
|
+
if (buffer.length > 536870888) {
|
|
23
|
+
throw new Error('Data exceeds maximum string length (512MB)');
|
|
24
|
+
}
|
|
25
|
+
const data = new TextDecoder('utf8', { fatal: true }).decode(buffer);
|
|
26
|
+
const lines = data.split('\n');
|
|
27
|
+
const headerLines = [];
|
|
28
|
+
for (let i = 0; i < lines.length && lines[i].startsWith('#'); i++) {
|
|
29
|
+
headerLines.push(lines[i]);
|
|
30
|
+
}
|
|
31
|
+
const header = headerLines.join('\n');
|
|
32
|
+
const feats = gff_1.default.parseStringSync(data, {
|
|
33
|
+
parseFeatures: true,
|
|
34
|
+
parseComments: false,
|
|
35
|
+
parseDirectives: false,
|
|
36
|
+
parseSequences: false,
|
|
184
37
|
});
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
38
|
+
const intervalTree = feats
|
|
39
|
+
.flat()
|
|
40
|
+
.map((f, i) => new simpleFeature_1.default({
|
|
41
|
+
data: this.featureData(f),
|
|
42
|
+
id: `${this.id}-offset-${i}`,
|
|
43
|
+
}))
|
|
44
|
+
.reduce((acc, obj) => {
|
|
45
|
+
const key = obj.get('refName');
|
|
46
|
+
if (!acc[key]) {
|
|
47
|
+
acc[key] = new interval_tree_1.default();
|
|
48
|
+
}
|
|
49
|
+
acc[key].insert([obj.get('start'), obj.get('end')], obj);
|
|
50
|
+
return acc;
|
|
51
|
+
}, {});
|
|
52
|
+
return { header, intervalTree };
|
|
53
|
+
}
|
|
54
|
+
async loadData() {
|
|
55
|
+
if (!this.gffFeatures) {
|
|
56
|
+
this.gffFeatures = this.loadDataP().catch(e => {
|
|
57
|
+
this.gffFeatures = undefined;
|
|
58
|
+
throw e;
|
|
196
59
|
});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return
|
|
203
|
-
|
|
60
|
+
}
|
|
61
|
+
return this.gffFeatures;
|
|
62
|
+
}
|
|
63
|
+
async getRefNames(opts = {}) {
|
|
64
|
+
const { intervalTree } = await this.loadData();
|
|
65
|
+
return Object.keys(intervalTree);
|
|
66
|
+
}
|
|
67
|
+
async getHeader() {
|
|
68
|
+
const { header } = await this.loadData();
|
|
69
|
+
return header;
|
|
70
|
+
}
|
|
71
|
+
getFeatures(query, opts = {}) {
|
|
72
|
+
return (0, rxjs_1.ObservableCreate)(async (observer) => {
|
|
204
73
|
var _a;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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);
|
|
74
|
+
try {
|
|
75
|
+
const { start, end, refName } = query;
|
|
76
|
+
const { intervalTree } = await this.loadData();
|
|
77
|
+
(_a = intervalTree[refName]) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(f => observer.next(f));
|
|
78
|
+
observer.complete();
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
observer.error(e);
|
|
82
|
+
}
|
|
83
|
+
}, opts.signal);
|
|
84
|
+
}
|
|
85
|
+
featureData(data) {
|
|
86
|
+
const f = { ...data };
|
|
228
87
|
f.start -= 1; // convert to interbase
|
|
229
88
|
if (data.strand === '+') {
|
|
230
89
|
f.strand = 1;
|
|
@@ -246,7 +105,7 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
246
105
|
if (data.phase === null) {
|
|
247
106
|
delete f.score;
|
|
248
107
|
}
|
|
249
|
-
|
|
108
|
+
const defaultFields = [
|
|
250
109
|
'start',
|
|
251
110
|
'end',
|
|
252
111
|
'seq_id',
|
|
@@ -256,20 +115,19 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
256
115
|
'phase',
|
|
257
116
|
'strand',
|
|
258
117
|
];
|
|
259
|
-
|
|
260
|
-
Object.keys(dataAttributes).forEach(
|
|
261
|
-
|
|
262
|
-
var b = a.toLowerCase();
|
|
118
|
+
const dataAttributes = data.attributes || {};
|
|
119
|
+
Object.keys(dataAttributes).forEach(a => {
|
|
120
|
+
let b = a.toLowerCase();
|
|
263
121
|
if (defaultFields.includes(b)) {
|
|
264
122
|
// add "suffix" to tag name if it already exists
|
|
265
123
|
// reproduces behavior of NCList
|
|
266
124
|
b += '2';
|
|
267
125
|
}
|
|
268
126
|
if (dataAttributes[a] !== null) {
|
|
269
|
-
|
|
127
|
+
let attr = dataAttributes[a];
|
|
270
128
|
if (Array.isArray(attr) && attr.length === 1) {
|
|
271
129
|
;
|
|
272
|
-
|
|
130
|
+
[attr] = attr;
|
|
273
131
|
}
|
|
274
132
|
f[b] = attr;
|
|
275
133
|
}
|
|
@@ -278,7 +136,7 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
278
136
|
// the SimpleFeature constructor takes care of recursively inflating subfeatures
|
|
279
137
|
if (data.child_features && data.child_features.length) {
|
|
280
138
|
f.subfeatures = data.child_features
|
|
281
|
-
.map(
|
|
139
|
+
.map(childLocs => childLocs.map(childLoc => this.featureData(childLoc)))
|
|
282
140
|
.flat();
|
|
283
141
|
}
|
|
284
142
|
delete f.child_features;
|
|
@@ -287,9 +145,8 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
287
145
|
delete f.attributes;
|
|
288
146
|
delete f.seq_id;
|
|
289
147
|
return f;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
}(BaseAdapter_1.BaseFeatureDataAdapter));
|
|
148
|
+
}
|
|
149
|
+
freeResources( /* { region } */) { }
|
|
150
|
+
}
|
|
294
151
|
exports.default = default_1;
|
|
295
152
|
//# sourceMappingURL=Gff3Adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gff3Adapter.js","sourceRoot":"","sources":["../../src/Gff3Adapter/Gff3Adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Gff3Adapter.js","sourceRoot":"","sources":["../../src/Gff3Adapter/Gff3Adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
3
|
+
const configuration_1 = require("@jbrowse/core/configuration");
|
|
4
4
|
exports.default = (0, configuration_1.ConfigurationSchema)('Gff3Adapter', {
|
|
5
5
|
gffLocation: {
|
|
6
6
|
type: 'fileLocation',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/Gff3Adapter/configSchema.ts"],"names":[],"mappings":";;AAAA
|
|
1
|
+
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/Gff3Adapter/configSchema.ts"],"names":[],"mappings":";;AAAA,+DAAiE;AAEjE,kBAAe,IAAA,mCAAmB,EAChC,aAAa,EACb;IACE,WAAW,EAAE;QACX,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE;KACtE;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
|
|
@@ -1,248 +1,128 @@
|
|
|
1
1
|
"use strict";
|
|
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
81
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
82
4
|
};
|
|
83
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
84
6
|
/* eslint-disable no-underscore-dangle */
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
filehandle: (0, io_1.openLocation)(gffGzLocation, _this.pluginManager),
|
|
7
|
+
const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
|
|
8
|
+
const range_1 = require("@jbrowse/core/util/range");
|
|
9
|
+
const io_1 = require("@jbrowse/core/util/io");
|
|
10
|
+
const rxjs_1 = require("@jbrowse/core/util/rxjs");
|
|
11
|
+
const simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeature"));
|
|
12
|
+
const tabix_1 = require("@gmod/tabix");
|
|
13
|
+
const gff_1 = __importDefault(require("@gmod/gff"));
|
|
14
|
+
const configuration_1 = require("@jbrowse/core/configuration");
|
|
15
|
+
class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
16
|
+
constructor(config, getSubAdapter, pluginManager) {
|
|
17
|
+
super(config, getSubAdapter, pluginManager);
|
|
18
|
+
const gffGzLocation = (0, configuration_1.readConfObject)(config, 'gffGzLocation');
|
|
19
|
+
const indexType = (0, configuration_1.readConfObject)(config, ['index', 'indexType']);
|
|
20
|
+
const location = (0, configuration_1.readConfObject)(config, ['index', 'location']);
|
|
21
|
+
const dontRedispatch = (0, configuration_1.readConfObject)(config, 'dontRedispatch');
|
|
22
|
+
this.dontRedispatch = dontRedispatch || ['chromosome', 'contig', 'region'];
|
|
23
|
+
this.gff = new tabix_1.TabixIndexedFile({
|
|
24
|
+
filehandle: (0, io_1.openLocation)(gffGzLocation, this.pluginManager),
|
|
104
25
|
csiFilehandle: indexType === 'CSI'
|
|
105
|
-
? (0, io_1.openLocation)(location,
|
|
26
|
+
? (0, io_1.openLocation)(location, this.pluginManager)
|
|
106
27
|
: undefined,
|
|
107
28
|
tbiFilehandle: indexType !== 'CSI'
|
|
108
|
-
? (0, io_1.openLocation)(location,
|
|
29
|
+
? (0, io_1.openLocation)(location, this.pluginManager)
|
|
109
30
|
: undefined,
|
|
110
|
-
chunkCacheSize: 50 *
|
|
111
|
-
renameRefSeqs:
|
|
31
|
+
chunkCacheSize: 50 * 2 ** 20,
|
|
32
|
+
renameRefSeqs: (n) => n,
|
|
112
33
|
});
|
|
113
|
-
return _this;
|
|
114
34
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (opts === void 0) { opts = {}; }
|
|
133
|
-
return (0, rxjs_1.ObservableCreate)(function (observer) { return __awaiter(_this, void 0, void 0, function () {
|
|
134
|
-
var metadata;
|
|
135
|
-
return __generator(this, function (_a) {
|
|
136
|
-
switch (_a.label) {
|
|
137
|
-
case 0: return [4 /*yield*/, this.gff.getMetadata()];
|
|
138
|
-
case 1:
|
|
139
|
-
metadata = _a.sent();
|
|
140
|
-
this.getFeaturesHelper(query, opts, metadata, observer, true);
|
|
141
|
-
return [2 /*return*/];
|
|
142
|
-
}
|
|
35
|
+
async getRefNames(opts = {}) {
|
|
36
|
+
return this.gff.getReferenceSequenceNames(opts);
|
|
37
|
+
}
|
|
38
|
+
async getHeader() {
|
|
39
|
+
return this.gff.getHeader();
|
|
40
|
+
}
|
|
41
|
+
getFeatures(query, opts = {}) {
|
|
42
|
+
return (0, rxjs_1.ObservableCreate)(async (observer) => {
|
|
43
|
+
const metadata = await this.gff.getMetadata();
|
|
44
|
+
this.getFeaturesHelper(query, opts, metadata, observer, true);
|
|
45
|
+
}, opts.signal);
|
|
46
|
+
}
|
|
47
|
+
async getFeaturesHelper(query, opts = {}, metadata, observer, allowRedispatch, originalQuery = query) {
|
|
48
|
+
try {
|
|
49
|
+
const lines = [];
|
|
50
|
+
await this.gff.getLines(query.refName, query.start, query.end, (line, fileOffset) => {
|
|
51
|
+
lines.push(this.parseLine(metadata.columnNumbers, line, fileOffset));
|
|
143
52
|
});
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
_a.trys.push([0, 2, , 3]);
|
|
156
|
-
lines_1 = [];
|
|
157
|
-
return [4 /*yield*/, this.gff.getLines(query.refName, query.start, query.end, function (line, fileOffset) {
|
|
158
|
-
lines_1.push(_this.parseLine(metadata.columnNumbers, line, fileOffset));
|
|
159
|
-
})];
|
|
160
|
-
case 1:
|
|
161
|
-
_a.sent();
|
|
162
|
-
if (allowRedispatch && lines_1.length) {
|
|
163
|
-
minStart_1 = Infinity;
|
|
164
|
-
maxEnd_1 = -Infinity;
|
|
165
|
-
lines_1.forEach(function (line) {
|
|
166
|
-
var featureType = line.fields[2];
|
|
167
|
-
// only expand redispatch range if feature is not a "dontRedispatch" type
|
|
168
|
-
// skips large regions like chromosome,region
|
|
169
|
-
if (!_this.dontRedispatch.includes(featureType)) {
|
|
170
|
-
var start = line.start - 1; // gff is 1-based
|
|
171
|
-
if (start < minStart_1) {
|
|
172
|
-
minStart_1 = start;
|
|
173
|
-
}
|
|
174
|
-
if (line.end > maxEnd_1) {
|
|
175
|
-
maxEnd_1 = line.end;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
if (maxEnd_1 > query.end || minStart_1 < query.start) {
|
|
180
|
-
// make a new feature callback to only return top-level features
|
|
181
|
-
// in the original query range
|
|
182
|
-
this.getFeaturesHelper(__assign(__assign({}, query), { start: minStart_1, end: maxEnd_1 }), opts, metadata, observer, false, query);
|
|
183
|
-
return [2 /*return*/];
|
|
184
|
-
}
|
|
53
|
+
if (allowRedispatch && lines.length) {
|
|
54
|
+
let minStart = Infinity;
|
|
55
|
+
let maxEnd = -Infinity;
|
|
56
|
+
lines.forEach(line => {
|
|
57
|
+
const featureType = line.fields[2];
|
|
58
|
+
// only expand redispatch range if feature is not a "dontRedispatch" type
|
|
59
|
+
// skips large regions like chromosome,region
|
|
60
|
+
if (!this.dontRedispatch.includes(featureType)) {
|
|
61
|
+
const start = line.start - 1; // gff is 1-based
|
|
62
|
+
if (start < minStart) {
|
|
63
|
+
minStart = start;
|
|
185
64
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return lineRecord.fields.join('\t');
|
|
197
|
-
})
|
|
198
|
-
.join('\n');
|
|
199
|
-
features = gff_1.default.parseStringSync(gff3, {
|
|
200
|
-
parseFeatures: true,
|
|
201
|
-
parseComments: false,
|
|
202
|
-
parseDirectives: false,
|
|
203
|
-
parseSequences: false,
|
|
204
|
-
});
|
|
205
|
-
features.forEach(function (featureLocs) {
|
|
206
|
-
return _this.formatFeatures(featureLocs).forEach(function (f) {
|
|
207
|
-
if ((0, range_1.doesIntersect2)(f.get('start'), f.get('end'), originalQuery.start, originalQuery.end)) {
|
|
208
|
-
observer.next(f);
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
observer.complete();
|
|
213
|
-
return [3 /*break*/, 3];
|
|
214
|
-
case 2:
|
|
215
|
-
e_1 = _a.sent();
|
|
216
|
-
observer.error(e_1);
|
|
217
|
-
return [3 /*break*/, 3];
|
|
218
|
-
case 3: return [2 /*return*/];
|
|
65
|
+
if (line.end > maxEnd) {
|
|
66
|
+
maxEnd = line.end;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
if (maxEnd > query.end || minStart < query.start) {
|
|
71
|
+
// make a new feature callback to only return top-level features
|
|
72
|
+
// in the original query range
|
|
73
|
+
this.getFeaturesHelper({ ...query, start: minStart, end: maxEnd }, opts, metadata, observer, false, query);
|
|
74
|
+
return;
|
|
219
75
|
}
|
|
76
|
+
}
|
|
77
|
+
const gff3 = lines
|
|
78
|
+
.map((lineRecord) => {
|
|
79
|
+
if (lineRecord.fields[8] && lineRecord.fields[8] !== '.') {
|
|
80
|
+
if (!lineRecord.fields[8].includes('_lineHash')) {
|
|
81
|
+
lineRecord.fields[8] += `;_lineHash=${lineRecord.lineHash}`;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
lineRecord.fields[8] = `_lineHash=${lineRecord.lineHash}`;
|
|
86
|
+
}
|
|
87
|
+
return lineRecord.fields.join('\t');
|
|
88
|
+
})
|
|
89
|
+
.join('\n');
|
|
90
|
+
const features = gff_1.default.parseStringSync(gff3, {
|
|
91
|
+
parseFeatures: true,
|
|
92
|
+
parseComments: false,
|
|
93
|
+
parseDirectives: false,
|
|
94
|
+
parseSequences: false,
|
|
220
95
|
});
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
96
|
+
features.forEach(featureLocs => this.formatFeatures(featureLocs).forEach(f => {
|
|
97
|
+
if ((0, range_1.doesIntersect2)(f.get('start'), f.get('end'), originalQuery.start, originalQuery.end)) {
|
|
98
|
+
observer.next(f);
|
|
99
|
+
}
|
|
100
|
+
}));
|
|
101
|
+
observer.complete();
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
observer.error(e);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
parseLine(columnNumbers, line, fileOffset) {
|
|
108
|
+
const fields = line.split('\t');
|
|
225
109
|
// note: index column numbers are 1-based
|
|
226
110
|
return {
|
|
227
111
|
start: +fields[columnNumbers.start - 1],
|
|
228
112
|
end: +fields[columnNumbers.end - 1],
|
|
229
113
|
lineHash: fileOffset,
|
|
230
|
-
fields
|
|
114
|
+
fields,
|
|
231
115
|
};
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
default_1.prototype.featureData = function (data) {
|
|
244
|
-
var _this = this;
|
|
245
|
-
var f = __assign({}, data);
|
|
116
|
+
}
|
|
117
|
+
formatFeatures(featureLocs) {
|
|
118
|
+
return featureLocs.map(featureLoc => new simpleFeature_1.default({
|
|
119
|
+
data: this.featureData(featureLoc),
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
121
|
+
id: `${this.id}-offset-${featureLoc.attributes._lineHash[0]}`,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
featureData(data) {
|
|
125
|
+
const f = { ...data };
|
|
246
126
|
f.start -= 1; // convert to interbase
|
|
247
127
|
if (data.strand === '+') {
|
|
248
128
|
f.strand = 1;
|
|
@@ -264,7 +144,7 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
264
144
|
if (data.phase === null) {
|
|
265
145
|
delete f.score;
|
|
266
146
|
}
|
|
267
|
-
|
|
147
|
+
const defaultFields = [
|
|
268
148
|
'start',
|
|
269
149
|
'end',
|
|
270
150
|
'seq_id',
|
|
@@ -274,20 +154,19 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
274
154
|
'phase',
|
|
275
155
|
'strand',
|
|
276
156
|
];
|
|
277
|
-
|
|
278
|
-
Object.keys(dataAttributes).forEach(
|
|
279
|
-
|
|
280
|
-
var b = a.toLowerCase();
|
|
157
|
+
const dataAttributes = data.attributes || {};
|
|
158
|
+
Object.keys(dataAttributes).forEach(a => {
|
|
159
|
+
let b = a.toLowerCase();
|
|
281
160
|
if (defaultFields.includes(b)) {
|
|
282
161
|
// add "suffix" to tag name if it already exists
|
|
283
162
|
// reproduces behavior of NCList
|
|
284
163
|
b += '2';
|
|
285
164
|
}
|
|
286
165
|
if (dataAttributes[a] !== null) {
|
|
287
|
-
|
|
166
|
+
let attr = dataAttributes[a];
|
|
288
167
|
if (Array.isArray(attr) && attr.length === 1) {
|
|
289
168
|
;
|
|
290
|
-
|
|
169
|
+
[attr] = attr;
|
|
291
170
|
}
|
|
292
171
|
f[b] = attr;
|
|
293
172
|
}
|
|
@@ -296,7 +175,7 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
296
175
|
// the SimpleFeature constructor takes care of recursively inflating subfeatures
|
|
297
176
|
if (data.child_features && data.child_features.length) {
|
|
298
177
|
f.subfeatures = data.child_features
|
|
299
|
-
.map(
|
|
178
|
+
.map(childLocs => childLocs.map(childLoc => this.featureData(childLoc)))
|
|
300
179
|
.flat();
|
|
301
180
|
}
|
|
302
181
|
delete f.child_features;
|
|
@@ -306,9 +185,8 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
306
185
|
delete f.attributes;
|
|
307
186
|
delete f.seq_id;
|
|
308
187
|
return f;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
}(BaseAdapter_1.BaseFeatureDataAdapter));
|
|
188
|
+
}
|
|
189
|
+
freeResources( /* { region } */) { }
|
|
190
|
+
}
|
|
313
191
|
exports.default = default_1;
|
|
314
192
|
//# sourceMappingURL=Gff3TabixAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gff3TabixAdapter.js","sourceRoot":"","sources":["../../src/Gff3TabixAdapter/Gff3TabixAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Gff3TabixAdapter.js","sourceRoot":"","sources":["../../src/Gff3TabixAdapter/Gff3TabixAdapter.ts"],"names":[],"mappings":";;;;;AAAA,yCAAyC;AACzC,yEAGgD;AAChD,oDAAyD;AAEzD,8CAAoD;AACpD,kDAA0D;AAC1D,qFAAyE;AACzE,uCAA8C;AAC9C,oDAAqE;AAErE,+DAGoC;AAWpC,eAAqB,SAAQ,oCAAsB;IAKjD,YACE,MAA6B,EAC7B,aAAiC,EACjC,aAA6B;QAE7B,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,aAAa,GAAG,IAAA,8BAAc,EAAC,MAAM,EAAE,eAAe,CAAC,CAAA;QAC7D,MAAM,SAAS,GAAG,IAAA,8BAAc,EAAC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;QAChE,MAAM,QAAQ,GAAG,IAAA,8BAAc,EAAC,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;QAC9D,MAAM,cAAc,GAAG,IAAA,8BAAc,EAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;QAE/D,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC1E,IAAI,CAAC,GAAG,GAAG,IAAI,wBAAgB,CAAC;YAC9B,UAAU,EAAE,IAAA,iBAAY,EAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC3D,aAAa,EACX,SAAS,KAAK,KAAK;gBACjB,CAAC,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC5C,CAAC,CAAC,SAAS;YACf,aAAa,EACX,SAAS,KAAK,KAAK;gBACjB,CAAC,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC5C,CAAC,CAAC,SAAS;YACf,cAAc,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE;YAC5B,aAAa,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;SAChC,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAoB,EAAE;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAA;IAC7B,CAAC;IAEM,WAAW,CAAC,KAAa,EAAE,OAAoB,EAAE;QACtD,OAAO,IAAA,uBAAgB,EAAU,KAAK,EAAC,QAAQ,EAAC,EAAE;YAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;YAC7C,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC/D,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,KAAa,EACb,OAAoB,EAAE,EACtB,QAA2D,EAC3D,QAA2B,EAC3B,eAAwB,EACxB,aAAa,GAAG,KAAK;QAErB,IAAI;YACF,MAAM,KAAK,GAAkB,EAAE,CAAA;YAE/B,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CACrB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,CAAC,IAAY,EAAE,UAAkB,EAAE,EAAE;gBACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;YACtE,CAAC,CACF,CAAA;YACD,IAAI,eAAe,IAAI,KAAK,CAAC,MAAM,EAAE;gBACnC,IAAI,QAAQ,GAAG,QAAQ,CAAA;gBACvB,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAA;gBACtB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;oBAClC,yEAAyE;oBACzE,6CAA6C;oBAC7C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;wBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA,CAAC,iBAAiB;wBAC9C,IAAI,KAAK,GAAG,QAAQ,EAAE;4BACpB,QAAQ,GAAG,KAAK,CAAA;yBACjB;wBACD,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE;4BACrB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAA;yBAClB;qBACF;gBACH,CAAC,CAAC,CAAA;gBACF,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE;oBAChD,gEAAgE;oBAChE,8BAA8B;oBAC9B,IAAI,CAAC,iBAAiB,CACpB,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAC1C,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,KAAK,CACN,CAAA;oBACD,OAAM;iBACP;aACF;YAED,MAAM,IAAI,GAAG,KAAK;iBACf,GAAG,CAAC,CAAC,UAAuB,EAAE,EAAE;gBAC/B,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBACxD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;wBAC/C,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;qBAC5D;iBACF;qBAAM;oBACL,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,UAAU,CAAC,QAAQ,EAAE,CAAA;iBAC1D;gBACD,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;YAEb,MAAM,QAAQ,GAAG,aAAG,CAAC,eAAe,CAAC,IAAI,EAAE;gBACzC,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,KAAK;aACtB,CAAC,CAAA;YAEF,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAC7B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC3C,IACE,IAAA,sBAAc,EACZ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EACd,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EACZ,aAAa,CAAC,KAAK,EACnB,aAAa,CAAC,GAAG,CAClB,EACD;oBACA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;iBACjB;YACH,CAAC,CAAC,CACH,CAAA;YACD,QAAQ,CAAC,QAAQ,EAAE,CAAA;SACpB;QAAC,OAAO,CAAC,EAAE;YACV,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SAClB;IACH,CAAC;IAEO,SAAS,CACf,aAA6C,EAC7C,IAAY,EACZ,UAAkB;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAE/B,yCAAyC;QACzC,OAAO;YACL,KAAK,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;YACvC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;YACnC,QAAQ,EAAE,UAAU;YACpB,MAAM;SACP,CAAA;IACH,CAAC;IAEO,cAAc,CAAC,WAAwB;QAC7C,OAAO,WAAW,CAAC,GAAG,CACpB,UAAU,CAAC,EAAE,CACX,IAAI,uBAAa,CAAC;YAChB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YAClC,oEAAoE;YACpE,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,WAAW,UAAU,CAAC,UAAW,CAAC,SAAU,CAAC,CAAC,CAAC,EAAE;SAChE,CAAC,CACL,CAAA;IACH,CAAC;IAEO,WAAW,CAAC,IAA6B;QAC/C,MAAM,CAAC,GAA4B,EAAE,GAAG,IAAI,EAAE,CAC7C;QAAC,CAAC,CAAC,KAAgB,IAAI,CAAC,CAAA,CAAC,uBAAuB;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE;YACvB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;SACb;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE;YAC9B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;SACd;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE;YAC9B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;SACb;aAAM;YACL,CAAC,CAAC,MAAM,GAAG,SAAS,CAAA;SACrB;QACD,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACvB,OAAO,CAAC,CAAC,KAAK,CAAA;SACf;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACvB,OAAO,CAAC,CAAC,KAAK,CAAA;SACf;QACD,MAAM,aAAa,GAAG;YACpB,OAAO;YACP,KAAK;YACL,QAAQ;YACR,OAAO;YACP,MAAM;YACN,QAAQ;YACR,OAAO;YACP,QAAQ;SACT,CAAA;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;QAC5C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YACvB,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAC7B,gDAAgD;gBAChD,gCAAgC;gBAChC,CAAC,IAAI,GAAG,CAAA;aACT;YACD,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC9B,IAAI,IAAI,GAAkC,cAAc,CAAC,CAAC,CAAC,CAAA;gBAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5C,CAAC;oBAAA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;iBACf;gBACD,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;aACZ;QACH,CAAC,CAAC,CAAA;QACF,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAA;QAEpB,gFAAgF;QAChF,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACrD,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc;iBAChC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;iBACvE,IAAI,EAAE,CAAA;SACV;QAED,OAAO,CAAC,CAAC,cAAc,CAAA;QACvB,OAAO,CAAC,CAAC,IAAI,CAAA;QACb,OAAO,CAAC,CAAC,gBAAgB,CAAA;QACzB,OAAO,CAAC,CAAC,SAAS,CAAA;QAClB,OAAO,CAAC,CAAC,UAAU,CAAA;QACnB,OAAO,CAAC,CAAC,MAAM,CAAA;QACf,OAAO,CAAC,CAAA;IACV,CAAC;IAEM,aAAa,EAAC,gBAAgB,IAAG,CAAC;CAC1C;AAtOD,4BAsOC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
4
|
+
const configuration_1 = require("@jbrowse/core/configuration");
|
|
5
5
|
exports.default = (0, configuration_1.ConfigurationSchema)('Gff3TabixAdapter', {
|
|
6
6
|
gffGzLocation: {
|
|
7
7
|
type: 'fileLocation',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/Gff3TabixAdapter/configSchema.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/Gff3TabixAdapter/configSchema.ts"],"names":[],"mappings":";;AAAA,qDAAuC;AACvC,+DAAiE;AAEjE,kBAAe,IAAA,mCAAmB,EAChC,kBAAkB,EAClB;IACE,aAAa,EAAE;QACb,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE;KACzE;IACD,KAAK,EAAE,IAAA,mCAAmB,EAAC,gBAAgB,EAAE;QAC3C,SAAS,EAAE;YACT,KAAK,EAAE,uBAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,KAAK;SACpB;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE;gBACZ,GAAG,EAAE,wBAAwB;gBAC7B,YAAY,EAAE,aAAa;aAC5B;SACF;KACF,CAAC;IACF,cAAc,EAAE;QACd,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;KACvC;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
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
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
3
|
if (k2 === undefined) k2 = k;
|
|
19
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -41,34 +26,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
41
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
27
|
};
|
|
43
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
_this.name = 'GFF3Plugin';
|
|
54
|
-
return _this;
|
|
29
|
+
const AdapterType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/AdapterType"));
|
|
30
|
+
const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
|
|
31
|
+
const Gff3TabixAdapter_1 = require("./Gff3TabixAdapter");
|
|
32
|
+
const tracks_1 = require("@jbrowse/core/util/tracks");
|
|
33
|
+
const Gff3Adapter_1 = require("./Gff3Adapter");
|
|
34
|
+
class default_1 extends Plugin_1.default {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(...arguments);
|
|
37
|
+
this.name = 'GFF3Plugin';
|
|
55
38
|
}
|
|
56
|
-
|
|
57
|
-
pluginManager.addAdapterType(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
var regexGuess = /\.gff3?\.b?gz$/i;
|
|
69
|
-
var adapterName = 'Gff3TabixAdapter';
|
|
70
|
-
var fileName = (0, tracks_1.getFileName)(file);
|
|
71
|
-
var indexName = index && (0, tracks_1.getFileName)(index);
|
|
39
|
+
install(pluginManager) {
|
|
40
|
+
pluginManager.addAdapterType(() => new AdapterType_1.default({
|
|
41
|
+
name: 'Gff3TabixAdapter',
|
|
42
|
+
configSchema: Gff3TabixAdapter_1.configSchema,
|
|
43
|
+
getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./Gff3TabixAdapter/Gff3TabixAdapter'))).then(r => r.default),
|
|
44
|
+
}));
|
|
45
|
+
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
46
|
+
return (file, index, adapterHint) => {
|
|
47
|
+
const regexGuess = /\.gff3?\.b?gz$/i;
|
|
48
|
+
const adapterName = 'Gff3TabixAdapter';
|
|
49
|
+
const fileName = (0, tracks_1.getFileName)(file);
|
|
50
|
+
const indexName = index && (0, tracks_1.getFileName)(index);
|
|
72
51
|
if (regexGuess.test(fileName) || adapterHint === adapterName) {
|
|
73
52
|
return {
|
|
74
53
|
type: adapterName,
|
|
@@ -83,21 +62,17 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
83
62
|
return adapterGuesser(file, index, adapterHint);
|
|
84
63
|
};
|
|
85
64
|
});
|
|
86
|
-
pluginManager.addAdapterType(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
var regexGuess = /\.gff3?$/i;
|
|
98
|
-
var adapterName = 'Gff3Adapter';
|
|
99
|
-
var fileName = (0, tracks_1.getFileName)(file);
|
|
100
|
-
var obj = {
|
|
65
|
+
pluginManager.addAdapterType(() => new AdapterType_1.default({
|
|
66
|
+
name: 'Gff3Adapter',
|
|
67
|
+
configSchema: Gff3Adapter_1.configSchema,
|
|
68
|
+
getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./Gff3Adapter/Gff3Adapter'))).then(r => r.default),
|
|
69
|
+
}));
|
|
70
|
+
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
71
|
+
return (file, index, adapterHint) => {
|
|
72
|
+
const regexGuess = /\.gff3?$/i;
|
|
73
|
+
const adapterName = 'Gff3Adapter';
|
|
74
|
+
const fileName = (0, tracks_1.getFileName)(file);
|
|
75
|
+
const obj = {
|
|
101
76
|
type: adapterName,
|
|
102
77
|
gffLocation: file,
|
|
103
78
|
};
|
|
@@ -110,8 +85,7 @@ var default_1 = /** @class */ (function (_super) {
|
|
|
110
85
|
return adapterGuesser(file, index, adapterHint);
|
|
111
86
|
};
|
|
112
87
|
});
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
}(Plugin_1.default));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
116
90
|
exports.default = default_1;
|
|
117
91
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kGAAyE;AAEzE,kEAAyC;AACzC,yDAAiF;AAEjF,sDAKkC;AAClC,+CAAuE;AAEvE,eAAqB,SAAQ,gBAAM;IAAnC;;QACE,SAAI,GAAG,YAAY,CAAA;IAyErB,CAAC;IAvEC,OAAO,CAAC,aAA4B;QAClC,aAAa,CAAC,cAAc,CAC1B,GAAG,EAAE,CACH,IAAI,qBAAW,CAAC;YACd,IAAI,EAAE,kBAAkB;YACxB,YAAY,EAAE,+BAA4B;YAC1C,eAAe,EAAE,GAAG,EAAE,CACpB,kDAAO,qCAAqC,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SACrE,CAAC,CACL,CAAA;QACD,aAAa,CAAC,mBAAmB,CAC/B,8BAA8B,EAC9B,CAAC,cAA8B,EAAE,EAAE;YACjC,OAAO,CACL,IAAkB,EAClB,KAAoB,EACpB,WAAoB,EACpB,EAAE;gBACF,MAAM,UAAU,GAAG,iBAAiB,CAAA;gBACpC,MAAM,WAAW,GAAG,kBAAkB,CAAA;gBACtC,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;gBAClC,MAAM,SAAS,GAAG,KAAK,IAAI,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAA;gBAC7C,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,KAAK,WAAW,EAAE;oBAC5D,OAAO;wBACL,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE,IAAI;wBACjB,aAAa,EAAE,IAAI;wBACnB,KAAK,EAAE;4BACL,QAAQ,EAAE,KAAK,IAAI,IAAA,kBAAS,EAAC,IAAI,EAAE,MAAM,CAAC;4BAC1C,SAAS,EAAE,IAAA,sBAAa,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;yBAClD;qBACF,CAAA;iBACF;gBACD,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;YACjD,CAAC,CAAA;QACH,CAAC,CACF,CAAA;QACD,aAAa,CAAC,cAAc,CAC1B,GAAG,EAAE,CACH,IAAI,qBAAW,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,YAAY,EAAE,0BAAuB;YACrC,eAAe,EAAE,GAAG,EAAE,CACpB,kDAAO,2BAA2B,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SAC3D,CAAC,CACL,CAAA;QACD,aAAa,CAAC,mBAAmB,CAC/B,8BAA8B,EAC9B,CAAC,cAA8B,EAAE,EAAE;YACjC,OAAO,CACL,IAAkB,EAClB,KAAoB,EACpB,WAAoB,EACpB,EAAE;gBACF,MAAM,UAAU,GAAG,WAAW,CAAA;gBAC9B,MAAM,WAAW,GAAG,aAAa,CAAA;gBACjC,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;gBAClC,MAAM,GAAG,GAAG;oBACV,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,IAAI;iBAClB,CAAA;gBACD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;oBAC7C,OAAO,GAAG,CAAA;iBACX;qBAAM,IAAI,WAAW,KAAK,WAAW,EAAE;oBACtC,OAAO,GAAG,CAAA;iBACX;gBACD,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;YACjD,CAAC,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC;CACF;AA1ED,4BA0EC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-gff3",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "JBrowse 2 gff3.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -37,15 +37,14 @@
|
|
|
37
37
|
"clean": "rimraf dist esm *.tsbuildinfo"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@babel/runtime": "^7.17.9",
|
|
41
40
|
"@flatten-js/interval-tree": "^1.0.15",
|
|
42
41
|
"@gmod/bgzf-filehandle": "^1.4.3",
|
|
43
42
|
"@gmod/gff": "^1.2.0",
|
|
44
43
|
"@gmod/tabix": "^1.5.2"
|
|
45
44
|
},
|
|
46
45
|
"peerDependencies": {
|
|
47
|
-
"@jbrowse/core": "^
|
|
48
|
-
"@jbrowse/plugin-linear-genome-view": "^
|
|
46
|
+
"@jbrowse/core": "^2.0.0",
|
|
47
|
+
"@jbrowse/plugin-linear-genome-view": "^2.0.0",
|
|
49
48
|
"@mui/material": "^5.0.0",
|
|
50
49
|
"mobx": "^6.0.0",
|
|
51
50
|
"mobx-react": "^7.0.0",
|
|
@@ -60,5 +59,5 @@
|
|
|
60
59
|
"distModule": "esm/index.js",
|
|
61
60
|
"srcModule": "src/index.ts",
|
|
62
61
|
"module": "esm/index.js",
|
|
63
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "449b17325c9a4a97181f7ddddf48e80219f03b8d"
|
|
64
63
|
}
|