@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,7 +1,8 @@
1
- import BED from '@gmod/bed';
2
- import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
3
- import { Region, Feature } from '@jbrowse/core/util';
4
1
  import IntervalTree from '@flatten-js/interval-tree';
2
+ import BED from '@gmod/bed';
3
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
4
+ import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
5
+ import type { Feature, Region } from '@jbrowse/core/util';
5
6
  export default class BedAdapter extends BaseFeatureDataAdapter {
6
7
  protected bedFeatures?: Promise<{
7
8
  header: string;
@@ -16,12 +17,21 @@ export default class BedAdapter extends BaseFeatureDataAdapter {
16
17
  protected intervalTrees: Record<string, Promise<IntervalTree | undefined> | undefined>;
17
18
  static capabilities: string[];
18
19
  private loadDataP;
19
- private loadData;
20
+ loadData(opts?: BaseOptions): Promise<{
21
+ header: string;
22
+ features: Record<string, string[]>;
23
+ parser: BED;
24
+ columnNames: string[];
25
+ scoreColumn: string;
26
+ colRef: number;
27
+ colStart: number;
28
+ colEnd: number;
29
+ }>;
20
30
  getRefNames(opts?: BaseOptions): Promise<string[]>;
21
31
  getHeader(opts?: BaseOptions): Promise<string>;
22
32
  getNames(): Promise<string[] | undefined>;
23
33
  private loadFeatureIntervalTreeHelper;
24
- private loadFeatureIntervalTree;
34
+ loadFeatureIntervalTree(refName: string): Promise<IntervalTree<any> | undefined>;
25
35
  getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
26
36
  freeResources(): void;
27
37
  }
@@ -3,14 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
6
7
  const bed_1 = __importDefault(require("@gmod/bed"));
7
8
  const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
9
+ const util_1 = require("@jbrowse/core/util");
8
10
  const io_1 = require("@jbrowse/core/util/io");
9
11
  const rxjs_1 = require("@jbrowse/core/util/rxjs");
10
- const util_1 = require("@jbrowse/core/util");
11
- const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
12
- const bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
13
- // locals
14
12
  const util_2 = require("../util");
15
13
  class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
16
14
  constructor() {
@@ -20,9 +18,7 @@ class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
20
18
  async loadDataP(opts = {}) {
21
19
  const pm = this.pluginManager;
22
20
  const bedLoc = this.getConf('bedLocation');
23
- const buf = await (0, io_1.openLocation)(bedLoc, pm).readFile(opts);
24
- const buffer = (0, util_1.isGzip)(buf) ? await (0, bgzf_filehandle_1.unzip)(buf) : buf;
25
- // 512MB max chrome string length is 512MB
21
+ const buffer = await (0, util_1.fetchAndMaybeUnzip)((0, io_1.openLocation)(bedLoc, pm), opts);
26
22
  if (buffer.length > 536870888) {
27
23
  throw new Error('Data exceeds maximum string length (512MB)');
28
24
  }
@@ -101,12 +97,20 @@ class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
101
97
  }
102
98
  const names = await this.getNames();
103
99
  const intervalTree = new interval_tree_1.default();
104
- const ret = lines.map((f, i) => {
100
+ for (let i = 0; i < lines.length; i++) {
101
+ const line = lines[i];
105
102
  const uniqueId = `${this.id}-${refName}-${i}`;
106
- return (0, util_2.featureData)(f, colRef, colStart, colEnd, scoreColumn, parser, uniqueId, names);
107
- });
108
- for (const obj of ret) {
109
- intervalTree.insert([obj.get('start'), obj.get('end')], obj);
103
+ const feat = new util_1.SimpleFeature((0, util_2.featureData)({
104
+ line,
105
+ colRef,
106
+ colStart,
107
+ colEnd,
108
+ scoreColumn,
109
+ parser,
110
+ uniqueId,
111
+ names,
112
+ }));
113
+ intervalTree.insert([feat.get('start'), feat.get('end')], feat);
110
114
  }
111
115
  return intervalTree;
112
116
  }
@@ -127,7 +131,7 @@ class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
127
131
  observer.next(f);
128
132
  });
129
133
  observer.complete();
130
- }, opts.signal);
134
+ }, opts.stopToken);
131
135
  }
132
136
  freeResources() { }
133
137
  }
@@ -1,7 +1,4 @@
1
1
  declare const BedAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
- /**
3
- * #slot
4
- */
5
2
  bedLocation: {
6
3
  type: string;
7
4
  defaultValue: {
@@ -9,49 +6,31 @@ declare const BedAdapter: import("@jbrowse/core/configuration/configurationSchem
9
6
  locationType: string;
10
7
  };
11
8
  };
12
- /**
13
- * #slot
14
- */
15
9
  columnNames: {
16
10
  type: string;
17
11
  description: string;
18
12
  defaultValue: never[];
19
13
  };
20
- /**
21
- * #slot
22
- */
23
14
  scoreColumn: {
24
15
  type: string;
25
16
  description: string;
26
17
  defaultValue: string;
27
18
  };
28
- /**
29
- * #slot
30
- */
31
19
  autoSql: {
32
20
  type: string;
33
21
  description: string;
34
22
  defaultValue: string;
35
23
  };
36
- /**
37
- * #slot
38
- */
39
24
  colRef: {
40
25
  type: string;
41
26
  description: string;
42
27
  defaultValue: number;
43
28
  };
44
- /**
45
- * #slot
46
- */
47
29
  colStart: {
48
30
  type: string;
49
31
  description: string;
50
32
  defaultValue: number;
51
33
  };
52
- /**
53
- * #slot
54
- */
55
34
  colEnd: {
56
35
  type: string;
57
36
  description: string;
@@ -1,61 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const configuration_1 = require("@jbrowse/core/configuration");
4
- /**
5
- * #config BedAdapter
6
- */
7
- function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
4
+ function x() { }
8
5
  const BedAdapter = (0, configuration_1.ConfigurationSchema)('BedAdapter', {
9
- /**
10
- * #slot
11
- */
12
6
  bedLocation: {
13
7
  type: 'fileLocation',
14
8
  defaultValue: { uri: '/path/to/my.bed.gz', locationType: 'UriLocation' },
15
9
  },
16
- /**
17
- * #slot
18
- */
19
10
  columnNames: {
20
11
  type: 'stringArray',
21
12
  description: 'List of column names',
22
13
  defaultValue: [],
23
14
  },
24
- /**
25
- * #slot
26
- */
27
15
  scoreColumn: {
28
16
  type: 'string',
29
17
  description: 'The column to use as a "score" attribute',
30
18
  defaultValue: '',
31
19
  },
32
- /**
33
- * #slot
34
- */
35
20
  autoSql: {
36
21
  type: 'string',
37
22
  description: 'The autoSql definition for the data fields in the file',
38
23
  defaultValue: '',
39
24
  },
40
- /**
41
- * #slot
42
- */
43
25
  colRef: {
44
26
  type: 'number',
45
27
  description: 'The column to use as a "refName" attribute',
46
28
  defaultValue: 0,
47
29
  },
48
- /**
49
- * #slot
50
- */
51
30
  colStart: {
52
31
  type: 'number',
53
32
  description: 'The column to use as a "start" attribute',
54
33
  defaultValue: 1,
55
34
  },
56
- /**
57
- * #slot
58
- */
59
35
  colEnd: {
60
36
  type: 'number',
61
37
  description: 'The column to use as a "end" attribute',
@@ -1,2 +1,2 @@
1
- import PluginManager from '@jbrowse/core/PluginManager';
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
2
  export default function BedAdapterF(pluginManager: PluginManager): void;
@@ -0,0 +1,24 @@
1
+ import IntervalTree from '@flatten-js/interval-tree';
2
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
3
+ import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
4
+ import type { Feature, Region } from '@jbrowse/core/util';
5
+ export default class BedGraphAdapter extends BaseFeatureDataAdapter {
6
+ protected bedFeatures?: Promise<{
7
+ header: string;
8
+ features: Record<string, string[]>;
9
+ columnNames: string[];
10
+ }>;
11
+ protected intervalTrees: Record<string, Promise<IntervalTree | undefined> | undefined>;
12
+ getNames(): Promise<string[] | undefined>;
13
+ private loadFeatureIntervalTreeHelper;
14
+ getRefNames(opts?: BaseOptions): Promise<string[]>;
15
+ private loadDataP;
16
+ loadFeatureIntervalTree(refName: string): Promise<IntervalTree<any> | undefined>;
17
+ loadData(opts?: BaseOptions): Promise<{
18
+ header: string;
19
+ features: Record<string, string[]>;
20
+ columnNames: string[];
21
+ }>;
22
+ getFeatures(query: Region, _opts?: BaseOptions): import("rxjs").Observable<Feature>;
23
+ freeResources(): void;
24
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
7
+ const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
8
+ const util_1 = require("@jbrowse/core/util");
9
+ const io_1 = require("@jbrowse/core/util/io");
10
+ const rxjs_1 = require("@jbrowse/core/util/rxjs");
11
+ class BedGraphAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.intervalTrees = {};
15
+ }
16
+ async getNames() {
17
+ const { header, columnNames } = await this.loadData();
18
+ if (columnNames.length) {
19
+ return columnNames;
20
+ }
21
+ const defs = header.split(/\n|\r\n|\r/).filter(f => !!f);
22
+ const defline = defs.at(-1);
23
+ return (defline === null || defline === void 0 ? void 0 : defline.includes('\t'))
24
+ ? defline
25
+ .slice(1)
26
+ .split('\t')
27
+ .map(field => field.trim())
28
+ : undefined;
29
+ }
30
+ async loadFeatureIntervalTreeHelper(refName) {
31
+ var _a;
32
+ const { features } = await this.loadData();
33
+ const lines = features[refName];
34
+ if (!lines) {
35
+ return undefined;
36
+ }
37
+ const names = ((_a = (await this.getNames())) === null || _a === void 0 ? void 0 : _a.slice(3)) || [];
38
+ const intervalTree = new interval_tree_1.default();
39
+ for (let i = 0; i < lines.length; i++) {
40
+ const line = lines[i];
41
+ const [refName, s, e, ...rest] = line.split('\t');
42
+ for (let j = 0; j < rest.length; j++) {
43
+ const uniqueId = `${this.id}-${refName}-${i}-${j}`;
44
+ const start = +s;
45
+ const end = +e;
46
+ const score = +rest[j];
47
+ const source = names[j] || `col${j}`;
48
+ if (score) {
49
+ intervalTree.insert([start, end], new util_1.SimpleFeature({
50
+ id: uniqueId,
51
+ data: {
52
+ refName,
53
+ start,
54
+ end,
55
+ score,
56
+ source,
57
+ },
58
+ }));
59
+ }
60
+ }
61
+ }
62
+ return intervalTree;
63
+ }
64
+ async getRefNames(opts = {}) {
65
+ const { features } = await this.loadData(opts);
66
+ return Object.keys(features);
67
+ }
68
+ async loadDataP(opts = {}) {
69
+ const pm = this.pluginManager;
70
+ const bedLoc = this.getConf('bedGraphLocation');
71
+ const buffer = await (0, util_1.fetchAndMaybeUnzip)((0, io_1.openLocation)(bedLoc, pm), opts);
72
+ if (buffer.length > 536870888) {
73
+ throw new Error('Data exceeds maximum string length (512MB)');
74
+ }
75
+ const data = new TextDecoder('utf8', { fatal: true }).decode(buffer);
76
+ const lines = data.split(/\n|\r\n|\r/).filter(f => !!f);
77
+ const headerLines = [];
78
+ let i = 0;
79
+ for (; i < lines.length && lines[i].startsWith('#'); i++) {
80
+ headerLines.push(lines[i]);
81
+ }
82
+ const header = headerLines.join('\n');
83
+ const features = {};
84
+ for (; i < lines.length; i++) {
85
+ const line = lines[i];
86
+ const tab = line.indexOf('\t');
87
+ const refName = line.slice(0, tab);
88
+ if (!features[refName]) {
89
+ features[refName] = [];
90
+ }
91
+ features[refName].push(line);
92
+ }
93
+ const columnNames = this.getConf('columnNames');
94
+ return {
95
+ header,
96
+ features,
97
+ columnNames,
98
+ };
99
+ }
100
+ async loadFeatureIntervalTree(refName) {
101
+ if (!this.intervalTrees[refName]) {
102
+ this.intervalTrees[refName] = this.loadFeatureIntervalTreeHelper(refName).catch((e) => {
103
+ this.intervalTrees[refName] = undefined;
104
+ throw e;
105
+ });
106
+ }
107
+ return this.intervalTrees[refName];
108
+ }
109
+ async loadData(opts = {}) {
110
+ if (!this.bedFeatures) {
111
+ this.bedFeatures = this.loadDataP(opts).catch((e) => {
112
+ this.bedFeatures = undefined;
113
+ throw e;
114
+ });
115
+ }
116
+ return this.bedFeatures;
117
+ }
118
+ getFeatures(query, _opts = {}) {
119
+ return (0, rxjs_1.ObservableCreate)(async (observer) => {
120
+ const { start, end, refName } = query;
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
+ });
125
+ observer.complete();
126
+ });
127
+ }
128
+ freeResources() { }
129
+ }
130
+ exports.default = BedGraphAdapter;
@@ -0,0 +1,15 @@
1
+ declare const BedGraphAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
+ bedGraphLocation: {
3
+ type: string;
4
+ defaultValue: {
5
+ uri: string;
6
+ locationType: string;
7
+ };
8
+ };
9
+ columnNames: {
10
+ type: string;
11
+ description: string;
12
+ defaultValue: never[];
13
+ };
14
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
15
+ export default BedGraphAdapter;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const configuration_1 = require("@jbrowse/core/configuration");
4
+ function x() { }
5
+ const BedGraphAdapter = (0, configuration_1.ConfigurationSchema)('BedGraphAdapter', {
6
+ bedGraphLocation: {
7
+ type: 'fileLocation',
8
+ defaultValue: {
9
+ uri: '/path/to/my.bedgraph',
10
+ locationType: 'UriLocation',
11
+ },
12
+ },
13
+ columnNames: {
14
+ type: 'stringArray',
15
+ description: 'List of column names',
16
+ defaultValue: [],
17
+ },
18
+ }, { explicitlyTyped: true });
19
+ exports.default = BedGraphAdapter;
@@ -0,0 +1,2 @@
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function BedGraphAdapterF(pluginManager: PluginManager): void;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.default = BedGraphAdapterF;
30
+ const AdapterType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/AdapterType"));
31
+ const configSchema_1 = __importDefault(require("./configSchema"));
32
+ function BedGraphAdapterF(pluginManager) {
33
+ pluginManager.addAdapterType(() => new AdapterType_1.default({
34
+ name: 'BedGraphAdapter',
35
+ displayName: 'BedGraph adapter',
36
+ configSchema: configSchema_1.default,
37
+ getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./BedGraphAdapter'))).then(r => r.default),
38
+ }));
39
+ }
@@ -0,0 +1,18 @@
1
+ import { TabixIndexedFile } from '@gmod/tabix';
2
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
3
+ import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
4
+ import type { Feature, Region } from '@jbrowse/core/util';
5
+ export default class BedGraphAdapter extends BaseFeatureDataAdapter {
6
+ private configured?;
7
+ private configurePre;
8
+ protected configure(): Promise<{
9
+ bedGraph: TabixIndexedFile;
10
+ header: string;
11
+ columnNames: string[];
12
+ }>;
13
+ getNames(): Promise<string[] | undefined>;
14
+ getRefNames(opts?: BaseOptions): Promise<string[]>;
15
+ getHeader(): Promise<string>;
16
+ getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
17
+ freeResources(): void;
18
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tabix_1 = require("@gmod/tabix");
4
+ const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
5
+ const util_1 = require("@jbrowse/core/util");
6
+ const io_1 = require("@jbrowse/core/util/io");
7
+ const rxjs_1 = require("@jbrowse/core/util/rxjs");
8
+ class BedGraphAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
9
+ async configurePre() {
10
+ const pm = this.pluginManager;
11
+ const bedGraphGzLocation = this.getConf('bedGraphGzLocation');
12
+ const location = this.getConf(['index', 'location']);
13
+ const indexType = this.getConf(['index', 'indexType']);
14
+ const filehandle = (0, io_1.openLocation)(bedGraphGzLocation, pm);
15
+ const isCSI = indexType === 'CSI';
16
+ const bedGraph = new tabix_1.TabixIndexedFile({
17
+ filehandle,
18
+ csiFilehandle: isCSI ? (0, io_1.openLocation)(location, pm) : undefined,
19
+ tbiFilehandle: !isCSI ? (0, io_1.openLocation)(location, pm) : undefined,
20
+ chunkCacheSize: 50 * 2 ** 20,
21
+ });
22
+ const columnNames = this.getConf('columnNames');
23
+ const header = await bedGraph.getHeader();
24
+ return {
25
+ columnNames,
26
+ bedGraph,
27
+ header,
28
+ };
29
+ }
30
+ async configure() {
31
+ if (!this.configured) {
32
+ this.configured = this.configurePre().catch((e) => {
33
+ this.configured = undefined;
34
+ throw e;
35
+ });
36
+ }
37
+ return this.configured;
38
+ }
39
+ async getNames() {
40
+ const { bedGraph, columnNames } = await this.configure();
41
+ if (columnNames.length) {
42
+ return columnNames;
43
+ }
44
+ const header = await bedGraph.getHeader();
45
+ const defs = header.split(/\n|\r\n|\r/).filter(f => !!f);
46
+ const defline = defs.at(-1);
47
+ return (defline === null || defline === void 0 ? void 0 : defline.includes('\t'))
48
+ ? defline
49
+ .slice(1)
50
+ .split('\t')
51
+ .map(f => f.trim())
52
+ : undefined;
53
+ }
54
+ async getRefNames(opts = {}) {
55
+ const { bedGraph } = await this.configure();
56
+ return bedGraph.getReferenceSequenceNames(opts);
57
+ }
58
+ async getHeader() {
59
+ const { bedGraph } = await this.configure();
60
+ return bedGraph.getHeader();
61
+ }
62
+ getFeatures(query, opts = {}) {
63
+ return (0, rxjs_1.ObservableCreate)(async (observer) => {
64
+ var _a;
65
+ const { bedGraph } = await this.configure();
66
+ const meta = await bedGraph.getMetadata();
67
+ const { columnNumbers } = meta;
68
+ const colRef = columnNumbers.ref - 1;
69
+ const colStart = columnNumbers.start - 1;
70
+ const colEnd = columnNumbers.end - 1;
71
+ const same = colStart === colEnd;
72
+ const names = ((_a = (await this.getNames())) === null || _a === void 0 ? void 0 : _a.slice(same ? 2 : 3)) || [];
73
+ await bedGraph.getLines(query.refName, query.start + (same ? -1 : 0), query.end, {
74
+ lineCallback: (line, fileOffset) => {
75
+ const cols = line.split('\t');
76
+ const refName = cols[colRef];
77
+ const start = +cols[colStart];
78
+ const end = +(same ? start + 1 : cols[colEnd]);
79
+ const rest = cols.slice(colEnd + 1);
80
+ for (let j = 0; j < rest.length; j++) {
81
+ const uniqueId = `${this.id}-${fileOffset}-${j}`;
82
+ const score = Math.abs(+rest[j]);
83
+ const source = names[j] || `col${j}`;
84
+ if (score) {
85
+ observer.next(new util_1.SimpleFeature({
86
+ id: uniqueId,
87
+ data: {
88
+ refName,
89
+ start,
90
+ end,
91
+ score,
92
+ source,
93
+ },
94
+ }));
95
+ }
96
+ }
97
+ },
98
+ ...opts,
99
+ });
100
+ observer.complete();
101
+ });
102
+ }
103
+ freeResources() { }
104
+ }
105
+ exports.default = BedGraphAdapter;
@@ -0,0 +1,29 @@
1
+ declare const BedGraphTabixAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
+ bedGraphGzLocation: {
3
+ type: string;
4
+ defaultValue: {
5
+ uri: string;
6
+ locationType: string;
7
+ };
8
+ };
9
+ index: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
10
+ indexType: {
11
+ model: import("mobx-state-tree").ISimpleType<string>;
12
+ type: string;
13
+ defaultValue: string;
14
+ };
15
+ location: {
16
+ type: string;
17
+ defaultValue: {
18
+ uri: string;
19
+ locationType: string;
20
+ };
21
+ };
22
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
23
+ columnNames: {
24
+ type: string;
25
+ description: string;
26
+ defaultValue: never[];
27
+ };
28
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
29
+ export default BedGraphTabixAdapter;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const configuration_1 = require("@jbrowse/core/configuration");
4
+ const mobx_state_tree_1 = require("mobx-state-tree");
5
+ function x() { }
6
+ const BedGraphTabixAdapter = (0, configuration_1.ConfigurationSchema)('BedGraphTabixAdapter', {
7
+ bedGraphGzLocation: {
8
+ type: 'fileLocation',
9
+ defaultValue: {
10
+ uri: '/path/to/my.bedgraph',
11
+ locationType: 'UriLocation',
12
+ },
13
+ },
14
+ index: (0, configuration_1.ConfigurationSchema)('VcfIndex', {
15
+ indexType: {
16
+ model: mobx_state_tree_1.types.enumeration('IndexType', ['TBI', 'CSI']),
17
+ type: 'stringEnum',
18
+ defaultValue: 'TBI',
19
+ },
20
+ location: {
21
+ type: 'fileLocation',
22
+ defaultValue: {
23
+ uri: '/path/to/my.vcf.gz.tbi',
24
+ locationType: 'UriLocation',
25
+ },
26
+ },
27
+ }),
28
+ columnNames: {
29
+ type: 'stringArray',
30
+ description: 'List of column names',
31
+ defaultValue: [],
32
+ },
33
+ }, { explicitlyTyped: true });
34
+ exports.default = BedGraphTabixAdapter;
@@ -0,0 +1,2 @@
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function BedGraphTabixAdapterF(pluginManager: PluginManager): void;