@jbrowse/plugin-bed 1.7.10 → 2.0.1

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 (78) hide show
  1. package/dist/BedAdapter/BedAdapter.d.ts +29 -0
  2. package/dist/BedAdapter/BedAdapter.js +273 -0
  3. package/dist/BedAdapter/BedAdapter.js.map +1 -0
  4. package/dist/BedAdapter/configSchema.d.ts +2 -0
  5. package/dist/BedAdapter/configSchema.js +40 -0
  6. package/dist/BedAdapter/configSchema.js.map +1 -0
  7. package/dist/BedAdapter/index.d.ts +1 -0
  8. package/dist/BedAdapter/index.js +9 -0
  9. package/dist/BedAdapter/index.js.map +1 -0
  10. package/dist/BedTabixAdapter/BedTabixAdapter.d.ts +3 -7
  11. package/dist/BedTabixAdapter/BedTabixAdapter.js +154 -289
  12. package/dist/BedTabixAdapter/BedTabixAdapter.js.map +1 -0
  13. package/dist/BedTabixAdapter/configSchema.js +38 -51
  14. package/dist/BedTabixAdapter/configSchema.js.map +1 -0
  15. package/dist/BedTabixAdapter/index.js +8 -14
  16. package/dist/BedTabixAdapter/index.js.map +1 -0
  17. package/dist/BigBedAdapter/BigBedAdapter.js +228 -335
  18. package/dist/BigBedAdapter/BigBedAdapter.js.map +1 -0
  19. package/dist/BigBedAdapter/configSchema.js +9 -21
  20. package/dist/BigBedAdapter/configSchema.js.map +1 -0
  21. package/dist/BigBedAdapter/index.js +8 -14
  22. package/dist/BigBedAdapter/index.js.map +1 -0
  23. package/dist/index.js +132 -129
  24. package/dist/index.js.map +1 -0
  25. package/dist/util.d.ts +3 -1
  26. package/dist/util.js +161 -121
  27. package/dist/util.js.map +1 -0
  28. package/esm/BedAdapter/BedAdapter.d.ts +29 -0
  29. package/esm/BedAdapter/BedAdapter.js +130 -0
  30. package/esm/BedAdapter/BedAdapter.js.map +1 -0
  31. package/esm/BedAdapter/configSchema.d.ts +2 -0
  32. package/esm/BedAdapter/configSchema.js +38 -0
  33. package/esm/BedAdapter/configSchema.js.map +1 -0
  34. package/esm/BedAdapter/index.d.ts +1 -0
  35. package/esm/BedAdapter/index.js +2 -0
  36. package/esm/BedAdapter/index.js.map +1 -0
  37. package/esm/BedTabixAdapter/BedTabixAdapter.d.ts +19 -0
  38. package/esm/BedTabixAdapter/BedTabixAdapter.js +69 -0
  39. package/esm/BedTabixAdapter/BedTabixAdapter.js.map +1 -0
  40. package/esm/BedTabixAdapter/configSchema.d.ts +2 -0
  41. package/esm/BedTabixAdapter/configSchema.js +38 -0
  42. package/esm/BedTabixAdapter/configSchema.js.map +1 -0
  43. package/esm/BedTabixAdapter/index.d.ts +1 -0
  44. package/esm/BedTabixAdapter/index.js +2 -0
  45. package/esm/BedTabixAdapter/index.js.map +1 -0
  46. package/esm/BigBedAdapter/BigBedAdapter.d.ts +46 -0
  47. package/esm/BigBedAdapter/BigBedAdapter.js +104 -0
  48. package/esm/BigBedAdapter/BigBedAdapter.js.map +1 -0
  49. package/esm/BigBedAdapter/configSchema.d.ts +2 -0
  50. package/esm/BigBedAdapter/configSchema.js +8 -0
  51. package/esm/BigBedAdapter/configSchema.js.map +1 -0
  52. package/esm/BigBedAdapter/index.d.ts +1 -0
  53. package/esm/BigBedAdapter/index.js +2 -0
  54. package/esm/BigBedAdapter/index.js.map +1 -0
  55. package/esm/index.d.ts +6 -0
  56. package/esm/index.js +81 -0
  57. package/esm/index.js.map +1 -0
  58. package/esm/util.d.ts +4 -0
  59. package/esm/util.js +154 -0
  60. package/esm/util.js.map +1 -0
  61. package/package.json +18 -7
  62. package/src/BedAdapter/BedAdapter.test.ts +170 -0
  63. package/src/BedAdapter/BedAdapter.ts +172 -0
  64. package/src/BedAdapter/__snapshots__/BedAdapter.test.ts.snap +437 -0
  65. package/src/BedAdapter/configSchema.ts +45 -0
  66. package/src/BedAdapter/index.ts +1 -0
  67. package/src/BedAdapter/test_data/gwas.bed +20 -0
  68. package/src/BedAdapter/test_data/volvox-autosql.bed +1 -0
  69. package/src/BedAdapter/test_data/volvox-bed12.bed +4 -0
  70. package/src/BedAdapter/test_data/volvox.sort.bed +109 -0
  71. package/src/BedAdapter/test_data/volvox.sort.with.header.bed +121 -0
  72. package/src/BedTabixAdapter/BedTabixAdapter.ts +29 -80
  73. package/src/index.ts +34 -1
  74. package/src/util.ts +65 -6
  75. package/dist/BedTabixAdapter/BedTabixAdapter.test.js +0 -276
  76. package/dist/BigBedAdapter/BigBedAdapter.test.js +0 -63
  77. package/dist/declare.d.js +0 -1
  78. package/dist/index.test.js +0 -24
@@ -0,0 +1,130 @@
1
+ import BED from '@gmod/bed';
2
+ import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
3
+ import { openLocation } from '@jbrowse/core/util/io';
4
+ import { ObservableCreate } from '@jbrowse/core/util/rxjs';
5
+ import { featureData } from '../util';
6
+ import IntervalTree from '@flatten-js/interval-tree';
7
+ import { unzip } from '@gmod/bgzf-filehandle';
8
+ function isGzip(buf) {
9
+ return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
10
+ }
11
+ export default class BedAdapter extends BaseFeatureDataAdapter {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.intervalTrees = {};
15
+ }
16
+ async loadDataP(opts = {}) {
17
+ const pm = this.pluginManager;
18
+ const bedLoc = this.getConf('bedLocation');
19
+ const buf = await openLocation(bedLoc, pm).readFile(opts);
20
+ const buffer = isGzip(buf) ? await unzip(buf) : buf;
21
+ // 512MB max chrome string length is 512MB
22
+ if (buffer.length > 536870888) {
23
+ throw new Error('Data exceeds maximum string length (512MB)');
24
+ }
25
+ const data = new TextDecoder('utf8', { fatal: true }).decode(buffer);
26
+ const lines = data.split('\n').filter(f => !!f);
27
+ const headerLines = [];
28
+ let i = 0;
29
+ for (; i < lines.length && lines[i].startsWith('#'); i++) {
30
+ headerLines.push(lines[i]);
31
+ }
32
+ const header = headerLines.join('\n');
33
+ const features = {};
34
+ for (; i < lines.length; i++) {
35
+ const line = lines[i];
36
+ const tab = line.indexOf('\t');
37
+ const refName = line.slice(0, tab);
38
+ if (!features[refName]) {
39
+ features[refName] = [];
40
+ }
41
+ features[refName].push(line);
42
+ }
43
+ const autoSql = this.getConf('autoSql');
44
+ const parser = new BED({ autoSql });
45
+ const columnNames = this.getConf('columnNames');
46
+ const scoreColumn = this.getConf('scoreColumn');
47
+ const colRef = this.getConf('colRef');
48
+ const colStart = this.getConf('colStart');
49
+ const colEnd = this.getConf('colEnd');
50
+ return {
51
+ header,
52
+ features,
53
+ parser,
54
+ columnNames,
55
+ scoreColumn,
56
+ colRef,
57
+ colStart,
58
+ colEnd,
59
+ };
60
+ }
61
+ async loadData(opts = {}) {
62
+ if (!this.bedFeatures) {
63
+ this.bedFeatures = this.loadDataP(opts).catch(e => {
64
+ this.bedFeatures = undefined;
65
+ throw e;
66
+ });
67
+ }
68
+ return this.bedFeatures;
69
+ }
70
+ async getRefNames(opts = {}) {
71
+ const { features } = await this.loadData(opts);
72
+ return Object.keys(features);
73
+ }
74
+ async getHeader(opts = {}) {
75
+ const { header } = await this.loadData(opts);
76
+ return header;
77
+ }
78
+ async getNames() {
79
+ const { header, columnNames } = await this.loadData();
80
+ if (columnNames.length) {
81
+ return columnNames;
82
+ }
83
+ const defs = header.split('\n').filter(f => !!f);
84
+ const defline = defs[defs.length - 1];
85
+ return (defline === null || defline === void 0 ? void 0 : defline.includes('\t'))
86
+ ? defline
87
+ .slice(1)
88
+ .split('\t')
89
+ .map(field => field.trim())
90
+ : undefined;
91
+ }
92
+ async loadFeatureIntervalTreeHelper(refName) {
93
+ const { colRef, colStart, colEnd, features, parser, scoreColumn } = await this.loadData();
94
+ const lines = features[refName];
95
+ if (!lines) {
96
+ return undefined;
97
+ }
98
+ const names = await this.getNames();
99
+ const intervalTree = new IntervalTree();
100
+ const ret = lines.map((f, i) => {
101
+ const uniqueId = `${this.id}-${refName}-${i}`;
102
+ return featureData(f, colRef, colStart, colEnd, scoreColumn, parser, uniqueId, names);
103
+ });
104
+ for (let i = 0; i < ret.length; i++) {
105
+ const obj = ret[i];
106
+ intervalTree.insert([obj.get('start'), obj.get('end')], obj);
107
+ }
108
+ return intervalTree;
109
+ }
110
+ async loadFeatureIntervalTree(refName) {
111
+ if (!this.intervalTrees[refName]) {
112
+ this.intervalTrees[refName] = this.loadFeatureIntervalTreeHelper(refName).catch(e => {
113
+ this.intervalTrees[refName] = undefined;
114
+ throw e;
115
+ });
116
+ }
117
+ return this.intervalTrees[refName];
118
+ }
119
+ getFeatures(query, opts = {}) {
120
+ return ObservableCreate(async (observer) => {
121
+ const { start, end, refName } = query;
122
+ const intervalTree = await this.loadFeatureIntervalTree(refName);
123
+ intervalTree === null || intervalTree === void 0 ? void 0 : intervalTree.search([start, end]).forEach(f => observer.next(f));
124
+ observer.complete();
125
+ }, opts.signal);
126
+ }
127
+ freeResources() { }
128
+ }
129
+ BedAdapter.capabilities = ['getFeatures', 'getRefNames'];
130
+ //# sourceMappingURL=BedAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BedAdapter.js","sourceRoot":"","sources":["../../src/BedAdapter/BedAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ export default ConfigurationSchema('BedAdapter', {
3
+ bedLocation: {
4
+ type: 'fileLocation',
5
+ defaultValue: { uri: '/path/to/my.bed.gz', locationType: 'UriLocation' },
6
+ },
7
+ columnNames: {
8
+ type: 'stringArray',
9
+ description: 'List of column names',
10
+ defaultValue: [],
11
+ },
12
+ scoreColumn: {
13
+ type: 'string',
14
+ description: 'The column to use as a "score" attribute',
15
+ defaultValue: '',
16
+ },
17
+ autoSql: {
18
+ type: 'string',
19
+ description: 'The autoSql definition for the data fields in the file',
20
+ defaultValue: '',
21
+ },
22
+ colRef: {
23
+ type: 'number',
24
+ description: 'The column to use as a "refName" attribute',
25
+ defaultValue: 0,
26
+ },
27
+ colStart: {
28
+ type: 'number',
29
+ description: 'The column to use as a "start" attribute',
30
+ defaultValue: 1,
31
+ },
32
+ colEnd: {
33
+ type: 'number',
34
+ description: 'The column to use as a "end" attribute',
35
+ defaultValue: 2,
36
+ },
37
+ }, { explicitlyTyped: true });
38
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/BedAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,eAAe,mBAAmB,CAChC,YAAY,EACZ;IACE,WAAW,EAAE;QACX,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE;KACzE;IAED,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,sBAAsB;QACnC,YAAY,EAAE,EAAE;KACjB;IAED,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;QACvD,YAAY,EAAE,EAAE;KACjB;IAED,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wDAAwD;QACrE,YAAY,EAAE,EAAE;KACjB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,CAAC;KAChB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;QACvD,YAAY,EAAE,CAAC;KAChB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wCAAwC;QACrD,YAAY,EAAE,CAAC;KAChB;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
@@ -0,0 +1 @@
1
+ export { default as configSchema } from './configSchema';
@@ -0,0 +1,2 @@
1
+ export { default as configSchema } from './configSchema';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/BedAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
2
+ import { Region, Feature } from '@jbrowse/core/util';
3
+ import { TabixIndexedFile } from '@gmod/tabix';
4
+ import PluginManager from '@jbrowse/core/PluginManager';
5
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
6
+ import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
7
+ export default class BedTabixAdapter extends BaseFeatureDataAdapter {
8
+ private parser;
9
+ protected bed: TabixIndexedFile;
10
+ protected columnNames: string[];
11
+ protected scoreColumn: string;
12
+ static capabilities: string[];
13
+ constructor(config: AnyConfigurationModel, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
14
+ getRefNames(opts?: BaseOptions): Promise<any>;
15
+ getHeader(): Promise<string>;
16
+ getNames(): Promise<string[] | undefined>;
17
+ getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
18
+ freeResources(): void;
19
+ }
@@ -0,0 +1,69 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import BED from '@gmod/bed';
3
+ import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
4
+ import { openLocation } from '@jbrowse/core/util/io';
5
+ import { ObservableCreate } from '@jbrowse/core/util/rxjs';
6
+ import { TabixIndexedFile } from '@gmod/tabix';
7
+ import { featureData } from '../util';
8
+ export default class BedTabixAdapter extends BaseFeatureDataAdapter {
9
+ constructor(config, getSubAdapter, pluginManager) {
10
+ super(config, getSubAdapter, pluginManager);
11
+ const bedGzLoc = this.getConf('bedGzLocation');
12
+ const type = this.getConf(['index', 'indexType']);
13
+ const loc = this.getConf(['index', 'location']);
14
+ const autoSql = this.getConf('autoSql');
15
+ const pm = this.pluginManager;
16
+ this.bed = new TabixIndexedFile({
17
+ filehandle: openLocation(bedGzLoc, pm),
18
+ csiFilehandle: type === 'CSI' ? openLocation(loc, pm) : undefined,
19
+ tbiFilehandle: type !== 'CSI' ? openLocation(loc, pm) : undefined,
20
+ chunkCacheSize: 50 * 2 ** 20,
21
+ });
22
+ this.columnNames = this.getConf('columnNames');
23
+ this.scoreColumn = this.getConf('scoreColumn');
24
+ this.parser = new BED({ autoSql });
25
+ }
26
+ async getRefNames(opts = {}) {
27
+ return this.bed.getReferenceSequenceNames(opts);
28
+ }
29
+ async getHeader() {
30
+ return this.bed.getHeader();
31
+ }
32
+ async getNames() {
33
+ if (this.columnNames.length) {
34
+ return this.columnNames;
35
+ }
36
+ const header = await this.bed.getHeader();
37
+ const defs = header.split('\n').filter(f => !!f);
38
+ const defline = defs[defs.length - 1];
39
+ return (defline === null || defline === void 0 ? void 0 : defline.includes('\t'))
40
+ ? defline
41
+ .slice(1)
42
+ .split('\t')
43
+ .map(f => f.trim())
44
+ : undefined;
45
+ }
46
+ getFeatures(query, opts = {}) {
47
+ return ObservableCreate(async (observer) => {
48
+ const meta = await this.bed.getMetadata();
49
+ const { columnNumbers } = meta;
50
+ const colRef = columnNumbers.ref - 1;
51
+ const colStart = columnNumbers.start - 1;
52
+ const colEnd = columnNumbers.end - 1;
53
+ // colSame handles special case for tabix where a single column is both
54
+ // the start and end, this is assumed to be covering the base at this
55
+ // position (e.g. tabix -s 1 -b 2 -e 2) begin and end are same
56
+ const names = await this.getNames();
57
+ await this.bed.getLines(query.refName, query.start, query.end, {
58
+ lineCallback: (line, fileOffset) => {
59
+ observer.next(featureData(line, colRef, colStart, colEnd, this.scoreColumn, this.parser, `${this.id}-${fileOffset}`, names));
60
+ },
61
+ signal: opts.signal,
62
+ });
63
+ observer.complete();
64
+ }, opts.signal);
65
+ }
66
+ freeResources() { }
67
+ }
68
+ BedTabixAdapter.capabilities = ['getFeatures', 'getRefNames'];
69
+ //# sourceMappingURL=BedTabixAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BedTabixAdapter.js","sourceRoot":"","sources":["../../src/BedTabixAdapter/BedTabixAdapter.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,GAAG,MAAM,WAAW,CAAA;AAC3B,OAAO,EACL,sBAAsB,GAEvB,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAKrC,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,sBAAsB;IAWjE,YACE,MAA6B,EAC7B,aAAiC,EACjC,aAA6B;QAE7B,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAiB,CAAA;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;QAE7B,IAAI,CAAC,GAAG,GAAG,IAAI,gBAAgB,CAAC;YAC9B,UAAU,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtC,aAAa,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACjE,aAAa,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACjE,cAAc,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACpC,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAoB,EAAE;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAA;SACxB;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAA;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrC,OAAO,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,IAAI,CAAC;YAC5B,CAAC,CAAC,OAAO;iBACJ,KAAK,CAAC,CAAC,CAAC;iBACR,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAEM,WAAW,CAAC,KAAa,EAAE,OAAoB,EAAE;QACtD,OAAO,gBAAgB,CAAU,KAAK,EAAC,QAAQ,EAAC,EAAE;YAChD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;YACzC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAA;YACpC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAA;YACpC,uEAAuE;YACvE,qEAAqE;YACrE,8DAA8D;YAC9D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;YACnC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE;gBAC7D,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;oBACjC,QAAQ,CAAC,IAAI,CACX,WAAW,CACT,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,EACX,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,EAAE,EAC1B,KAAK,CACN,CACF,CAAA;gBACH,CAAC;gBACD,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAA;YACF,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACrB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IAEM,aAAa,KAAU,CAAC;;AAhFjB,4BAAY,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ import { types } from 'mobx-state-tree';
3
+ export default ConfigurationSchema('BedTabixAdapter', {
4
+ bedGzLocation: {
5
+ type: 'fileLocation',
6
+ defaultValue: { uri: '/path/to/my.bed.gz', locationType: 'UriLocation' },
7
+ },
8
+ index: ConfigurationSchema('TabixIndex', {
9
+ indexType: {
10
+ model: types.enumeration('IndexType', ['TBI', 'CSI']),
11
+ type: 'stringEnum',
12
+ defaultValue: 'TBI',
13
+ },
14
+ location: {
15
+ type: 'fileLocation',
16
+ defaultValue: {
17
+ uri: '/path/to/my.bed.gz.tbi',
18
+ locationType: 'UriLocation',
19
+ },
20
+ },
21
+ }),
22
+ columnNames: {
23
+ type: 'stringArray',
24
+ description: 'List of column names',
25
+ defaultValue: [],
26
+ },
27
+ scoreColumn: {
28
+ type: 'string',
29
+ description: 'The column to use as a "score" attribute',
30
+ defaultValue: '',
31
+ },
32
+ autoSql: {
33
+ type: 'string',
34
+ description: 'The autoSql definition for the data fields in the file',
35
+ defaultValue: '',
36
+ },
37
+ }, { explicitlyTyped: true });
38
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/BedTabixAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,eAAe,mBAAmB,CAChC,iBAAiB,EACjB;IACE,aAAa,EAAE;QACb,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE;KACzE;IAED,KAAK,EAAE,mBAAmB,CAAC,YAAY,EAAE;QACvC,SAAS,EAAE;YACT,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,KAAK;SACpB;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE;gBACZ,GAAG,EAAE,wBAAwB;gBAC7B,YAAY,EAAE,aAAa;aAC5B;SACF;KACF,CAAC;IAEF,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,sBAAsB;QACnC,YAAY,EAAE,EAAE;KACjB;IAED,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;QACvD,YAAY,EAAE,EAAE;KACjB;IAED,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wDAAwD;QACrE,YAAY,EAAE,EAAE;KACjB;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
@@ -0,0 +1 @@
1
+ export { default as configSchema } from './configSchema';
@@ -0,0 +1,2 @@
1
+ export { default as configSchema } from './configSchema';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/BedTabixAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { BigBed } from '@gmod/bbi';
2
+ import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
3
+ import { Region } from '@jbrowse/core/util/types';
4
+ import { Feature } from '@jbrowse/core/util/simpleFeature';
5
+ interface BEDFeature {
6
+ chrom: string;
7
+ chromStart: number;
8
+ chromEnd: number;
9
+ [key: string]: any;
10
+ }
11
+ interface Parser {
12
+ parseLine: (line: string, opts: {
13
+ uniqueId: string | number;
14
+ }) => BEDFeature;
15
+ autoSql: {
16
+ fields: {
17
+ name: string;
18
+ comment: string;
19
+ }[];
20
+ };
21
+ }
22
+ export default class BigBedAdapter extends BaseFeatureDataAdapter {
23
+ private cached?;
24
+ configurePre(opts?: BaseOptions): Promise<{
25
+ bigbed: BigBed;
26
+ header: any;
27
+ parser: Parser;
28
+ }>;
29
+ configure(opts?: BaseOptions): Promise<{
30
+ bigbed: BigBed;
31
+ header: any;
32
+ parser: Parser;
33
+ }>;
34
+ getRefNames(opts?: BaseOptions): Promise<string[]>;
35
+ getHeader(opts?: BaseOptions): Promise<{
36
+ version: any;
37
+ fileType: any;
38
+ autoSql: {};
39
+ fields: {
40
+ [k: string]: string;
41
+ };
42
+ }>;
43
+ getFeatures(region: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
44
+ freeResources(): void;
45
+ }
46
+ export {};
@@ -0,0 +1,104 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { BigBed } from '@gmod/bbi';
3
+ import BED from '@gmod/bed';
4
+ import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
5
+ import { openLocation } from '@jbrowse/core/util/io';
6
+ import { ObservableCreate } from '@jbrowse/core/util/rxjs';
7
+ import SimpleFeature from '@jbrowse/core/util/simpleFeature';
8
+ import { map, mergeAll } from 'rxjs/operators';
9
+ import { readConfObject } from '@jbrowse/core/configuration';
10
+ import { ucscProcessedTranscript } from '../util';
11
+ function isUCSC(f) {
12
+ return f.get('thickStart') && f.get('blockCount') && f.get('strand') !== 0;
13
+ }
14
+ export default class BigBedAdapter extends BaseFeatureDataAdapter {
15
+ async configurePre(opts) {
16
+ const bigbed = new BigBed({
17
+ filehandle: openLocation(readConfObject(this.config, 'bigBedLocation'), this.pluginManager),
18
+ });
19
+ const header = await bigbed.getHeader(opts);
20
+ const parser = new BED({ autoSql: header.autoSql });
21
+ return { bigbed, header, parser };
22
+ }
23
+ async configure(opts) {
24
+ if (!this.cached) {
25
+ this.cached = this.configurePre(opts).catch(e => {
26
+ this.cached = undefined;
27
+ throw e;
28
+ });
29
+ }
30
+ return this.cached;
31
+ }
32
+ async getRefNames(opts) {
33
+ const { header } = await this.configure(opts);
34
+ return Object.keys(header.refsByName);
35
+ }
36
+ async getHeader(opts) {
37
+ const { parser, header } = await this.configure(opts);
38
+ const { version, fileType } = header;
39
+ const { fields, ...rest } = parser.autoSql;
40
+ return {
41
+ version,
42
+ fileType,
43
+ autoSql: { ...rest },
44
+ fields: Object.fromEntries(fields.map(({ name, comment }) => [name, comment])),
45
+ };
46
+ }
47
+ getFeatures(region, opts = {}) {
48
+ const { refName, start, end } = region;
49
+ const { signal } = opts;
50
+ return ObservableCreate(async (observer) => {
51
+ try {
52
+ const { parser, bigbed } = await this.configure(opts);
53
+ const ob = await bigbed.getFeatureStream(refName, start, end, {
54
+ signal,
55
+ basesPerSpan: end - start,
56
+ });
57
+ ob.pipe(mergeAll(), map(r => {
58
+ const data = parser.parseLine(`${refName}\t${r.start}\t${r.end}\t${r.rest}`, {
59
+ uniqueId: r.uniqueId,
60
+ });
61
+ const { blockCount, blockSizes, blockStarts, chromStarts } = data;
62
+ if (blockCount) {
63
+ const starts = chromStarts || blockStarts || [];
64
+ const sizes = blockSizes;
65
+ const blocksOffset = r.start;
66
+ data.subfeatures = [];
67
+ for (let b = 0; b < blockCount; b += 1) {
68
+ const bmin = (starts[b] || 0) + blocksOffset;
69
+ const bmax = bmin + (sizes[b] || 0);
70
+ data.subfeatures.push({
71
+ uniqueId: `${r.uniqueId}-${b}`,
72
+ start: bmin,
73
+ end: bmax,
74
+ type: 'block',
75
+ });
76
+ }
77
+ }
78
+ if (r.uniqueId === undefined) {
79
+ throw new Error('invalid bbi feature');
80
+ }
81
+ const { chromStart, chromEnd, chrom, ...rest } = data;
82
+ const f = new SimpleFeature({
83
+ id: `${this.id}-${r.uniqueId}`,
84
+ data: {
85
+ ...rest,
86
+ start: r.start,
87
+ end: r.end,
88
+ refName,
89
+ },
90
+ });
91
+ // collection of heuristics for suggesting that this feature
92
+ // should be converted to a gene, CNV bigbed has many gene like
93
+ // features including thickStart and blockCount but no strand
94
+ return isUCSC(f) ? ucscProcessedTranscript(f) : f;
95
+ })).subscribe(observer);
96
+ }
97
+ catch (e) {
98
+ observer.error(e);
99
+ }
100
+ }, opts.signal);
101
+ }
102
+ freeResources() { }
103
+ }
104
+ //# sourceMappingURL=BigBedAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigBedAdapter.js","sourceRoot":"","sources":["../../src/BigBedAdapter/BigBedAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ export default ConfigurationSchema('BigBedAdapter', {
3
+ bigBedLocation: {
4
+ type: 'fileLocation',
5
+ defaultValue: { uri: '/path/to/my.bb', locationType: 'UriLocation' },
6
+ },
7
+ }, { explicitlyTyped: true });
8
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/BigBedAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,eAAe,mBAAmB,CAChC,eAAe,EACf;IACE,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE;KACrE;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
@@ -0,0 +1 @@
1
+ export { default as configSchema } from './configSchema';
@@ -0,0 +1,2 @@
1
+ export { default as configSchema } from './configSchema';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/BigBedAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
package/esm/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import Plugin from '@jbrowse/core/Plugin';
2
+ import PluginManager from '@jbrowse/core/PluginManager';
3
+ export default class BedPlugin extends Plugin {
4
+ name: string;
5
+ install(pluginManager: PluginManager): void;
6
+ }
package/esm/index.js ADDED
@@ -0,0 +1,81 @@
1
+ import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType';
2
+ import Plugin from '@jbrowse/core/Plugin';
3
+ import { configSchema as bigBedAdapterConfigSchema } from './BigBedAdapter';
4
+ import { configSchema as bedTabixAdapterConfigSchema } from './BedTabixAdapter';
5
+ import { configSchema as bedAdapterConfigSchema } from './BedAdapter';
6
+ import { getFileName, makeIndex, makeIndexType, } from '@jbrowse/core/util/tracks';
7
+ export default class BedPlugin extends Plugin {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.name = 'BedPlugin';
11
+ }
12
+ install(pluginManager) {
13
+ pluginManager.addAdapterType(() => new AdapterType({
14
+ name: 'BigBedAdapter',
15
+ configSchema: bigBedAdapterConfigSchema,
16
+ getAdapterClass: () => import('./BigBedAdapter/BigBedAdapter').then(r => r.default),
17
+ }));
18
+ pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
19
+ return (file, index, adapterHint) => {
20
+ const regexGuess = /\.(bb|bigbed)$/i;
21
+ const adapterName = 'BigBedAdapter';
22
+ const fileName = getFileName(file);
23
+ const obj = {
24
+ type: adapterName,
25
+ bigBedLocation: file,
26
+ };
27
+ if (regexGuess.test(fileName) && !adapterHint) {
28
+ return obj;
29
+ }
30
+ else if (adapterHint === adapterName) {
31
+ return obj;
32
+ }
33
+ return adapterGuesser(file, index, adapterHint);
34
+ };
35
+ });
36
+ pluginManager.addAdapterType(() => new AdapterType({
37
+ name: 'BedTabixAdapter',
38
+ configSchema: bedTabixAdapterConfigSchema,
39
+ getAdapterClass: () => import('./BedTabixAdapter/BedTabixAdapter').then(r => r.default),
40
+ }));
41
+ pluginManager.addAdapterType(() => new AdapterType({
42
+ name: 'BedAdapter',
43
+ configSchema: bedAdapterConfigSchema,
44
+ getAdapterClass: () => import('./BedAdapter/BedAdapter').then(r => r.default),
45
+ }));
46
+ pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
47
+ return (file, index, adapterHint) => {
48
+ const regexGuess = /\.bed\.b?gz$/i;
49
+ const adapterName = 'BedTabixAdapter';
50
+ const fileName = getFileName(file);
51
+ const indexName = index && getFileName(index);
52
+ if (regexGuess.test(fileName) || adapterHint === adapterName) {
53
+ return {
54
+ type: adapterName,
55
+ bedGzLocation: file,
56
+ index: {
57
+ location: index || makeIndex(file, '.tbi'),
58
+ indexType: makeIndexType(indexName, 'CSI', 'TBI'),
59
+ },
60
+ };
61
+ }
62
+ return adapterGuesser(file, index, adapterHint);
63
+ };
64
+ });
65
+ pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
66
+ return (file, index, adapterHint) => {
67
+ const regexGuess = /\.bed$/i;
68
+ const adapterName = 'BedAdapter';
69
+ const fileName = getFileName(file);
70
+ if (regexGuess.test(fileName) || adapterHint === adapterName) {
71
+ return {
72
+ type: adapterName,
73
+ bedLocation: file,
74
+ };
75
+ }
76
+ return adapterGuesser(file, index, adapterHint);
77
+ };
78
+ });
79
+ }
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}