@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.
@@ -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]).forEach(f => {
123
- observer.next(f);
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]).forEach(f => {
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").Header;
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 { stopToken, statusCallback = () => { } } = opts;
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 { uniqueId, strand } = subfeatures[0];
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]).forEach(f => {
118
- observer.next(f);
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]).forEach(f => {
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").Header;
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 { stopToken, statusCallback = () => { } } = opts;
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 { uniqueId, strand } = subfeatures[0];
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.1.0",
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.1.0",
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": "91492049ddea0aed90eb24d3c066c2d9f5a6b189"
56
+ "gitHead": "c750e3f56706a490c19ba75abd807fec5e38aebf"
57
57
  }