@jbrowse/plugin-bed 2.17.0 → 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 (81) hide show
  1. package/dist/BedAdapter/BedAdapter.d.ts +15 -5
  2. package/dist/BedAdapter/BedAdapter.js +7 -10
  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 +12 -5
  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 +4 -5
  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 +5 -4
  29. package/dist/BigBedAdapter/BigBedAdapter.js +13 -8
  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 +3 -3
  34. package/dist/generateBedMethylFeature.js +3 -5
  35. package/dist/generateUcscTranscript.d.ts +1 -1
  36. package/dist/generateUcscTranscript.js +0 -6
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.js +8 -4
  39. package/dist/util.d.ts +171 -6
  40. package/dist/util.js +65 -61
  41. package/esm/BedAdapter/BedAdapter.d.ts +15 -5
  42. package/esm/BedAdapter/BedAdapter.js +8 -11
  43. package/esm/BedAdapter/configSchema.d.ts +0 -21
  44. package/esm/BedAdapter/configSchema.js +1 -25
  45. package/esm/BedAdapter/index.d.ts +1 -1
  46. package/esm/BedGraphAdapter/BedGraphAdapter.d.ts +24 -0
  47. package/esm/BedGraphAdapter/BedGraphAdapter.js +124 -0
  48. package/esm/BedGraphAdapter/configSchema.d.ts +15 -0
  49. package/esm/BedGraphAdapter/configSchema.js +17 -0
  50. package/esm/BedGraphAdapter/index.d.ts +2 -0
  51. package/esm/BedGraphAdapter/index.js +10 -0
  52. package/esm/BedGraphTabixAdapter/BedGraphTabixAdapter.d.ts +18 -0
  53. package/esm/BedGraphTabixAdapter/BedGraphTabixAdapter.js +102 -0
  54. package/esm/BedGraphTabixAdapter/configSchema.d.ts +29 -0
  55. package/esm/BedGraphTabixAdapter/configSchema.js +32 -0
  56. package/esm/BedGraphTabixAdapter/index.d.ts +2 -0
  57. package/esm/BedGraphTabixAdapter/index.js +10 -0
  58. package/esm/BedTabixAdapter/BedTabixAdapter.d.ts +6 -5
  59. package/esm/BedTabixAdapter/BedTabixAdapter.js +13 -6
  60. package/esm/BedTabixAdapter/configSchema.d.ts +0 -18
  61. package/esm/BedTabixAdapter/configSchema.js +1 -22
  62. package/esm/BedTabixAdapter/index.d.ts +1 -1
  63. package/esm/BedpeAdapter/BedpeAdapter.d.ts +4 -2
  64. package/esm/BedpeAdapter/BedpeAdapter.js +5 -6
  65. package/esm/BedpeAdapter/configSchema.d.ts +0 -7
  66. package/esm/BedpeAdapter/configSchema.js +1 -12
  67. package/esm/BedpeAdapter/index.d.ts +1 -1
  68. package/esm/BigBedAdapter/BigBedAdapter.d.ts +5 -4
  69. package/esm/BigBedAdapter/BigBedAdapter.js +14 -9
  70. package/esm/BigBedAdapter/configSchema.d.ts +0 -9
  71. package/esm/BigBedAdapter/configSchema.js +1 -13
  72. package/esm/BigBedAdapter/index.d.ts +1 -1
  73. package/esm/generateBedMethylFeature.d.ts +3 -3
  74. package/esm/generateBedMethylFeature.js +3 -5
  75. package/esm/generateUcscTranscript.d.ts +1 -1
  76. package/esm/generateUcscTranscript.js +0 -6
  77. package/esm/index.d.ts +1 -1
  78. package/esm/index.js +8 -4
  79. package/esm/util.d.ts +171 -6
  80. package/esm/util.js +65 -61
  81. 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,13 +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
- // locals
13
12
  const util_2 = require("../util");
14
13
  class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
15
14
  constructor() {
@@ -20,7 +19,6 @@ class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
20
19
  const pm = this.pluginManager;
21
20
  const bedLoc = this.getConf('bedLocation');
22
21
  const buffer = await (0, util_1.fetchAndMaybeUnzip)((0, io_1.openLocation)(bedLoc, pm), opts);
23
- // 512MB max chrome string length is 512MB
24
22
  if (buffer.length > 536870888) {
25
23
  throw new Error('Data exceeds maximum string length (512MB)');
26
24
  }
@@ -99,9 +97,10 @@ class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
99
97
  }
100
98
  const names = await this.getNames();
101
99
  const intervalTree = new interval_tree_1.default();
102
- const ret = lines.map((line, i) => {
100
+ for (let i = 0; i < lines.length; i++) {
101
+ const line = lines[i];
103
102
  const uniqueId = `${this.id}-${refName}-${i}`;
104
- return new util_1.SimpleFeature((0, util_2.featureData)({
103
+ const feat = new util_1.SimpleFeature((0, util_2.featureData)({
105
104
  line,
106
105
  colRef,
107
106
  colStart,
@@ -111,9 +110,7 @@ class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
111
110
  uniqueId,
112
111
  names,
113
112
  }));
114
- });
115
- for (const obj of ret) {
116
- intervalTree.insert([obj.get('start'), obj.get('end')], obj);
113
+ intervalTree.insert([feat.get('start'), feat.get('end')], feat);
117
114
  }
118
115
  return intervalTree;
119
116
  }
@@ -134,7 +131,7 @@ class BedAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
134
131
  observer.next(f);
135
132
  });
136
133
  observer.complete();
137
- }, opts.signal);
134
+ }, opts.stopToken);
138
135
  }
139
136
  freeResources() { }
140
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;