@jbrowse/plugin-bed 1.7.11 → 2.1.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 (69) hide show
  1. package/dist/BedAdapter/BedAdapter.d.ts +1 -1
  2. package/dist/BedAdapter/BedAdapter.js +260 -485
  3. package/dist/BedAdapter/BedAdapter.js.map +1 -0
  4. package/dist/BedAdapter/configSchema.js +39 -51
  5. package/dist/BedAdapter/configSchema.js.map +1 -0
  6. package/dist/BedAdapter/index.js +8 -14
  7. package/dist/BedAdapter/index.js.map +1 -0
  8. package/dist/BedTabixAdapter/BedTabixAdapter.js +154 -234
  9. package/dist/BedTabixAdapter/BedTabixAdapter.js.map +1 -0
  10. package/dist/BedTabixAdapter/configSchema.js +38 -51
  11. package/dist/BedTabixAdapter/configSchema.js.map +1 -0
  12. package/dist/BedTabixAdapter/index.js +8 -14
  13. package/dist/BedTabixAdapter/index.js.map +1 -0
  14. package/dist/BigBedAdapter/BigBedAdapter.d.ts +4 -21
  15. package/dist/BigBedAdapter/BigBedAdapter.js +228 -335
  16. package/dist/BigBedAdapter/BigBedAdapter.js.map +1 -0
  17. package/dist/BigBedAdapter/configSchema.js +9 -21
  18. package/dist/BigBedAdapter/configSchema.js.map +1 -0
  19. package/dist/BigBedAdapter/index.js +8 -14
  20. package/dist/BigBedAdapter/index.js.map +1 -0
  21. package/dist/index.js +129 -157
  22. package/dist/index.js.map +1 -0
  23. package/dist/util.d.ts +1 -1
  24. package/dist/util.js +156 -175
  25. package/dist/util.js.map +1 -0
  26. package/esm/BedAdapter/BedAdapter.d.ts +29 -0
  27. package/esm/BedAdapter/BedAdapter.js +130 -0
  28. package/esm/BedAdapter/BedAdapter.js.map +1 -0
  29. package/esm/BedAdapter/configSchema.d.ts +2 -0
  30. package/esm/BedAdapter/configSchema.js +38 -0
  31. package/esm/BedAdapter/configSchema.js.map +1 -0
  32. package/esm/BedAdapter/index.d.ts +1 -0
  33. package/esm/BedAdapter/index.js +2 -0
  34. package/esm/BedAdapter/index.js.map +1 -0
  35. package/esm/BedTabixAdapter/BedTabixAdapter.d.ts +19 -0
  36. package/esm/BedTabixAdapter/BedTabixAdapter.js +68 -0
  37. package/esm/BedTabixAdapter/BedTabixAdapter.js.map +1 -0
  38. package/esm/BedTabixAdapter/configSchema.d.ts +2 -0
  39. package/esm/BedTabixAdapter/configSchema.js +38 -0
  40. package/esm/BedTabixAdapter/configSchema.js.map +1 -0
  41. package/esm/BedTabixAdapter/index.d.ts +1 -0
  42. package/esm/BedTabixAdapter/index.js +2 -0
  43. package/esm/BedTabixAdapter/index.js.map +1 -0
  44. package/esm/BigBedAdapter/BigBedAdapter.d.ts +29 -0
  45. package/esm/BigBedAdapter/BigBedAdapter.js +104 -0
  46. package/esm/BigBedAdapter/BigBedAdapter.js.map +1 -0
  47. package/esm/BigBedAdapter/configSchema.d.ts +2 -0
  48. package/esm/BigBedAdapter/configSchema.js +8 -0
  49. package/esm/BigBedAdapter/configSchema.js.map +1 -0
  50. package/esm/BigBedAdapter/index.d.ts +1 -0
  51. package/esm/BigBedAdapter/index.js +2 -0
  52. package/esm/BigBedAdapter/index.js.map +1 -0
  53. package/esm/index.d.ts +6 -0
  54. package/esm/index.js +81 -0
  55. package/esm/index.js.map +1 -0
  56. package/esm/util.d.ts +4 -0
  57. package/esm/util.js +154 -0
  58. package/esm/util.js.map +1 -0
  59. package/package.json +18 -9
  60. package/src/BedAdapter/BedAdapter.ts +1 -1
  61. package/src/BedTabixAdapter/BedTabixAdapter.ts +1 -2
  62. package/src/BigBedAdapter/BigBedAdapter.ts +2 -14
  63. package/src/util.ts +1 -1
  64. package/dist/BedAdapter/BedAdapter.test.js +0 -255
  65. package/dist/BedTabixAdapter/BedTabixAdapter.test.js +0 -276
  66. package/dist/BigBedAdapter/BigBedAdapter.test.js +0 -63
  67. package/dist/declare.d.js +0 -1
  68. package/dist/index.test.js +0 -24
  69. package/src/declare.d.ts +0 -1
@@ -0,0 +1,68 @@
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 { TabixIndexedFile } from '@gmod/tabix';
6
+ import { featureData } from '../util';
7
+ export default class BedTabixAdapter extends BaseFeatureDataAdapter {
8
+ constructor(config, getSubAdapter, pluginManager) {
9
+ super(config, getSubAdapter, pluginManager);
10
+ const bedGzLoc = this.getConf('bedGzLocation');
11
+ const type = this.getConf(['index', 'indexType']);
12
+ const loc = this.getConf(['index', 'location']);
13
+ const autoSql = this.getConf('autoSql');
14
+ const pm = this.pluginManager;
15
+ this.bed = new TabixIndexedFile({
16
+ filehandle: openLocation(bedGzLoc, pm),
17
+ csiFilehandle: type === 'CSI' ? openLocation(loc, pm) : undefined,
18
+ tbiFilehandle: type !== 'CSI' ? openLocation(loc, pm) : undefined,
19
+ chunkCacheSize: 50 * 2 ** 20,
20
+ });
21
+ this.columnNames = this.getConf('columnNames');
22
+ this.scoreColumn = this.getConf('scoreColumn');
23
+ this.parser = new BED({ autoSql });
24
+ }
25
+ async getRefNames(opts = {}) {
26
+ return this.bed.getReferenceSequenceNames(opts);
27
+ }
28
+ async getHeader() {
29
+ return this.bed.getHeader();
30
+ }
31
+ async getNames() {
32
+ if (this.columnNames.length) {
33
+ return this.columnNames;
34
+ }
35
+ const header = await this.bed.getHeader();
36
+ const defs = header.split('\n').filter(f => !!f);
37
+ const defline = defs[defs.length - 1];
38
+ return (defline === null || defline === void 0 ? void 0 : defline.includes('\t'))
39
+ ? defline
40
+ .slice(1)
41
+ .split('\t')
42
+ .map(f => f.trim())
43
+ : undefined;
44
+ }
45
+ getFeatures(query, opts = {}) {
46
+ return ObservableCreate(async (observer) => {
47
+ const meta = await this.bed.getMetadata();
48
+ const { columnNumbers } = meta;
49
+ const colRef = columnNumbers.ref - 1;
50
+ const colStart = columnNumbers.start - 1;
51
+ const colEnd = columnNumbers.end - 1;
52
+ // colSame handles special case for tabix where a single column is both
53
+ // the start and end, this is assumed to be covering the base at this
54
+ // position (e.g. tabix -s 1 -b 2 -e 2) begin and end are same
55
+ const names = await this.getNames();
56
+ await this.bed.getLines(query.refName, query.start, query.end, {
57
+ lineCallback: (line, fileOffset) => {
58
+ observer.next(featureData(line, colRef, colStart, colEnd, this.scoreColumn, this.parser, `${this.id}-${fileOffset}`, names));
59
+ },
60
+ signal: opts.signal,
61
+ });
62
+ observer.complete();
63
+ }, opts.signal);
64
+ }
65
+ freeResources() { }
66
+ }
67
+ BedTabixAdapter.capabilities = ['getFeatures', 'getRefNames'];
68
+ //# sourceMappingURL=BedTabixAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BedTabixAdapter.js","sourceRoot":"","sources":["../../src/BedTabixAdapter/BedTabixAdapter.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
+ 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,29 @@
1
+ import { BigBed } from '@gmod/bbi';
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/simpleFeature';
6
+ export default class BigBedAdapter extends BaseFeatureDataAdapter {
7
+ private cached?;
8
+ configurePre(opts?: BaseOptions): Promise<{
9
+ bigbed: BigBed;
10
+ header: import("@gmod/bbi").Header;
11
+ parser: BED;
12
+ }>;
13
+ configure(opts?: BaseOptions): Promise<{
14
+ bigbed: BigBed;
15
+ header: any;
16
+ parser: BED;
17
+ }>;
18
+ getRefNames(opts?: BaseOptions): Promise<string[]>;
19
+ getHeader(opts?: BaseOptions): Promise<{
20
+ version: any;
21
+ fileType: any;
22
+ autoSql: {};
23
+ fields: {
24
+ [k: string]: string;
25
+ };
26
+ }>;
27
+ getFeatures(region: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
28
+ freeResources(): void;
29
+ }
@@ -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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"}
package/esm/util.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { SimpleFeature, Feature } from '@jbrowse/core/util';
2
+ import BED from '@gmod/bed';
3
+ export declare function ucscProcessedTranscript(feature: Feature): Feature | SimpleFeature;
4
+ export declare function featureData(line: string, colRef: number, colStart: number, colEnd: number, scoreColumn: string, parser: BED, uniqueId: string, names?: string[]): Feature | SimpleFeature;
package/esm/util.js ADDED
@@ -0,0 +1,154 @@
1
+ import { SimpleFeature } from '@jbrowse/core/util';
2
+ export function ucscProcessedTranscript(feature) {
3
+ const children = feature.children();
4
+ // split the blocks into UTR, CDS, and exons
5
+ const thickStart = feature.get('thickStart');
6
+ const thickEnd = feature.get('thickEnd');
7
+ if (!thickStart && !thickEnd) {
8
+ return feature;
9
+ }
10
+ const blocks = children
11
+ ? children
12
+ .filter(child => child.get('type') === 'block')
13
+ .sort((a, b) => a.get('start') - b.get('start'))
14
+ : [];
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ const newChildren = [];
17
+ blocks.forEach(block => {
18
+ const start = block.get('start');
19
+ const end = block.get('end');
20
+ if (thickStart >= end) {
21
+ // left-side UTR
22
+ const prime = feature.get('strand') > 0 ? 'five' : 'three';
23
+ newChildren.push({
24
+ type: `${prime}_prime_UTR`,
25
+ start,
26
+ end,
27
+ });
28
+ }
29
+ else if (thickStart > start && thickStart < end && thickEnd >= end) {
30
+ // UTR | CDS
31
+ const prime = feature.get('strand') > 0 ? 'five' : 'three';
32
+ newChildren.push({
33
+ type: `${prime}_prime_UTR`,
34
+ start,
35
+ end: thickStart,
36
+ }, {
37
+ type: 'CDS',
38
+ start: thickStart,
39
+ end,
40
+ });
41
+ }
42
+ else if (thickStart <= start && thickEnd >= end) {
43
+ // CDS
44
+ newChildren.push({
45
+ type: 'CDS',
46
+ start,
47
+ end,
48
+ });
49
+ }
50
+ else if (thickStart > start && thickStart < end && thickEnd < end) {
51
+ // UTR | CDS | UTR
52
+ const leftPrime = feature.get('strand') > 0 ? 'five' : 'three';
53
+ const rightPrime = feature.get('strand') > 0 ? 'three' : 'five';
54
+ newChildren.push({
55
+ type: `${leftPrime}_prime_UTR`,
56
+ start,
57
+ end: thickStart,
58
+ }, {
59
+ type: `CDS`,
60
+ start: thickStart,
61
+ end: thickEnd,
62
+ }, {
63
+ type: `${rightPrime}_prime_UTR`,
64
+ start: thickEnd,
65
+ end,
66
+ });
67
+ }
68
+ else if (thickStart <= start && thickEnd > start && thickEnd < end) {
69
+ // CDS | UTR
70
+ const prime = feature.get('strand') > 0 ? 'three' : 'five';
71
+ newChildren.push({
72
+ type: `CDS`,
73
+ start,
74
+ end: thickEnd,
75
+ }, {
76
+ type: `${prime}_prime_UTR`,
77
+ start: thickEnd,
78
+ end,
79
+ });
80
+ }
81
+ else if (thickEnd <= start) {
82
+ // right-side UTR
83
+ const prime = feature.get('strand') > 0 ? 'three' : 'five';
84
+ newChildren.push({
85
+ type: `${prime}_prime_UTR`,
86
+ start,
87
+ end,
88
+ });
89
+ }
90
+ });
91
+ const newData = Object.fromEntries(feature.tags().map(tag => [tag, feature.get(tag)]));
92
+ newData.subfeatures = newChildren;
93
+ newData.type = 'mRNA';
94
+ newData.uniqueId = feature.id();
95
+ delete newData.chromStarts;
96
+ delete newData.chromStart;
97
+ delete newData.chromEnd;
98
+ delete newData.chrom;
99
+ delete newData.blockStarts;
100
+ delete newData.blockSizes;
101
+ delete newData.blockCount;
102
+ delete newData.thickStart;
103
+ delete newData.thickEnd;
104
+ const newFeature = new SimpleFeature({
105
+ data: newData,
106
+ id: feature.id(),
107
+ });
108
+ return newFeature;
109
+ }
110
+ function defaultParser(fields, line) {
111
+ return Object.fromEntries(line.split('\t').map((f, i) => [fields[i], f]));
112
+ }
113
+ export function featureData(line, colRef, colStart, colEnd, scoreColumn, parser, uniqueId, names) {
114
+ const l = line.split('\t');
115
+ const refName = l[colRef];
116
+ const start = +l[colStart];
117
+ const colSame = colStart === colEnd ? 1 : 0;
118
+ const end = +l[colEnd] + colSame;
119
+ const data = names
120
+ ? defaultParser(names, line)
121
+ : parser.parseLine(line, { uniqueId });
122
+ const { blockCount, blockSizes, blockStarts, chromStarts } = data;
123
+ if (blockCount) {
124
+ const starts = chromStarts || blockStarts || [];
125
+ const sizes = blockSizes;
126
+ const blocksOffset = start;
127
+ data.subfeatures = [];
128
+ for (let b = 0; b < blockCount; b += 1) {
129
+ const bmin = (starts[b] || 0) + blocksOffset;
130
+ const bmax = bmin + (sizes[b] || 0);
131
+ data.subfeatures.push({
132
+ uniqueId: `${uniqueId}-${b}`,
133
+ start: bmin,
134
+ end: bmax,
135
+ type: 'block',
136
+ });
137
+ }
138
+ }
139
+ if (scoreColumn) {
140
+ data.score = +data[scoreColumn];
141
+ }
142
+ delete data.chrom;
143
+ delete data.chromStart;
144
+ delete data.chromEnd;
145
+ const f = new SimpleFeature({
146
+ ...data,
147
+ start,
148
+ end,
149
+ refName,
150
+ uniqueId,
151
+ });
152
+ return f.get('thickStart') ? ucscProcessedTranscript(f) : f;
153
+ }
154
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-bed",
3
- "version": "1.7.11",
3
+ "version": "2.1.0",
4
4
  "description": "JBrowse 2 bed adapters, tracks, etc.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -20,33 +20,42 @@
20
20
  "main": "dist/index.js",
21
21
  "files": [
22
22
  "dist",
23
- "src"
23
+ "src",
24
+ "esm"
24
25
  ],
25
26
  "scripts": {
26
- "build": "babel src --root-mode upward --out-dir dist --extensions .ts,.js,.tsx,.jsx",
27
+ "build": "npm-run-all build:*",
27
28
  "test": "cd ../..; jest plugins/bed",
28
29
  "prepublishOnly": "yarn test",
29
30
  "prepack": "yarn build; yarn useDist",
30
31
  "postpack": "yarn useSrc",
31
32
  "useDist": "node ../../scripts/useDist.js",
32
33
  "useSrc": "node ../../scripts/useSrc.js",
33
- "postbuild": "tsc --build tsconfig.build.json"
34
+ "prebuild": "npm run clean",
35
+ "build:esm": "tsc --build tsconfig.build.esm.json",
36
+ "build:es5": "tsc --build tsconfig.build.es5.json",
37
+ "clean": "rimraf dist esm *.tsbuildinfo"
34
38
  },
35
39
  "dependencies": {
36
40
  "@babel/runtime": "^7.17.9",
37
41
  "@flatten-js/interval-tree": "^1.0.15",
38
- "@gmod/bbi": "^1.0.35",
39
- "@gmod/bed": "^2.0.6",
42
+ "@gmod/bbi": "^2.0.2",
43
+ "@gmod/bed": "^2.1.2",
40
44
  "@gmod/bgzf-filehandle": "^1.4.3",
41
45
  "@gmod/tabix": "^1.5.2"
42
46
  },
43
47
  "peerDependencies": {
44
- "@jbrowse/core": "^1.0.0",
45
- "mobx-state-tree": "3.14.1",
48
+ "@jbrowse/core": "^2.0.0",
49
+ "mobx": "^6.0.0",
50
+ "mobx-react": "^7.0.0",
51
+ "mobx-state-tree": "^5.0.0",
46
52
  "rxjs": "^6.0.0"
47
53
  },
48
54
  "publishConfig": {
49
55
  "access": "public"
50
56
  },
51
- "gitHead": "5c21beb48a21f08b0091d293f09ac99174c48f77"
57
+ "distModule": "esm/index.js",
58
+ "srcModule": "src/index.ts",
59
+ "module": "esm/index.js",
60
+ "gitHead": "0db0462fa1f9f15ab4869da085bcab032b9483c3"
52
61
  }
@@ -18,7 +18,7 @@ export default class BedAdapter extends BaseFeatureDataAdapter {
18
18
  protected bedFeatures?: Promise<{
19
19
  header: string
20
20
  features: Record<string, string[]>
21
- parser: typeof BED
21
+ parser: BED
22
22
  columnNames: string[]
23
23
  scoreColumn: string
24
24
  colRef: number