@jbrowse/plugin-bed 2.16.1 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/BedAdapter/BedAdapter.d.ts +15 -5
  2. package/dist/BedAdapter/BedAdapter.js +17 -13
  3. package/dist/BedAdapter/configSchema.d.ts +0 -21
  4. package/dist/BedAdapter/configSchema.js +1 -25
  5. package/dist/BedAdapter/index.d.ts +1 -1
  6. package/dist/BedGraphAdapter/BedGraphAdapter.d.ts +24 -0
  7. package/dist/BedGraphAdapter/BedGraphAdapter.js +130 -0
  8. package/dist/BedGraphAdapter/configSchema.d.ts +15 -0
  9. package/dist/BedGraphAdapter/configSchema.js +19 -0
  10. package/dist/BedGraphAdapter/index.d.ts +2 -0
  11. package/dist/BedGraphAdapter/index.js +39 -0
  12. package/dist/BedGraphTabixAdapter/BedGraphTabixAdapter.d.ts +18 -0
  13. package/dist/BedGraphTabixAdapter/BedGraphTabixAdapter.js +105 -0
  14. package/dist/BedGraphTabixAdapter/configSchema.d.ts +29 -0
  15. package/dist/BedGraphTabixAdapter/configSchema.js +34 -0
  16. package/dist/BedGraphTabixAdapter/index.d.ts +2 -0
  17. package/dist/BedGraphTabixAdapter/index.js +39 -0
  18. package/dist/BedTabixAdapter/BedTabixAdapter.d.ts +6 -5
  19. package/dist/BedTabixAdapter/BedTabixAdapter.js +23 -9
  20. package/dist/BedTabixAdapter/configSchema.d.ts +0 -18
  21. package/dist/BedTabixAdapter/configSchema.js +1 -22
  22. package/dist/BedTabixAdapter/index.d.ts +1 -1
  23. package/dist/BedpeAdapter/BedpeAdapter.d.ts +4 -2
  24. package/dist/BedpeAdapter/BedpeAdapter.js +7 -9
  25. package/dist/BedpeAdapter/configSchema.d.ts +0 -7
  26. package/dist/BedpeAdapter/configSchema.js +1 -12
  27. package/dist/BedpeAdapter/index.d.ts +1 -1
  28. package/dist/BigBedAdapter/BigBedAdapter.d.ts +14 -6
  29. package/dist/BigBedAdapter/BigBedAdapter.js +72 -62
  30. package/dist/BigBedAdapter/configSchema.d.ts +0 -9
  31. package/dist/BigBedAdapter/configSchema.js +1 -13
  32. package/dist/BigBedAdapter/index.d.ts +1 -1
  33. package/dist/generateBedMethylFeature.d.ts +31 -0
  34. package/dist/generateBedMethylFeature.js +30 -0
  35. package/dist/generateRepeatMaskerFeature.d.ts +51 -0
  36. package/dist/generateRepeatMaskerFeature.js +41 -0
  37. package/dist/generateUcscTranscript.d.ts +15 -0
  38. package/dist/generateUcscTranscript.js +95 -0
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +8 -4
  41. package/dist/types.d.ts +18 -0
  42. package/dist/types.js +2 -0
  43. package/dist/util.d.ts +184 -29
  44. package/dist/util.js +134 -156
  45. package/esm/BedAdapter/BedAdapter.d.ts +15 -5
  46. package/esm/BedAdapter/BedAdapter.js +18 -14
  47. package/esm/BedAdapter/configSchema.d.ts +0 -21
  48. package/esm/BedAdapter/configSchema.js +1 -25
  49. package/esm/BedAdapter/index.d.ts +1 -1
  50. package/esm/BedGraphAdapter/BedGraphAdapter.d.ts +24 -0
  51. package/esm/BedGraphAdapter/BedGraphAdapter.js +124 -0
  52. package/esm/BedGraphAdapter/configSchema.d.ts +15 -0
  53. package/esm/BedGraphAdapter/configSchema.js +17 -0
  54. package/esm/BedGraphAdapter/index.d.ts +2 -0
  55. package/esm/BedGraphAdapter/index.js +10 -0
  56. package/esm/BedGraphTabixAdapter/BedGraphTabixAdapter.d.ts +18 -0
  57. package/esm/BedGraphTabixAdapter/BedGraphTabixAdapter.js +102 -0
  58. package/esm/BedGraphTabixAdapter/configSchema.d.ts +29 -0
  59. package/esm/BedGraphTabixAdapter/configSchema.js +32 -0
  60. package/esm/BedGraphTabixAdapter/index.d.ts +2 -0
  61. package/esm/BedGraphTabixAdapter/index.js +10 -0
  62. package/esm/BedTabixAdapter/BedTabixAdapter.d.ts +6 -5
  63. package/esm/BedTabixAdapter/BedTabixAdapter.js +23 -9
  64. package/esm/BedTabixAdapter/configSchema.d.ts +0 -18
  65. package/esm/BedTabixAdapter/configSchema.js +1 -22
  66. package/esm/BedTabixAdapter/index.d.ts +1 -1
  67. package/esm/BedpeAdapter/BedpeAdapter.d.ts +4 -2
  68. package/esm/BedpeAdapter/BedpeAdapter.js +8 -10
  69. package/esm/BedpeAdapter/configSchema.d.ts +0 -7
  70. package/esm/BedpeAdapter/configSchema.js +1 -12
  71. package/esm/BedpeAdapter/index.d.ts +1 -1
  72. package/esm/BigBedAdapter/BigBedAdapter.d.ts +14 -6
  73. package/esm/BigBedAdapter/BigBedAdapter.js +74 -64
  74. package/esm/BigBedAdapter/configSchema.d.ts +0 -9
  75. package/esm/BigBedAdapter/configSchema.js +1 -13
  76. package/esm/BigBedAdapter/index.d.ts +1 -1
  77. package/esm/generateBedMethylFeature.d.ts +31 -0
  78. package/esm/generateBedMethylFeature.js +26 -0
  79. package/esm/generateRepeatMaskerFeature.d.ts +51 -0
  80. package/esm/generateRepeatMaskerFeature.js +37 -0
  81. package/esm/generateUcscTranscript.d.ts +15 -0
  82. package/esm/generateUcscTranscript.js +91 -0
  83. package/esm/index.d.ts +1 -1
  84. package/esm/index.js +8 -4
  85. package/esm/types.d.ts +18 -0
  86. package/esm/types.js +1 -0
  87. package/esm/util.d.ts +184 -29
  88. package/esm/util.js +132 -154
  89. package/package.json +2 -2
@@ -1,2 +1,2 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
2
  export default function BedpeAdapterF(pluginManager: PluginManager): void;
@@ -1,11 +1,12 @@
1
1
  import { BigBed } from '@gmod/bbi';
2
2
  import BED from '@gmod/bed';
3
- import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
4
- import { Region } from '@jbrowse/core/util/types';
5
- import { Feature } from '@jbrowse/core/util';
6
- import { Observer } from 'rxjs';
3
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
4
+ import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
5
+ import type { Feature } from '@jbrowse/core/util';
6
+ import type { Region } from '@jbrowse/core/util/types';
7
+ import type { Observer } from 'rxjs';
7
8
  export default class BigBedAdapter extends BaseFeatureDataAdapter {
8
- private cached?;
9
+ private cachedP?;
9
10
  configurePre(opts?: BaseOptions): Promise<{
10
11
  bigbed: BigBed;
11
12
  header: import("@gmod/bbi").Header;
@@ -17,6 +18,7 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
17
18
  parser: BED;
18
19
  }>;
19
20
  getRefNames(opts?: BaseOptions): Promise<string[]>;
21
+ getData(): Promise<Feature[]>;
20
22
  getHeader(opts?: BaseOptions): Promise<{
21
23
  version: number;
22
24
  fileType: string;
@@ -25,7 +27,13 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
25
27
  [k: string]: string;
26
28
  };
27
29
  }>;
28
- getFeaturesHelper(query: Region, opts: BaseOptions, observer: Observer<Feature>, allowRedispatch: boolean, originalQuery?: Region): Promise<void>;
30
+ getFeaturesHelper({ query, opts, observer, allowRedispatch, originalQuery, }: {
31
+ query: Region;
32
+ opts: BaseOptions;
33
+ observer: Observer<Feature>;
34
+ allowRedispatch: boolean;
35
+ originalQuery?: Region;
36
+ }): Promise<void>;
29
37
  getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
30
38
  freeResources(): void;
31
39
  }
@@ -1,11 +1,11 @@
1
1
  import { BigBed } from '@gmod/bbi';
2
2
  import BED from '@gmod/bed';
3
- import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
3
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
4
+ import { SimpleFeature, doesIntersect2, max, min } from '@jbrowse/core/util';
4
5
  import { openLocation } from '@jbrowse/core/util/io';
5
6
  import { ObservableCreate } from '@jbrowse/core/util/rxjs';
6
- import { doesIntersect2, max, min, SimpleFeature, } from '@jbrowse/core/util';
7
- // locals
8
- import { isUcscProcessedTranscript, makeBlocks, ucscProcessedTranscript, } from '../util';
7
+ import { firstValueFrom, toArray } from 'rxjs';
8
+ import { featureData2 } from '../util';
9
9
  export default class BigBedAdapter extends BaseFeatureDataAdapter {
10
10
  async configurePre(opts) {
11
11
  const pm = this.pluginManager;
@@ -13,22 +13,42 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
13
13
  filehandle: openLocation(this.getConf('bigBedLocation'), pm),
14
14
  });
15
15
  const header = await bigbed.getHeader(opts);
16
- const parser = new BED({ autoSql: header.autoSql });
17
- return { bigbed, header, parser };
16
+ const parser = new BED({
17
+ autoSql: header.autoSql,
18
+ });
19
+ return {
20
+ bigbed,
21
+ header,
22
+ parser,
23
+ };
18
24
  }
19
25
  async configure(opts) {
20
- if (!this.cached) {
21
- this.cached = this.configurePre(opts).catch((e) => {
22
- this.cached = undefined;
26
+ if (!this.cachedP) {
27
+ this.cachedP = this.configurePre(opts).catch((e) => {
28
+ this.cachedP = undefined;
23
29
  throw e;
24
30
  });
25
31
  }
26
- return this.cached;
32
+ return this.cachedP;
27
33
  }
28
34
  async getRefNames(opts) {
29
35
  const { header } = await this.configure(opts);
30
36
  return Object.keys(header.refsByName);
31
37
  }
38
+ async getData() {
39
+ const refNames = await this.getRefNames();
40
+ const features = [];
41
+ for (const refName of refNames) {
42
+ const f = await firstValueFrom(this.getFeatures({
43
+ assemblyName: 'unknown',
44
+ refName,
45
+ start: 0,
46
+ end: Number.MAX_SAFE_INTEGER,
47
+ }).pipe(toArray()));
48
+ features.push(f);
49
+ }
50
+ return features.flat();
51
+ }
32
52
  async getHeader(opts) {
33
53
  const { parser, header } = await this.configure(opts);
34
54
  const { version, fileType } = header;
@@ -40,13 +60,14 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
40
60
  fields: Object.fromEntries(fields.map(({ name, comment }) => [name, comment])),
41
61
  };
42
62
  }
43
- async getFeaturesHelper(query, opts, observer, allowRedispatch, originalQuery = query) {
44
- const { signal } = opts;
63
+ async getFeaturesHelper({ query, opts, observer, allowRedispatch, originalQuery = query, }) {
64
+ var _a;
65
+ const { stopToken } = opts;
45
66
  const scoreColumn = this.getConf('scoreColumn');
46
67
  const aggregateField = this.getConf('aggregateField');
47
68
  const { parser, bigbed } = await this.configure(opts);
48
69
  const feats = await bigbed.getFeatures(query.refName, query.start, query.end, {
49
- signal,
70
+ stopToken,
50
71
  basesPerSpan: query.end - query.start,
51
72
  });
52
73
  if (allowRedispatch && feats.length) {
@@ -61,7 +82,17 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
61
82
  }
62
83
  }
63
84
  if (maxEnd > query.end || minStart < query.start) {
64
- await this.getFeaturesHelper({ ...query, start: minStart, end: maxEnd }, opts, observer, false, query);
85
+ await this.getFeaturesHelper({
86
+ query: {
87
+ ...query,
88
+ start: minStart,
89
+ end: maxEnd,
90
+ },
91
+ opts,
92
+ observer,
93
+ allowRedispatch: false,
94
+ originalQuery: query,
95
+ });
65
96
  return;
66
97
  }
67
98
  }
@@ -70,62 +101,36 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
70
101
  throw new Error('found uniqueId undefined');
71
102
  }
72
103
  for (const feat of feats) {
73
- const data = parser.parseLine(`${query.refName}\t${feat.start}\t${feat.end}\t${feat.rest}`, { uniqueId: feat.uniqueId });
104
+ const splitLine = [
105
+ query.refName,
106
+ `${feat.start}`,
107
+ `${feat.end}`,
108
+ ...(((_a = feat.rest) === null || _a === void 0 ? void 0 : _a.split('\t')) || []),
109
+ ];
110
+ const data = parser.parseLine(splitLine, { uniqueId: feat.uniqueId });
74
111
  const aggr = data[aggregateField];
75
112
  if (!parentAggregation[aggr]) {
76
113
  parentAggregation[aggr] = [];
77
114
  }
78
- const { uniqueId, type, chromStart, chromStarts, blockStarts, blockCount, blockSizes, chromEnd, thickStart, thickEnd, chrom, score, ...rest } = data;
79
- const subfeatures = blockCount
80
- ? makeBlocks({
81
- chromStarts,
82
- blockStarts,
83
- blockCount,
84
- blockSizes,
85
- uniqueId,
86
- refName: query.refName,
87
- start: feat.start,
88
- })
89
- : [];
90
- if (isUcscProcessedTranscript(data)) {
91
- const f = ucscProcessedTranscript({
92
- ...rest,
93
- uniqueId,
94
- type,
95
- start: feat.start,
96
- end: feat.end,
97
- refName: query.refName,
98
- score: scoreColumn ? +data[scoreColumn] : score,
99
- chromStarts,
100
- blockCount,
101
- blockSizes,
102
- thickStart,
103
- thickEnd,
104
- subfeatures,
105
- });
106
- if (aggr) {
107
- parentAggregation[aggr].push(f);
108
- }
109
- else {
110
- if (doesIntersect2(f.start, f.end, originalQuery.start, originalQuery.end)) {
111
- observer.next(new SimpleFeature({ id: `${this.id}-${uniqueId}`, data: f }));
112
- }
113
- }
115
+ const { uniqueId, type, chrom, chromStart, chromEnd, description, chromStarts: chromStarts2, blockStarts: blockStarts2, blockSizes: blockSizes2, score: score2, blockCount, thickStart, thickEnd, strand, ...rest } = data;
116
+ const f = featureData2({
117
+ ...rest,
118
+ scoreColumn,
119
+ splitLine,
120
+ parser,
121
+ uniqueId,
122
+ start: feat.start,
123
+ end: feat.end,
124
+ refName: query.refName,
125
+ });
126
+ if (aggr) {
127
+ parentAggregation[aggr].push(f);
114
128
  }
115
129
  else {
116
- if (doesIntersect2(feat.start, feat.end, originalQuery.start, originalQuery.end)) {
130
+ if (doesIntersect2(f.start, f.end, originalQuery.start, originalQuery.end)) {
117
131
  observer.next(new SimpleFeature({
118
132
  id: `${this.id}-${uniqueId}`,
119
- data: {
120
- ...rest,
121
- uniqueId,
122
- type,
123
- start: feat.start,
124
- score: scoreColumn ? +data[scoreColumn] : score,
125
- end: feat.end,
126
- refName: query.refName,
127
- subfeatures,
128
- },
133
+ data: f,
129
134
  }));
130
135
  }
131
136
  }
@@ -154,12 +159,17 @@ export default class BigBedAdapter extends BaseFeatureDataAdapter {
154
159
  getFeatures(query, opts = {}) {
155
160
  return ObservableCreate(async (observer) => {
156
161
  try {
157
- await this.getFeaturesHelper(query, opts, observer, true);
162
+ await this.getFeaturesHelper({
163
+ query,
164
+ opts,
165
+ observer,
166
+ allowRedispatch: true,
167
+ });
158
168
  }
159
169
  catch (e) {
160
170
  observer.error(e);
161
171
  }
162
- }, opts.signal);
172
+ }, opts.stopToken);
163
173
  }
164
174
  freeResources() { }
165
175
  }
@@ -1,7 +1,4 @@
1
1
  declare const BigBedAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
- /**
3
- * #slot
4
- */
5
2
  bigBedLocation: {
6
3
  type: string;
7
4
  defaultValue: {
@@ -9,17 +6,11 @@ declare const BigBedAdapter: import("@jbrowse/core/configuration/configurationSc
9
6
  locationType: string;
10
7
  };
11
8
  };
12
- /**
13
- * #slot
14
- */
15
9
  scoreColumn: {
16
10
  type: string;
17
11
  description: string;
18
12
  defaultValue: string;
19
13
  };
20
- /**
21
- * #slot
22
- */
23
14
  aggregateField: {
24
15
  type: string;
25
16
  description: string;
@@ -1,27 +1,15 @@
1
1
  import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
- /**
3
- * #config BigBedAdapter
4
- */
5
- function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
2
+ function x() { }
6
3
  const BigBedAdapter = ConfigurationSchema('BigBedAdapter', {
7
- /**
8
- * #slot
9
- */
10
4
  bigBedLocation: {
11
5
  type: 'fileLocation',
12
6
  defaultValue: { uri: '/path/to/my.bb', locationType: 'UriLocation' },
13
7
  },
14
- /**
15
- * #slot
16
- */
17
8
  scoreColumn: {
18
9
  type: 'string',
19
10
  description: 'The column to use as a "score" attribute',
20
11
  defaultValue: '',
21
12
  },
22
- /**
23
- * #slot
24
- */
25
13
  aggregateField: {
26
14
  type: 'string',
27
15
  description: 'An attribute to aggregate features with',
@@ -1,2 +1,2 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
2
  export default function BigBedAdapterF(pluginManager: PluginManager): void;
@@ -0,0 +1,31 @@
1
+ export declare function isBedMethylFeature({ splitLine, start, end, }: {
2
+ splitLine: string[];
3
+ start: number;
4
+ end: number;
5
+ }): boolean;
6
+ export declare function generateBedMethylFeature({ splitLine, uniqueId, refName, start, end, }: {
7
+ splitLine: string[];
8
+ uniqueId: string;
9
+ refName: string;
10
+ start: number;
11
+ end: number;
12
+ }): {
13
+ uniqueId: string;
14
+ refName: string;
15
+ start: number;
16
+ end: number;
17
+ code: string | undefined;
18
+ score: number;
19
+ strand: string | undefined;
20
+ color: string | undefined;
21
+ source: string | undefined;
22
+ n_valid_cov: string | undefined;
23
+ fraction_modified: string | undefined;
24
+ n_mod: string | undefined;
25
+ n_canonical: string | undefined;
26
+ n_other_mod: string | undefined;
27
+ n_delete: string | undefined;
28
+ n_fail: string | undefined;
29
+ n_diff: string | undefined;
30
+ n_nocall: string | undefined;
31
+ };
@@ -0,0 +1,26 @@
1
+ export function isBedMethylFeature({ splitLine, start, end, }) {
2
+ return +(splitLine[6] || 0) === start && +(splitLine[7] || 0) === end;
3
+ }
4
+ export function generateBedMethylFeature({ splitLine, uniqueId, refName, start, end, }) {
5
+ const [, , , code, , strand, , , color, n_valid_cov, fraction_modified, n_mod, n_canonical, n_other_mod, n_delete, n_fail, n_diff, n_nocall,] = splitLine;
6
+ return {
7
+ uniqueId,
8
+ refName,
9
+ start,
10
+ end,
11
+ code,
12
+ score: +fraction_modified || 0,
13
+ strand,
14
+ color,
15
+ source: code,
16
+ n_valid_cov,
17
+ fraction_modified,
18
+ n_mod,
19
+ n_canonical,
20
+ n_other_mod,
21
+ n_delete,
22
+ n_fail,
23
+ n_diff,
24
+ n_nocall,
25
+ };
26
+ }
@@ -0,0 +1,51 @@
1
+ export declare function isRepeatMaskerDescriptionField(desc?: string): desc is string;
2
+ export declare function generateRepeatMaskerFeature({ uniqueId, refName, start, end, description, ...rest }: {
3
+ uniqueId: string;
4
+ refName: string;
5
+ start: number;
6
+ end: number;
7
+ description: string;
8
+ [key: string]: unknown;
9
+ }): {
10
+ uniqueId: string;
11
+ refName: string;
12
+ start: number;
13
+ end: number;
14
+ bitsw_score: string | undefined;
15
+ percent_div: string | undefined;
16
+ percent_del: string | undefined;
17
+ percent_ins: string | undefined;
18
+ query_chr: string | undefined;
19
+ query_begin: string | undefined;
20
+ query_end: string | undefined;
21
+ query_remaining: string | undefined;
22
+ orientation: string | undefined;
23
+ matching_repeat_name: string | undefined;
24
+ matching_repeat_class: string | undefined;
25
+ matching_repeat_begin: string | undefined;
26
+ matching_repeat_end: string | undefined;
27
+ matching_repeat_remaining: string | undefined;
28
+ repeat_id: string | undefined;
29
+ description?: undefined;
30
+ } | {
31
+ uniqueId: string;
32
+ refName: string;
33
+ start: number;
34
+ end: number;
35
+ description: undefined;
36
+ bitsw_score?: undefined;
37
+ percent_div?: undefined;
38
+ percent_del?: undefined;
39
+ percent_ins?: undefined;
40
+ query_chr?: undefined;
41
+ query_begin?: undefined;
42
+ query_end?: undefined;
43
+ query_remaining?: undefined;
44
+ orientation?: undefined;
45
+ matching_repeat_name?: undefined;
46
+ matching_repeat_class?: undefined;
47
+ matching_repeat_begin?: undefined;
48
+ matching_repeat_end?: undefined;
49
+ matching_repeat_remaining?: undefined;
50
+ repeat_id?: undefined;
51
+ };
@@ -0,0 +1,37 @@
1
+ export function isRepeatMaskerDescriptionField(desc) {
2
+ const ret = desc === null || desc === void 0 ? void 0 : desc.trim().split(' ');
3
+ return [0, 1, 2, 3, 5, 6].every(s => (ret === null || ret === void 0 ? void 0 : ret[s]) !== undefined ? !Number.isNaN(+ret[s]) : false);
4
+ }
5
+ function makeRepeatTrackDescription(description) {
6
+ if (isRepeatMaskerDescriptionField(description)) {
7
+ const [bitsw_score, percent_div, percent_del, percent_ins, query_chr, query_begin, query_end, query_remaining, orientation, matching_repeat_name, matching_repeat_class, matching_repeat_begin, matching_repeat_end, matching_repeat_remaining, repeat_id,] = description.trim().split(' ');
8
+ return {
9
+ bitsw_score,
10
+ percent_div,
11
+ percent_del,
12
+ percent_ins,
13
+ query_chr,
14
+ query_begin,
15
+ query_end,
16
+ query_remaining,
17
+ orientation,
18
+ matching_repeat_name,
19
+ matching_repeat_class,
20
+ matching_repeat_begin,
21
+ matching_repeat_end,
22
+ matching_repeat_remaining,
23
+ repeat_id,
24
+ };
25
+ }
26
+ return { description };
27
+ }
28
+ export function generateRepeatMaskerFeature({ uniqueId, refName, start, end, description, ...rest }) {
29
+ return {
30
+ ...rest,
31
+ ...makeRepeatTrackDescription(description),
32
+ uniqueId,
33
+ refName,
34
+ start,
35
+ end,
36
+ };
37
+ }
@@ -0,0 +1,15 @@
1
+ import type { MinimalFeature, TranscriptFeat } from './types';
2
+ export declare function isUcscTranscript({ thickStart, blockCount, strand, }: {
3
+ thickStart?: number;
4
+ blockCount?: number;
5
+ strand?: number;
6
+ }): boolean | 0 | undefined;
7
+ export declare function generateUcscTranscript(data: TranscriptFeat): {
8
+ uniqueId: string;
9
+ strand: number;
10
+ type: string;
11
+ refName: string;
12
+ subfeatures: MinimalFeature[];
13
+ start: number;
14
+ end: number;
15
+ };
@@ -0,0 +1,91 @@
1
+ export function isUcscTranscript({ thickStart, blockCount, strand, }) {
2
+ return thickStart && blockCount && strand !== 0;
3
+ }
4
+ export function generateUcscTranscript(data) {
5
+ const { strand = 0, chrom: _1, chromStart: _2, chromEnd: _3, chromStarts, blockStarts, blockSizes, uniqueId, ...rest } = data;
6
+ const { subfeatures: oldSubfeatures, thickStart, thickEnd, blockCount, refName, ...rest2 } = rest;
7
+ const subfeatures = [];
8
+ const feats = oldSubfeatures
9
+ .filter(child => child.type === 'block')
10
+ .sort((a, b) => a.start - b.start);
11
+ for (const block of feats) {
12
+ const start = block.start;
13
+ const end = block.end;
14
+ if (thickStart >= end) {
15
+ subfeatures.push({
16
+ type: `${strand > 0 ? 'five' : 'three'}_prime_UTR`,
17
+ start,
18
+ end,
19
+ refName,
20
+ });
21
+ }
22
+ else if (thickStart > start && thickStart < end && thickEnd >= end) {
23
+ subfeatures.push({
24
+ type: `${strand > 0 ? 'five' : 'three'}_prime_UTR`,
25
+ start,
26
+ end: thickStart,
27
+ refName,
28
+ }, {
29
+ type: 'CDS',
30
+ start: thickStart,
31
+ end,
32
+ refName,
33
+ });
34
+ }
35
+ else if (thickStart <= start && thickEnd >= end) {
36
+ subfeatures.push({
37
+ type: 'CDS',
38
+ start,
39
+ end,
40
+ refName,
41
+ });
42
+ }
43
+ else if (thickStart > start && thickStart < end && thickEnd < end) {
44
+ subfeatures.push({
45
+ type: `${strand > 0 ? 'five' : 'three'}_prime_UTR`,
46
+ start,
47
+ end: thickStart,
48
+ refName,
49
+ }, {
50
+ type: 'CDS',
51
+ start: thickStart,
52
+ end: thickEnd,
53
+ refName,
54
+ }, {
55
+ type: `${strand > 0 ? 'three' : 'five'}_prime_UTR`,
56
+ start: thickEnd,
57
+ end,
58
+ refName,
59
+ });
60
+ }
61
+ else if (thickStart <= start && thickEnd > start && thickEnd < end) {
62
+ subfeatures.push({
63
+ type: 'CDS',
64
+ start,
65
+ end: thickEnd,
66
+ refName,
67
+ }, {
68
+ type: `${strand > 0 ? 'three' : 'five'}_prime_UTR`,
69
+ start: thickEnd,
70
+ end,
71
+ refName,
72
+ });
73
+ }
74
+ else if (thickEnd <= start) {
75
+ subfeatures.push({
76
+ type: `${strand > 0 ? 'three' : 'five'}_prime_UTR`,
77
+ start,
78
+ end,
79
+ refName,
80
+ });
81
+ }
82
+ }
83
+ return {
84
+ ...rest2,
85
+ uniqueId,
86
+ strand,
87
+ type: 'mRNA',
88
+ refName,
89
+ subfeatures,
90
+ };
91
+ }
package/esm/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Plugin from '@jbrowse/core/Plugin';
2
- import PluginManager from '@jbrowse/core/PluginManager';
2
+ import type PluginManager from '@jbrowse/core/PluginManager';
3
3
  export default class BedPlugin extends Plugin {
4
4
  name: string;
5
5
  install(pluginManager: PluginManager): void;
package/esm/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import Plugin from '@jbrowse/core/Plugin';
2
- import BigBedAdapterF from './BigBedAdapter';
3
- import BedpeAdapterF from './BedpeAdapter';
4
- import BedTabixAdapterF from './BedTabixAdapter';
5
- import BedAdapterF from './BedAdapter';
6
2
  import { getFileName, makeIndex, makeIndexType, } from '@jbrowse/core/util/tracks';
3
+ import BedAdapterF from './BedAdapter';
4
+ import BedGraphAdapterF from './BedGraphAdapter';
5
+ import BedGraphTabixAdapterF from './BedGraphTabixAdapter';
6
+ import BedTabixAdapterF from './BedTabixAdapter';
7
+ import BedpeAdapterF from './BedpeAdapter';
8
+ import BigBedAdapterF from './BigBedAdapter';
7
9
  export default class BedPlugin extends Plugin {
8
10
  constructor() {
9
11
  super(...arguments);
@@ -14,6 +16,8 @@ export default class BedPlugin extends Plugin {
14
16
  BedAdapterF(pluginManager);
15
17
  BedpeAdapterF(pluginManager);
16
18
  BedTabixAdapterF(pluginManager);
19
+ BedGraphAdapterF(pluginManager);
20
+ BedGraphTabixAdapterF(pluginManager);
17
21
  pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
18
22
  return (file, index, adapterHint) => {
19
23
  const regexGuess = /\.(bb|bigbed)$/i;
package/esm/types.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ export interface MinimalFeature {
2
+ type: string;
3
+ start: number;
4
+ end: number;
5
+ refName: string;
6
+ [key: string]: unknown;
7
+ }
8
+ export interface TranscriptFeat extends MinimalFeature {
9
+ uniqueId: string;
10
+ thickStart: number;
11
+ thickEnd: number;
12
+ blockCount: number;
13
+ blockSizes: number[];
14
+ chromStarts: number[];
15
+ refName: string;
16
+ strand?: number;
17
+ subfeatures: MinimalFeature[];
18
+ }
package/esm/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};