@jbrowse/plugin-gtf 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/GtfAdapter/GtfAdapter.js +94 -213
- package/dist/GtfAdapter/GtfAdapter.js.map +1 -1
- package/dist/GtfAdapter/configSchema.js +1 -1
- package/dist/GtfAdapter/configSchema.js.map +1 -1
- package/dist/index.js +22 -44
- package/dist/index.js.map +1 -1
- package/dist/util.js +7 -18
- package/dist/util.js.map +1 -1
- package/package.json +4 -5
|
@@ -1,227 +1,108 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
-
function step(op) {
|
|
31
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
-
while (_) try {
|
|
33
|
-
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;
|
|
34
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
-
switch (op[0]) {
|
|
36
|
-
case 0: case 1: t = op; break;
|
|
37
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
-
default:
|
|
41
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
-
if (t[2]) _.ops.pop();
|
|
46
|
-
_.trys.pop(); continue;
|
|
47
|
-
}
|
|
48
|
-
op = body.call(thisArg, _);
|
|
49
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
4
|
};
|
|
56
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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 gtf_1 = __importDefault(require("@gmod/gtf"));
|
|
13
|
+
const util_1 = require("../util");
|
|
65
14
|
function isGzip(buf) {
|
|
66
15
|
return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
|
|
67
16
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
_this.intervalTrees = {};
|
|
73
|
-
return _this;
|
|
17
|
+
class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.intervalTrees = {};
|
|
74
21
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (line.startsWith('#')) {
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
tab = line.indexOf('\t');
|
|
109
|
-
refName = line.slice(0, tab);
|
|
110
|
-
if (!feats[refName]) {
|
|
111
|
-
feats[refName] = [];
|
|
112
|
-
}
|
|
113
|
-
feats[refName].push(lines[i]);
|
|
114
|
-
}
|
|
115
|
-
return [2 /*return*/, { feats: feats }];
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
};
|
|
120
|
-
default_1.prototype.loadData = function (opts) {
|
|
121
|
-
if (opts === void 0) { opts = {}; }
|
|
122
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
123
|
-
var _this = this;
|
|
124
|
-
return __generator(this, function (_a) {
|
|
125
|
-
if (!this.gtfFeatures) {
|
|
126
|
-
this.gtfFeatures = this.loadDataP(opts).catch(function (e) {
|
|
127
|
-
_this.gtfFeatures = undefined;
|
|
128
|
-
throw e;
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
return [2 /*return*/, this.gtfFeatures];
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
default_1.prototype.getRefNames = function (opts) {
|
|
136
|
-
if (opts === void 0) { opts = {}; }
|
|
137
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
138
|
-
var feats;
|
|
139
|
-
return __generator(this, function (_a) {
|
|
140
|
-
switch (_a.label) {
|
|
141
|
-
case 0: return [4 /*yield*/, this.loadData(opts)];
|
|
142
|
-
case 1:
|
|
143
|
-
feats = (_a.sent()).feats;
|
|
144
|
-
return [2 /*return*/, Object.keys(feats)];
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
};
|
|
149
|
-
default_1.prototype.loadFeatureIntervalTreeHelper = function (refName) {
|
|
150
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
151
|
-
var feats, lines, data, intervalTree, ret, i, obj;
|
|
152
|
-
var _this = this;
|
|
153
|
-
return __generator(this, function (_a) {
|
|
154
|
-
switch (_a.label) {
|
|
155
|
-
case 0: return [4 /*yield*/, this.loadData()];
|
|
156
|
-
case 1:
|
|
157
|
-
feats = (_a.sent()).feats;
|
|
158
|
-
lines = feats[refName];
|
|
159
|
-
if (!lines) {
|
|
160
|
-
return [2 /*return*/, undefined];
|
|
161
|
-
}
|
|
162
|
-
data = gtf_1.default.parseStringSync(lines.join('\n'), {
|
|
163
|
-
parseFeatures: true,
|
|
164
|
-
parseComments: false,
|
|
165
|
-
parseDirectives: false,
|
|
166
|
-
parseSequences: false,
|
|
167
|
-
});
|
|
168
|
-
intervalTree = new interval_tree_1.default();
|
|
169
|
-
ret = data.flat().map(function (f, i) {
|
|
170
|
-
return new simpleFeature_1.default({
|
|
171
|
-
data: (0, util_1.featureData)(f),
|
|
172
|
-
id: "".concat(_this.id, "-").concat(refName, "-").concat(i),
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
for (i = 0; i < ret.length; i++) {
|
|
176
|
-
obj = ret[i];
|
|
177
|
-
intervalTree.insert([obj.get('start'), obj.get('end')], obj);
|
|
178
|
-
}
|
|
179
|
-
return [2 /*return*/, intervalTree];
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
};
|
|
184
|
-
default_1.prototype.loadFeatureIntervalTree = function (refName) {
|
|
185
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
186
|
-
var _this = this;
|
|
187
|
-
return __generator(this, function (_a) {
|
|
188
|
-
if (!this.intervalTrees[refName]) {
|
|
189
|
-
this.intervalTrees[refName] = this.loadFeatureIntervalTreeHelper(refName).catch(function (e) {
|
|
190
|
-
_this.intervalTrees[refName] = undefined;
|
|
191
|
-
throw e;
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
return [2 /*return*/, this.intervalTrees[refName]];
|
|
22
|
+
async loadDataP(opts = {}) {
|
|
23
|
+
const gtfLoc = this.getConf('gtfLocation');
|
|
24
|
+
const buffer = await (0, io_1.openLocation)(gtfLoc, this.pluginManager).readFile(opts);
|
|
25
|
+
const buf = isGzip(buffer) ? await (0, bgzf_filehandle_1.unzip)(buffer) : buffer;
|
|
26
|
+
// 512MB max chrome string length is 512MB
|
|
27
|
+
if (buf.length > 536870888) {
|
|
28
|
+
throw new Error('Data exceeds maximum string length (512MB)');
|
|
29
|
+
}
|
|
30
|
+
const data = new TextDecoder('utf8', { fatal: true }).decode(buf);
|
|
31
|
+
const lines = data.split('\n').filter(f => !!f && !f.startsWith('#'));
|
|
32
|
+
const feats = {};
|
|
33
|
+
for (let i = 0; i < lines.length; i++) {
|
|
34
|
+
const line = lines[i];
|
|
35
|
+
if (line.startsWith('#')) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const tab = line.indexOf('\t');
|
|
39
|
+
const refName = line.slice(0, tab);
|
|
40
|
+
if (!feats[refName]) {
|
|
41
|
+
feats[refName] = [];
|
|
42
|
+
}
|
|
43
|
+
feats[refName].push(lines[i]);
|
|
44
|
+
}
|
|
45
|
+
return { feats };
|
|
46
|
+
}
|
|
47
|
+
async loadData(opts = {}) {
|
|
48
|
+
if (!this.gtfFeatures) {
|
|
49
|
+
this.gtfFeatures = this.loadDataP(opts).catch(e => {
|
|
50
|
+
this.gtfFeatures = undefined;
|
|
51
|
+
throw e;
|
|
195
52
|
});
|
|
53
|
+
}
|
|
54
|
+
return this.gtfFeatures;
|
|
55
|
+
}
|
|
56
|
+
async getRefNames(opts = {}) {
|
|
57
|
+
const { feats } = await this.loadData(opts);
|
|
58
|
+
return Object.keys(feats);
|
|
59
|
+
}
|
|
60
|
+
async loadFeatureIntervalTreeHelper(refName) {
|
|
61
|
+
const { feats } = await this.loadData();
|
|
62
|
+
const lines = feats[refName];
|
|
63
|
+
if (!lines) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const data = gtf_1.default.parseStringSync(lines.join('\n'), {
|
|
67
|
+
parseFeatures: true,
|
|
68
|
+
parseComments: false,
|
|
69
|
+
parseDirectives: false,
|
|
70
|
+
parseSequences: false,
|
|
196
71
|
});
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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*/];
|
|
219
|
-
}
|
|
72
|
+
const intervalTree = new interval_tree_1.default();
|
|
73
|
+
const ret = data.flat().map((f, i) => new simpleFeature_1.default({
|
|
74
|
+
data: (0, util_1.featureData)(f),
|
|
75
|
+
id: `${this.id}-${refName}-${i}`,
|
|
76
|
+
}));
|
|
77
|
+
for (let i = 0; i < ret.length; i++) {
|
|
78
|
+
const obj = ret[i];
|
|
79
|
+
intervalTree.insert([obj.get('start'), obj.get('end')], obj);
|
|
80
|
+
}
|
|
81
|
+
return intervalTree;
|
|
82
|
+
}
|
|
83
|
+
async loadFeatureIntervalTree(refName) {
|
|
84
|
+
if (!this.intervalTrees[refName]) {
|
|
85
|
+
this.intervalTrees[refName] = this.loadFeatureIntervalTreeHelper(refName).catch(e => {
|
|
86
|
+
this.intervalTrees[refName] = undefined;
|
|
87
|
+
throw e;
|
|
220
88
|
});
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
89
|
+
}
|
|
90
|
+
return this.intervalTrees[refName];
|
|
91
|
+
}
|
|
92
|
+
getFeatures(query, opts = {}) {
|
|
93
|
+
return (0, rxjs_1.ObservableCreate)(async (observer) => {
|
|
94
|
+
try {
|
|
95
|
+
const { start, end, refName } = query;
|
|
96
|
+
const intervalTree = await this.loadFeatureIntervalTree(refName);
|
|
97
|
+
intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end]).forEach(f => observer.next(f));
|
|
98
|
+
observer.complete();
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
observer.error(e);
|
|
102
|
+
}
|
|
103
|
+
}, opts.signal);
|
|
104
|
+
}
|
|
105
|
+
freeResources( /* { region } */) { }
|
|
106
|
+
}
|
|
226
107
|
exports.default = default_1;
|
|
227
108
|
//# sourceMappingURL=GtfAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GtfAdapter.js","sourceRoot":"","sources":["../../src/GtfAdapter/GtfAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GtfAdapter.js","sourceRoot":"","sources":["../../src/GtfAdapter/GtfAdapter.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)('GtfAdapter', {
|
|
5
5
|
gtfLocation: {
|
|
6
6
|
type: 'fileLocation',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/GtfAdapter/configSchema.ts"],"names":[],"mappings":";;AAAA
|
|
1
|
+
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/GtfAdapter/configSchema.ts"],"names":[],"mappings":";;AAAA,+DAAiE;AAEjE,kBAAe,IAAA,mCAAmB,EAChC,YAAY,EACZ;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"}
|
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,33 +26,27 @@ 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
|
-
_this.name = 'GTFPlugin';
|
|
53
|
-
return _this;
|
|
29
|
+
const AdapterType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/AdapterType"));
|
|
30
|
+
const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
|
|
31
|
+
const GtfAdapter_1 = require("./GtfAdapter");
|
|
32
|
+
const tracks_1 = require("@jbrowse/core/util/tracks");
|
|
33
|
+
class GtfPlugin extends Plugin_1.default {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(...arguments);
|
|
36
|
+
this.name = 'GTFPlugin';
|
|
54
37
|
}
|
|
55
|
-
|
|
56
|
-
pluginManager.addAdapterType(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
var regexGuess = /\.gtf(\.gz)?$/i;
|
|
68
|
-
var adapterName = 'GtfAdapter';
|
|
69
|
-
var fileName = (0, tracks_1.getFileName)(file);
|
|
70
|
-
var obj = {
|
|
38
|
+
install(pluginManager) {
|
|
39
|
+
pluginManager.addAdapterType(() => new AdapterType_1.default({
|
|
40
|
+
name: 'GtfAdapter',
|
|
41
|
+
configSchema: GtfAdapter_1.configSchema,
|
|
42
|
+
getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./GtfAdapter/GtfAdapter'))).then(r => r.default),
|
|
43
|
+
}));
|
|
44
|
+
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
45
|
+
return (file, index, adapterHint) => {
|
|
46
|
+
const regexGuess = /\.gtf(\.gz)?$/i;
|
|
47
|
+
const adapterName = 'GtfAdapter';
|
|
48
|
+
const fileName = (0, tracks_1.getFileName)(file);
|
|
49
|
+
const obj = {
|
|
71
50
|
type: adapterName,
|
|
72
51
|
gtfLocation: file,
|
|
73
52
|
};
|
|
@@ -80,8 +59,7 @@ var GtfPlugin = /** @class */ (function (_super) {
|
|
|
80
59
|
return adapterGuesser(file, index, adapterHint);
|
|
81
60
|
};
|
|
82
61
|
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
}(Plugin_1.default));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
86
64
|
exports.default = GtfPlugin;
|
|
87
65
|
//# 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,6CAAqE;AAErE,sDAAuE;AAEvE,MAAqB,SAAU,SAAQ,gBAAM;IAA7C;;QACE,SAAI,GAAG,WAAW,CAAA;IAsCpB,CAAC;IApCC,OAAO,CAAC,aAA4B;QAClC,aAAa,CAAC,cAAc,CAC1B,GAAG,EAAE,CACH,IAAI,qBAAW,CAAC;YACd,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,yBAAsB;YACpC,eAAe,EAAE,GAAG,EAAE,CACpB,kDAAO,yBAAyB,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SACzD,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,gBAAgB,CAAA;gBACnC,MAAM,WAAW,GAAG,YAAY,CAAA;gBAChC,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;gBAElC,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;AAvCD,4BAuCC"}
|
package/dist/util.js
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
3
|
exports.featureData = void 0;
|
|
15
4
|
function featureData(data) {
|
|
16
|
-
|
|
5
|
+
const f = { ...data };
|
|
17
6
|
f.start -= 1; // convert to interbase
|
|
18
7
|
f.strand = { '+': 1, '-': -1, '.': 0, '?': undefined }[data.strand]; // convert strand
|
|
19
8
|
f.phase = Number(data.frame);
|
|
@@ -24,7 +13,7 @@ function featureData(data) {
|
|
|
24
13
|
if (data.frame === null) {
|
|
25
14
|
delete f.score;
|
|
26
15
|
}
|
|
27
|
-
|
|
16
|
+
const defaultFields = [
|
|
28
17
|
'start',
|
|
29
18
|
'end',
|
|
30
19
|
'seq_name',
|
|
@@ -34,18 +23,18 @@ function featureData(data) {
|
|
|
34
23
|
'frame',
|
|
35
24
|
'strand',
|
|
36
25
|
];
|
|
37
|
-
Object.keys(data.attributes).forEach(
|
|
38
|
-
|
|
26
|
+
Object.keys(data.attributes).forEach(a => {
|
|
27
|
+
let b = a.toLowerCase();
|
|
39
28
|
if (defaultFields.includes(b)) {
|
|
40
29
|
// add "suffix" to tag name if it already exists
|
|
41
30
|
// reproduces behavior of NCList
|
|
42
31
|
b += '2';
|
|
43
32
|
}
|
|
44
33
|
if (data.attributes[a] !== null) {
|
|
45
|
-
|
|
34
|
+
let attr = data.attributes[a];
|
|
46
35
|
if (Array.isArray(attr) && attr.length === 1) {
|
|
47
36
|
// gtf uses double quotes for text values in the attributes column, remove them
|
|
48
|
-
|
|
37
|
+
const formattedAttr = attr[0].replace(/^"|"$/g, '');
|
|
49
38
|
attr = formattedAttr;
|
|
50
39
|
}
|
|
51
40
|
f[b] = attr;
|
|
@@ -56,7 +45,7 @@ function featureData(data) {
|
|
|
56
45
|
// the SimpleFeature constructor takes care of recursively inflating subfeatures
|
|
57
46
|
if (data.child_features && data.child_features.length) {
|
|
58
47
|
f.subfeatures = data.child_features
|
|
59
|
-
.map(
|
|
48
|
+
.map(childLocs => childLocs.map(childLoc => featureData(childLoc)))
|
|
60
49
|
.flat();
|
|
61
50
|
}
|
|
62
51
|
delete f.child_features;
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAaA,SAAgB,WAAW,CAAC,IAAgB;IAC1C,MAAM,CAAC,GAA4B,EAAE,GAAG,IAAI,EAAE,CAC7C;IAAC,CAAC,CAAC,KAAgB,IAAI,CAAC,CAAA,CAAC,uBAAuB;IACjD,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,iBAAiB;IACrF,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;IACzB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;QACvB,OAAO,CAAC,CAAC,KAAK,CAAA;KACf;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;QACvB,OAAO,CAAC,CAAC,KAAK,CAAA;KACf;IACD,MAAM,aAAa,GAAG;QACpB,OAAO;QACP,KAAK;QACL,UAAU;QACV,OAAO;QACP,aAAa;QACb,QAAQ;QACR,OAAO;QACP,QAAQ;KACT,CAAA;IACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;QACvB,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,gDAAgD;YAChD,gCAAgC;YAChC,CAAC,IAAI,GAAG,CAAA;SACT;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;YAC/B,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5C,+EAA+E;gBAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBACnD,IAAI,GAAG,aAAa,CAAA;aACrB;YACD,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;SACZ;IACH,CAAC,CAAC,CAAA;IACF,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAA;IACtB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,CAAA;IAEtB,gFAAgF;IAChF,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QACrD,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc;aAChC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;aAClE,IAAI,EAAE,CAAA;KACV;IAED,OAAO,CAAC,CAAC,cAAc,CAAA;IACvB,OAAO,CAAC,CAAC,IAAI,CAAA;IACb,OAAO,CAAC,CAAC,gBAAgB,CAAA;IACzB,gDAAgD;IAChD,OAAO,CAAC,CAAC,SAAS,CAAA;IAClB,OAAO,CAAC,CAAC,UAAU,CAAA;IACnB,OAAO,CAAC,CAAC,QAAQ,CAAA;IACjB,OAAO,CAAC,CAAC,WAAW,CAAA;IACpB,OAAO,CAAC,CAAC,KAAK,CAAA;IAEd,IAAI,CAAC,CAAC,aAAa,EAAE;QACnB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa,CAAA;KACzB;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AA/DD,kCA+DC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-gtf",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "JBrowse 2 gtf feature adapter",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -37,14 +37,13 @@
|
|
|
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/gtf": "^0.0.6"
|
|
44
43
|
},
|
|
45
44
|
"peerDependencies": {
|
|
46
|
-
"@jbrowse/core": "^
|
|
47
|
-
"@jbrowse/plugin-linear-genome-view": "^
|
|
45
|
+
"@jbrowse/core": "^2.0.0",
|
|
46
|
+
"@jbrowse/plugin-linear-genome-view": "^2.0.0",
|
|
48
47
|
"@mui/material": "^5.0.0",
|
|
49
48
|
"mobx": "^6.0.0",
|
|
50
49
|
"mobx-react": "^7.0.0",
|
|
@@ -59,5 +58,5 @@
|
|
|
59
58
|
"distModule": "esm/index.js",
|
|
60
59
|
"srcModule": "src/index.ts",
|
|
61
60
|
"module": "esm/index.js",
|
|
62
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "449b17325c9a4a97181f7ddddf48e80219f03b8d"
|
|
63
62
|
}
|