@jbrowse/plugin-bed 3.1.0 → 3.2.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.
- package/dist/BedGraphAdapter/BedGraphAdapter.js +3 -3
- package/dist/BedpeAdapter/BedpeAdapter.js +2 -2
- package/dist/BigBedAdapter/BigBedAdapter.d.ts +6 -1
- package/dist/BigBedAdapter/BigBedAdapter.js +29 -9
- package/esm/BedGraphAdapter/BedGraphAdapter.js +3 -3
- package/esm/BedpeAdapter/BedpeAdapter.js +2 -2
- package/esm/BigBedAdapter/BigBedAdapter.d.ts +6 -1
- package/esm/BigBedAdapter/BigBedAdapter.js +29 -9
- package/package.json +3 -3
|
@@ -119,9 +119,9 @@ class BedGraphAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
119
119
|
return (0, rxjs_1.ObservableCreate)(async (observer) => {
|
|
120
120
|
const { start, end, refName } = query;
|
|
121
121
|
const intervalTree = await this.loadFeatureIntervalTree(refName);
|
|
122
|
-
intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])
|
|
123
|
-
observer.next(
|
|
124
|
-
}
|
|
122
|
+
for (const feature of (intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])) || []) {
|
|
123
|
+
observer.next(feature);
|
|
124
|
+
}
|
|
125
125
|
observer.complete();
|
|
126
126
|
});
|
|
127
127
|
}
|
|
@@ -103,9 +103,9 @@ class BedpeAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
103
103
|
return (0, rxjs_1.ObservableCreate)(async (observer) => {
|
|
104
104
|
const { start, end, refName } = query;
|
|
105
105
|
const intervalTree = await this.loadFeatureTree(refName);
|
|
106
|
-
intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])
|
|
106
|
+
for (const f of (intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])) || []) {
|
|
107
107
|
observer.next(f);
|
|
108
|
-
}
|
|
108
|
+
}
|
|
109
109
|
observer.complete();
|
|
110
110
|
}, opts.stopToken);
|
|
111
111
|
}
|
|
@@ -9,7 +9,7 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
9
9
|
private cachedP?;
|
|
10
10
|
configurePre(opts?: BaseOptions): Promise<{
|
|
11
11
|
bigbed: BigBed;
|
|
12
|
-
header: import("@gmod/bbi").
|
|
12
|
+
header: import("@gmod/bbi/dist/types").BigWigHeaderWithRefNames;
|
|
13
13
|
parser: BED;
|
|
14
14
|
}>;
|
|
15
15
|
configure(opts?: BaseOptions): Promise<{
|
|
@@ -18,6 +18,11 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
18
18
|
parser: BED;
|
|
19
19
|
}>;
|
|
20
20
|
getRefNames(opts?: BaseOptions): Promise<string[]>;
|
|
21
|
+
getRefNameAliases(opts?: BaseOptions): Promise<{
|
|
22
|
+
refName: unknown;
|
|
23
|
+
aliases: unknown[];
|
|
24
|
+
override: boolean;
|
|
25
|
+
}[]>;
|
|
21
26
|
getData(): Promise<Feature[]>;
|
|
22
27
|
getHeader(opts?: BaseOptions): Promise<{
|
|
23
28
|
version: number;
|
|
@@ -40,6 +40,22 @@ class BigBedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
40
40
|
const { header } = await this.configure(opts);
|
|
41
41
|
return Object.keys(header.refsByName);
|
|
42
42
|
}
|
|
43
|
+
async getRefNameAliases(opts) {
|
|
44
|
+
const { header } = await this.configure(opts);
|
|
45
|
+
const ret = await Promise.all(Object.keys(header.refsByName).map(async (r) => (await (0, rxjs_2.firstValueFrom)(this.getFeatures({
|
|
46
|
+
assemblyName: '',
|
|
47
|
+
refName: r,
|
|
48
|
+
start: 0,
|
|
49
|
+
end: 1,
|
|
50
|
+
}).pipe((0, rxjs_2.toArray)())))[0]));
|
|
51
|
+
return ret
|
|
52
|
+
.map(r => r.toJSON())
|
|
53
|
+
.map(r => ({
|
|
54
|
+
refName: r.ucsc,
|
|
55
|
+
aliases: [r.ncbi, r.refseq, r.genbank],
|
|
56
|
+
override: true,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
43
59
|
async getData() {
|
|
44
60
|
const refNames = await this.getRefNames();
|
|
45
61
|
const features = [];
|
|
@@ -67,12 +83,11 @@ class BigBedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
67
83
|
}
|
|
68
84
|
async getFeaturesHelper({ query, opts, observer, allowRedispatch, originalQuery = query, }) {
|
|
69
85
|
var _a;
|
|
70
|
-
const {
|
|
86
|
+
const { statusCallback = () => { } } = opts;
|
|
71
87
|
const scoreColumn = this.getConf('scoreColumn');
|
|
72
88
|
const aggregateField = this.getConf('aggregateField');
|
|
73
89
|
const { parser, bigbed } = await (0, util_1.updateStatus)('Downloading header', statusCallback, () => this.configure(opts));
|
|
74
90
|
const feats = await (0, util_1.updateStatus)('Downloading features', statusCallback, () => bigbed.getFeatures(query.refName, query.start, query.end, {
|
|
75
|
-
stopToken,
|
|
76
91
|
basesPerSpan: query.end - query.start,
|
|
77
92
|
}));
|
|
78
93
|
if (allowRedispatch && feats.length) {
|
|
@@ -95,8 +110,8 @@ class BigBedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
95
110
|
await this.getFeaturesHelper({
|
|
96
111
|
query: {
|
|
97
112
|
...query,
|
|
98
|
-
start: minStart,
|
|
99
|
-
end: maxEnd,
|
|
113
|
+
start: minStart - 500000,
|
|
114
|
+
end: maxEnd + 500000,
|
|
100
115
|
},
|
|
101
116
|
opts,
|
|
102
117
|
observer,
|
|
@@ -148,16 +163,17 @@ class BigBedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
148
163
|
}
|
|
149
164
|
}
|
|
150
165
|
Object.entries(parentAggregation).map(([name, subfeatures]) => {
|
|
166
|
+
var _a, _b;
|
|
151
167
|
const s = (0, util_1.min)(subfeatures.map(f => f.start));
|
|
152
168
|
const e = (0, util_1.max)(subfeatures.map(f => f.end));
|
|
153
169
|
if ((0, util_1.doesIntersect2)(s, e, originalQuery.start, originalQuery.end)) {
|
|
154
|
-
const
|
|
170
|
+
const subs = subfeatures.sort((a, b) => a.uniqueId.localeCompare(b.uniqueId));
|
|
155
171
|
observer.next(new util_1.SimpleFeature({
|
|
156
|
-
id: `${this.id}-${uniqueId}-parent`,
|
|
172
|
+
id: `${this.id}-${(_a = subs[0]) === null || _a === void 0 ? void 0 : _a.uniqueId}-parent`,
|
|
157
173
|
data: {
|
|
158
174
|
type: 'gene',
|
|
159
|
-
subfeatures,
|
|
160
|
-
strand,
|
|
175
|
+
subfeatures: subs,
|
|
176
|
+
strand: ((_b = subs[0]) === null || _b === void 0 ? void 0 : _b.strand) || 1,
|
|
161
177
|
name,
|
|
162
178
|
start: s,
|
|
163
179
|
end: e,
|
|
@@ -172,7 +188,11 @@ class BigBedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
172
188
|
return (0, rxjs_1.ObservableCreate)(async (observer) => {
|
|
173
189
|
try {
|
|
174
190
|
await this.getFeaturesHelper({
|
|
175
|
-
query
|
|
191
|
+
query: {
|
|
192
|
+
...query,
|
|
193
|
+
start: query.start,
|
|
194
|
+
end: query.end,
|
|
195
|
+
},
|
|
176
196
|
opts,
|
|
177
197
|
observer,
|
|
178
198
|
allowRedispatch: true,
|
|
@@ -114,9 +114,9 @@ export default class BedGraphAdapter extends BaseFeatureDataAdapter {
|
|
|
114
114
|
return ObservableCreate(async (observer) => {
|
|
115
115
|
const { start, end, refName } = query;
|
|
116
116
|
const intervalTree = await this.loadFeatureIntervalTree(refName);
|
|
117
|
-
intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])
|
|
118
|
-
observer.next(
|
|
119
|
-
}
|
|
117
|
+
for (const feature of (intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])) || []) {
|
|
118
|
+
observer.next(feature);
|
|
119
|
+
}
|
|
120
120
|
observer.complete();
|
|
121
121
|
});
|
|
122
122
|
}
|
|
@@ -98,9 +98,9 @@ class BedpeAdapter extends BaseFeatureDataAdapter {
|
|
|
98
98
|
return ObservableCreate(async (observer) => {
|
|
99
99
|
const { start, end, refName } = query;
|
|
100
100
|
const intervalTree = await this.loadFeatureTree(refName);
|
|
101
|
-
intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])
|
|
101
|
+
for (const f of (intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end])) || []) {
|
|
102
102
|
observer.next(f);
|
|
103
|
-
}
|
|
103
|
+
}
|
|
104
104
|
observer.complete();
|
|
105
105
|
}, opts.stopToken);
|
|
106
106
|
}
|
|
@@ -9,7 +9,7 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
9
9
|
private cachedP?;
|
|
10
10
|
configurePre(opts?: BaseOptions): Promise<{
|
|
11
11
|
bigbed: BigBed;
|
|
12
|
-
header: import("@gmod/bbi").
|
|
12
|
+
header: import("@gmod/bbi/dist/types").BigWigHeaderWithRefNames;
|
|
13
13
|
parser: BED;
|
|
14
14
|
}>;
|
|
15
15
|
configure(opts?: BaseOptions): Promise<{
|
|
@@ -18,6 +18,11 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
18
18
|
parser: BED;
|
|
19
19
|
}>;
|
|
20
20
|
getRefNames(opts?: BaseOptions): Promise<string[]>;
|
|
21
|
+
getRefNameAliases(opts?: BaseOptions): Promise<{
|
|
22
|
+
refName: unknown;
|
|
23
|
+
aliases: unknown[];
|
|
24
|
+
override: boolean;
|
|
25
|
+
}[]>;
|
|
21
26
|
getData(): Promise<Feature[]>;
|
|
22
27
|
getHeader(opts?: BaseOptions): Promise<{
|
|
23
28
|
version: number;
|
|
@@ -35,6 +35,22 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
35
35
|
const { header } = await this.configure(opts);
|
|
36
36
|
return Object.keys(header.refsByName);
|
|
37
37
|
}
|
|
38
|
+
async getRefNameAliases(opts) {
|
|
39
|
+
const { header } = await this.configure(opts);
|
|
40
|
+
const ret = await Promise.all(Object.keys(header.refsByName).map(async (r) => (await firstValueFrom(this.getFeatures({
|
|
41
|
+
assemblyName: '',
|
|
42
|
+
refName: r,
|
|
43
|
+
start: 0,
|
|
44
|
+
end: 1,
|
|
45
|
+
}).pipe(toArray())))[0]));
|
|
46
|
+
return ret
|
|
47
|
+
.map(r => r.toJSON())
|
|
48
|
+
.map(r => ({
|
|
49
|
+
refName: r.ucsc,
|
|
50
|
+
aliases: [r.ncbi, r.refseq, r.genbank],
|
|
51
|
+
override: true,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
38
54
|
async getData() {
|
|
39
55
|
const refNames = await this.getRefNames();
|
|
40
56
|
const features = [];
|
|
@@ -62,12 +78,11 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
62
78
|
}
|
|
63
79
|
async getFeaturesHelper({ query, opts, observer, allowRedispatch, originalQuery = query, }) {
|
|
64
80
|
var _a;
|
|
65
|
-
const {
|
|
81
|
+
const { statusCallback = () => { } } = opts;
|
|
66
82
|
const scoreColumn = this.getConf('scoreColumn');
|
|
67
83
|
const aggregateField = this.getConf('aggregateField');
|
|
68
84
|
const { parser, bigbed } = await updateStatus('Downloading header', statusCallback, () => this.configure(opts));
|
|
69
85
|
const feats = await updateStatus('Downloading features', statusCallback, () => bigbed.getFeatures(query.refName, query.start, query.end, {
|
|
70
|
-
stopToken,
|
|
71
86
|
basesPerSpan: query.end - query.start,
|
|
72
87
|
}));
|
|
73
88
|
if (allowRedispatch && feats.length) {
|
|
@@ -90,8 +105,8 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
90
105
|
await this.getFeaturesHelper({
|
|
91
106
|
query: {
|
|
92
107
|
...query,
|
|
93
|
-
start: minStart,
|
|
94
|
-
end: maxEnd,
|
|
108
|
+
start: minStart - 500000,
|
|
109
|
+
end: maxEnd + 500000,
|
|
95
110
|
},
|
|
96
111
|
opts,
|
|
97
112
|
observer,
|
|
@@ -143,16 +158,17 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
143
158
|
}
|
|
144
159
|
}
|
|
145
160
|
Object.entries(parentAggregation).map(([name, subfeatures]) => {
|
|
161
|
+
var _a, _b;
|
|
146
162
|
const s = min(subfeatures.map(f => f.start));
|
|
147
163
|
const e = max(subfeatures.map(f => f.end));
|
|
148
164
|
if (doesIntersect2(s, e, originalQuery.start, originalQuery.end)) {
|
|
149
|
-
const
|
|
165
|
+
const subs = subfeatures.sort((a, b) => a.uniqueId.localeCompare(b.uniqueId));
|
|
150
166
|
observer.next(new SimpleFeature({
|
|
151
|
-
id: `${this.id}-${uniqueId}-parent`,
|
|
167
|
+
id: `${this.id}-${(_a = subs[0]) === null || _a === void 0 ? void 0 : _a.uniqueId}-parent`,
|
|
152
168
|
data: {
|
|
153
169
|
type: 'gene',
|
|
154
|
-
subfeatures,
|
|
155
|
-
strand,
|
|
170
|
+
subfeatures: subs,
|
|
171
|
+
strand: ((_b = subs[0]) === null || _b === void 0 ? void 0 : _b.strand) || 1,
|
|
156
172
|
name,
|
|
157
173
|
start: s,
|
|
158
174
|
end: e,
|
|
@@ -167,7 +183,11 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
|
|
|
167
183
|
return ObservableCreate(async (observer) => {
|
|
168
184
|
try {
|
|
169
185
|
await this.getFeaturesHelper({
|
|
170
|
-
query
|
|
186
|
+
query: {
|
|
187
|
+
...query,
|
|
188
|
+
start: query.start,
|
|
189
|
+
end: query.end,
|
|
190
|
+
},
|
|
171
191
|
opts,
|
|
172
192
|
observer,
|
|
173
193
|
allowRedispatch: true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-bed",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "JBrowse 2 bed adapters, tracks, etc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@gmod/bed": "^2.1.2",
|
|
42
42
|
"@gmod/bgzf-filehandle": "^2.0.1",
|
|
43
43
|
"@gmod/tabix": "^2.0.0",
|
|
44
|
-
"@jbrowse/core": "^3.
|
|
44
|
+
"@jbrowse/core": "^3.2.0",
|
|
45
45
|
"mobx": "^6.0.0",
|
|
46
46
|
"mobx-react": "^9.0.0",
|
|
47
47
|
"mobx-state-tree": "^5.0.0",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"distModule": "esm/index.js",
|
|
54
54
|
"srcModule": "src/index.ts",
|
|
55
55
|
"module": "esm/index.js",
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "c750e3f56706a490c19ba75abd807fec5e38aebf"
|
|
57
57
|
}
|