@jbrowse/plugin-bed 2.6.1 → 2.6.3
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.
- package/dist/BedAdapter/BedAdapter.js +0 -1
- package/dist/BedAdapter/configSchema.js +0 -1
- package/dist/BedAdapter/index.js +0 -1
- package/dist/BedTabixAdapter/BedTabixAdapter.js +0 -1
- package/dist/BedTabixAdapter/configSchema.js +0 -1
- package/dist/BedTabixAdapter/index.js +0 -1
- package/dist/BedpeAdapter/BedpeAdapter.js +0 -1
- package/dist/BedpeAdapter/configSchema.js +0 -1
- package/dist/BedpeAdapter/index.js +0 -1
- package/dist/BigBedAdapter/BigBedAdapter.js +0 -1
- package/dist/BigBedAdapter/configSchema.js +0 -1
- package/dist/BigBedAdapter/index.js +0 -1
- package/dist/index.js +0 -1
- package/dist/util.js +0 -1
- package/esm/BedAdapter/BedAdapter.js +0 -1
- package/esm/BedAdapter/configSchema.js +0 -1
- package/esm/BedAdapter/index.js +0 -1
- package/esm/BedTabixAdapter/BedTabixAdapter.js +0 -1
- package/esm/BedTabixAdapter/configSchema.js +0 -1
- package/esm/BedTabixAdapter/index.js +0 -1
- package/esm/BedpeAdapter/BedpeAdapter.js +0 -1
- package/esm/BedpeAdapter/configSchema.js +0 -1
- package/esm/BedpeAdapter/index.js +0 -1
- package/esm/BigBedAdapter/BigBedAdapter.js +0 -1
- package/esm/BigBedAdapter/configSchema.js +0 -1
- package/esm/BigBedAdapter/index.js +0 -1
- package/esm/index.js +0 -1
- package/esm/util.js +0 -1
- package/package.json +3 -4
- package/dist/BedAdapter/BedAdapter.js.map +0 -1
- package/dist/BedAdapter/configSchema.js.map +0 -1
- package/dist/BedAdapter/index.js.map +0 -1
- package/dist/BedTabixAdapter/BedTabixAdapter.js.map +0 -1
- package/dist/BedTabixAdapter/configSchema.js.map +0 -1
- package/dist/BedTabixAdapter/index.js.map +0 -1
- package/dist/BedpeAdapter/BedpeAdapter.js.map +0 -1
- package/dist/BedpeAdapter/configSchema.js.map +0 -1
- package/dist/BedpeAdapter/index.js.map +0 -1
- package/dist/BigBedAdapter/BigBedAdapter.js.map +0 -1
- package/dist/BigBedAdapter/configSchema.js.map +0 -1
- package/dist/BigBedAdapter/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/util.js.map +0 -1
- package/esm/BedAdapter/BedAdapter.js.map +0 -1
- package/esm/BedAdapter/configSchema.js.map +0 -1
- package/esm/BedAdapter/index.js.map +0 -1
- package/esm/BedTabixAdapter/BedTabixAdapter.js.map +0 -1
- package/esm/BedTabixAdapter/configSchema.js.map +0 -1
- package/esm/BedTabixAdapter/index.js.map +0 -1
- package/esm/BedpeAdapter/BedpeAdapter.js.map +0 -1
- package/esm/BedpeAdapter/configSchema.js.map +0 -1
- package/esm/BedpeAdapter/index.js.map +0 -1
- package/esm/BigBedAdapter/BigBedAdapter.js.map +0 -1
- package/esm/BigBedAdapter/configSchema.js.map +0 -1
- package/esm/BigBedAdapter/index.js.map +0 -1
- package/esm/index.js.map +0 -1
- package/esm/util.js.map +0 -1
- package/src/BedAdapter/BedAdapter.test.ts +0 -166
- package/src/BedAdapter/BedAdapter.ts +0 -171
- package/src/BedAdapter/__snapshots__/BedAdapter.test.ts.snap +0 -437
- package/src/BedAdapter/configSchema.ts +0 -69
- package/src/BedAdapter/index.ts +0 -16
- package/src/BedAdapter/test_data/gwas.bed +0 -20
- package/src/BedAdapter/test_data/volvox-autosql.bed +0 -1
- package/src/BedAdapter/test_data/volvox-bed12.bed +0 -4
- package/src/BedAdapter/test_data/volvox.sort.bed +0 -109
- package/src/BedAdapter/test_data/volvox.sort.with.header.bed +0 -121
- package/src/BedTabixAdapter/BedTabixAdapter.test.ts +0 -196
- package/src/BedTabixAdapter/BedTabixAdapter.ts +0 -105
- package/src/BedTabixAdapter/__snapshots__/BedTabixAdapter.test.ts.snap +0 -437
- package/src/BedTabixAdapter/configSchema.ts +0 -71
- package/src/BedTabixAdapter/index.ts +0 -16
- package/src/BedTabixAdapter/test_data/gwas.bed.gz +0 -0
- package/src/BedTabixAdapter/test_data/gwas.bed.gz.tbi +0 -0
- package/src/BedTabixAdapter/test_data/volvox-autosql.bed.gz +0 -0
- package/src/BedTabixAdapter/test_data/volvox-autosql.bed.gz.tbi +0 -0
- package/src/BedTabixAdapter/test_data/volvox-bed12.bed.gz +0 -0
- package/src/BedTabixAdapter/test_data/volvox-bed12.bed.gz.tbi +0 -0
- package/src/BedTabixAdapter/test_data/volvox.sort.bed.gz +0 -0
- package/src/BedTabixAdapter/test_data/volvox.sort.bed.gz.tbi +0 -0
- package/src/BedTabixAdapter/test_data/volvox.sort.with.header.bed.gz +0 -0
- package/src/BedTabixAdapter/test_data/volvox.sort.with.header.bed.gz.tbi +0 -0
- package/src/BedpeAdapter/BedpeAdapter.ts +0 -208
- package/src/BedpeAdapter/configSchema.ts +0 -34
- package/src/BedpeAdapter/index.ts +0 -16
- package/src/BigBedAdapter/BigBedAdapter.test.ts +0 -28
- package/src/BigBedAdapter/BigBedAdapter.ts +0 -127
- package/src/BigBedAdapter/__snapshots__/BigBedAdapter.test.ts.snap +0 -254
- package/src/BigBedAdapter/configSchema.ts +0 -22
- package/src/BigBedAdapter/index.ts +0 -16
- package/src/BigBedAdapter/test_data/volvox.bb +0 -0
- package/src/__snapshots__/index.test.ts.snap +0 -3
- package/src/index.test.ts +0 -16
- package/src/index.ts +0 -133
- package/src/util.ts +0 -180
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager'
|
|
2
|
-
import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'
|
|
3
|
-
|
|
4
|
-
import configSchema from './configSchema'
|
|
5
|
-
|
|
6
|
-
export default (pluginManager: PluginManager) => {
|
|
7
|
-
pluginManager.addAdapterType(
|
|
8
|
-
() =>
|
|
9
|
-
new AdapterType({
|
|
10
|
-
name: 'BigBedAdapter',
|
|
11
|
-
displayName: 'BigBed adapter',
|
|
12
|
-
configSchema,
|
|
13
|
-
getAdapterClass: () => import('./BigBedAdapter').then(r => r.default),
|
|
14
|
-
}),
|
|
15
|
-
)
|
|
16
|
-
}
|
|
Binary file
|
package/src/index.test.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager'
|
|
2
|
-
import { getSnapshot } from 'mobx-state-tree'
|
|
3
|
-
import ThisPlugin from '.'
|
|
4
|
-
|
|
5
|
-
test('plugin in a stock JBrowse', () => {
|
|
6
|
-
const pluginManager = new PluginManager([new ThisPlugin()])
|
|
7
|
-
pluginManager.createPluggableElements()
|
|
8
|
-
pluginManager.configure()
|
|
9
|
-
expect(() => pluginManager.addPlugin(new ThisPlugin())).toThrow(
|
|
10
|
-
/JBrowse already configured, cannot add plugins/,
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
const BigBedAdapter = pluginManager.getAdapterType('BigBedAdapter')
|
|
14
|
-
const config = BigBedAdapter.configSchema.create({ type: 'BigBedAdapter' })
|
|
15
|
-
expect(getSnapshot(config)).toMatchSnapshot()
|
|
16
|
-
})
|
package/src/index.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import Plugin from '@jbrowse/core/Plugin'
|
|
2
|
-
import PluginManager from '@jbrowse/core/PluginManager'
|
|
3
|
-
import BigBedAdapterF from './BigBedAdapter'
|
|
4
|
-
import BedpeAdapterF from './BedpeAdapter'
|
|
5
|
-
import BedTabixAdapterF from './BedTabixAdapter'
|
|
6
|
-
import BedAdapterF from './BedAdapter'
|
|
7
|
-
import { FileLocation } from '@jbrowse/core/util/types'
|
|
8
|
-
import {
|
|
9
|
-
getFileName,
|
|
10
|
-
makeIndex,
|
|
11
|
-
makeIndexType,
|
|
12
|
-
AdapterGuesser,
|
|
13
|
-
TrackTypeGuesser,
|
|
14
|
-
} from '@jbrowse/core/util/tracks'
|
|
15
|
-
|
|
16
|
-
export default class BedPlugin extends Plugin {
|
|
17
|
-
name = 'BedPlugin'
|
|
18
|
-
|
|
19
|
-
install(pluginManager: PluginManager) {
|
|
20
|
-
BigBedAdapterF(pluginManager)
|
|
21
|
-
BedAdapterF(pluginManager)
|
|
22
|
-
BedpeAdapterF(pluginManager)
|
|
23
|
-
BedTabixAdapterF(pluginManager)
|
|
24
|
-
pluginManager.addToExtensionPoint(
|
|
25
|
-
'Core-guessAdapterForLocation',
|
|
26
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
27
|
-
return (
|
|
28
|
-
file: FileLocation,
|
|
29
|
-
index?: FileLocation,
|
|
30
|
-
adapterHint?: string,
|
|
31
|
-
) => {
|
|
32
|
-
const regexGuess = /\.(bb|bigbed)$/i
|
|
33
|
-
const adapterName = 'BigBedAdapter'
|
|
34
|
-
const fileName = getFileName(file)
|
|
35
|
-
const obj = {
|
|
36
|
-
type: adapterName,
|
|
37
|
-
bigBedLocation: file,
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (regexGuess.test(fileName) && !adapterHint) {
|
|
41
|
-
return obj
|
|
42
|
-
} else if (adapterHint === adapterName) {
|
|
43
|
-
return obj
|
|
44
|
-
}
|
|
45
|
-
return adapterGuesser(file, index, adapterHint)
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
pluginManager.addToExtensionPoint(
|
|
51
|
-
'Core-guessAdapterForLocation',
|
|
52
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
53
|
-
return (
|
|
54
|
-
file: FileLocation,
|
|
55
|
-
index?: FileLocation,
|
|
56
|
-
adapterHint?: string,
|
|
57
|
-
) => {
|
|
58
|
-
const regexGuess = /\.bedpe\.gz$/i
|
|
59
|
-
const adapterName = 'BedpeAdapter'
|
|
60
|
-
const fileName = getFileName(file)
|
|
61
|
-
if (regexGuess.test(fileName) || adapterHint === adapterName) {
|
|
62
|
-
return {
|
|
63
|
-
type: adapterName,
|
|
64
|
-
bedpeLocation: file,
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return adapterGuesser(file, index, adapterHint)
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
pluginManager.addToExtensionPoint(
|
|
73
|
-
'Core-guessAdapterForLocation',
|
|
74
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
75
|
-
return (
|
|
76
|
-
file: FileLocation,
|
|
77
|
-
index?: FileLocation,
|
|
78
|
-
adapterHint?: string,
|
|
79
|
-
) => {
|
|
80
|
-
const regexGuess = /\.bed\.b?gz$/i
|
|
81
|
-
const adapterName = 'BedTabixAdapter'
|
|
82
|
-
const fileName = getFileName(file)
|
|
83
|
-
const indexName = index && getFileName(index)
|
|
84
|
-
if (regexGuess.test(fileName) || adapterHint === adapterName) {
|
|
85
|
-
return {
|
|
86
|
-
type: adapterName,
|
|
87
|
-
bedGzLocation: file,
|
|
88
|
-
index: {
|
|
89
|
-
location: index || makeIndex(file, '.tbi'),
|
|
90
|
-
indexType: makeIndexType(indexName, 'CSI', 'TBI'),
|
|
91
|
-
},
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return adapterGuesser(file, index, adapterHint)
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
pluginManager.addToExtensionPoint(
|
|
100
|
-
'Core-guessAdapterForLocation',
|
|
101
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
102
|
-
return (
|
|
103
|
-
file: FileLocation,
|
|
104
|
-
index?: FileLocation,
|
|
105
|
-
adapterHint?: string,
|
|
106
|
-
) => {
|
|
107
|
-
const regexGuess = /\.bed$/i
|
|
108
|
-
const adapterName = 'BedAdapter'
|
|
109
|
-
const fileName = getFileName(file)
|
|
110
|
-
if (regexGuess.test(fileName) || adapterHint === adapterName) {
|
|
111
|
-
return {
|
|
112
|
-
type: adapterName,
|
|
113
|
-
bedLocation: file,
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return adapterGuesser(file, index, adapterHint)
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
pluginManager.addToExtensionPoint(
|
|
122
|
-
'Core-guessTrackTypeForLocation',
|
|
123
|
-
(trackTypeGuesser: TrackTypeGuesser) => {
|
|
124
|
-
return (adapterName: string) => {
|
|
125
|
-
if (adapterName === 'BedpeAdapter') {
|
|
126
|
-
return 'VariantTrack'
|
|
127
|
-
}
|
|
128
|
-
return trackTypeGuesser(adapterName)
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
)
|
|
132
|
-
}
|
|
133
|
-
}
|
package/src/util.ts
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { SimpleFeature, Feature } from '@jbrowse/core/util'
|
|
2
|
-
import BED from '@gmod/bed'
|
|
3
|
-
|
|
4
|
-
export function ucscProcessedTranscript(feature: Feature) {
|
|
5
|
-
const children = feature.children()
|
|
6
|
-
// split the blocks into UTR, CDS, and exons
|
|
7
|
-
const thickStart = feature.get('thickStart')
|
|
8
|
-
const thickEnd = feature.get('thickEnd')
|
|
9
|
-
|
|
10
|
-
if (!thickStart && !thickEnd) {
|
|
11
|
-
return feature
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const blocks: Feature[] = children
|
|
15
|
-
? children
|
|
16
|
-
.filter(child => child.get('type') === 'block')
|
|
17
|
-
.sort((a, b) => a.get('start') - b.get('start'))
|
|
18
|
-
: []
|
|
19
|
-
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
-
const newChildren: Record<string, any> = []
|
|
22
|
-
blocks.forEach(block => {
|
|
23
|
-
const start = block.get('start')
|
|
24
|
-
const end = block.get('end')
|
|
25
|
-
if (thickStart >= end) {
|
|
26
|
-
// left-side UTR
|
|
27
|
-
const prime = feature.get('strand') > 0 ? 'five' : 'three'
|
|
28
|
-
newChildren.push({
|
|
29
|
-
type: `${prime}_prime_UTR`,
|
|
30
|
-
start,
|
|
31
|
-
end,
|
|
32
|
-
})
|
|
33
|
-
} else if (thickStart > start && thickStart < end && thickEnd >= end) {
|
|
34
|
-
// UTR | CDS
|
|
35
|
-
const prime = feature.get('strand') > 0 ? 'five' : 'three'
|
|
36
|
-
newChildren.push(
|
|
37
|
-
{
|
|
38
|
-
type: `${prime}_prime_UTR`,
|
|
39
|
-
start,
|
|
40
|
-
end: thickStart,
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
type: 'CDS',
|
|
44
|
-
start: thickStart,
|
|
45
|
-
end,
|
|
46
|
-
},
|
|
47
|
-
)
|
|
48
|
-
} else if (thickStart <= start && thickEnd >= end) {
|
|
49
|
-
// CDS
|
|
50
|
-
newChildren.push({
|
|
51
|
-
type: 'CDS',
|
|
52
|
-
start,
|
|
53
|
-
end,
|
|
54
|
-
})
|
|
55
|
-
} else if (thickStart > start && thickStart < end && thickEnd < end) {
|
|
56
|
-
// UTR | CDS | UTR
|
|
57
|
-
const leftPrime = feature.get('strand') > 0 ? 'five' : 'three'
|
|
58
|
-
const rightPrime = feature.get('strand') > 0 ? 'three' : 'five'
|
|
59
|
-
newChildren.push(
|
|
60
|
-
{
|
|
61
|
-
type: `${leftPrime}_prime_UTR`,
|
|
62
|
-
start,
|
|
63
|
-
end: thickStart,
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
type: `CDS`,
|
|
67
|
-
start: thickStart,
|
|
68
|
-
end: thickEnd,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
type: `${rightPrime}_prime_UTR`,
|
|
72
|
-
start: thickEnd,
|
|
73
|
-
end,
|
|
74
|
-
},
|
|
75
|
-
)
|
|
76
|
-
} else if (thickStart <= start && thickEnd > start && thickEnd < end) {
|
|
77
|
-
// CDS | UTR
|
|
78
|
-
const prime = feature.get('strand') > 0 ? 'three' : 'five'
|
|
79
|
-
newChildren.push(
|
|
80
|
-
{
|
|
81
|
-
type: `CDS`,
|
|
82
|
-
start,
|
|
83
|
-
end: thickEnd,
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
type: `${prime}_prime_UTR`,
|
|
87
|
-
start: thickEnd,
|
|
88
|
-
end,
|
|
89
|
-
},
|
|
90
|
-
)
|
|
91
|
-
} else if (thickEnd <= start) {
|
|
92
|
-
// right-side UTR
|
|
93
|
-
const prime = feature.get('strand') > 0 ? 'three' : 'five'
|
|
94
|
-
newChildren.push({
|
|
95
|
-
type: `${prime}_prime_UTR`,
|
|
96
|
-
start,
|
|
97
|
-
end,
|
|
98
|
-
})
|
|
99
|
-
}
|
|
100
|
-
})
|
|
101
|
-
const newData = Object.fromEntries(
|
|
102
|
-
feature.tags().map(tag => [tag, feature.get(tag)]),
|
|
103
|
-
)
|
|
104
|
-
newData.subfeatures = newChildren
|
|
105
|
-
newData.type = 'mRNA'
|
|
106
|
-
newData.uniqueId = feature.id()
|
|
107
|
-
delete newData.chromStarts
|
|
108
|
-
delete newData.chromStart
|
|
109
|
-
delete newData.chromEnd
|
|
110
|
-
delete newData.chrom
|
|
111
|
-
delete newData.blockStarts
|
|
112
|
-
delete newData.blockSizes
|
|
113
|
-
delete newData.blockCount
|
|
114
|
-
delete newData.thickStart
|
|
115
|
-
delete newData.thickEnd
|
|
116
|
-
return new SimpleFeature({
|
|
117
|
-
data: newData,
|
|
118
|
-
id: feature.id(),
|
|
119
|
-
})
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function defaultParser(fields: string[], line: string) {
|
|
123
|
-
return Object.fromEntries(line.split('\t').map((f, i) => [fields[i], f]))
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export function featureData(
|
|
127
|
-
line: string,
|
|
128
|
-
colRef: number,
|
|
129
|
-
colStart: number,
|
|
130
|
-
colEnd: number,
|
|
131
|
-
scoreColumn: string,
|
|
132
|
-
parser: BED,
|
|
133
|
-
uniqueId: string,
|
|
134
|
-
names?: string[],
|
|
135
|
-
) {
|
|
136
|
-
const l = line.split('\t')
|
|
137
|
-
const refName = l[colRef]
|
|
138
|
-
const start = +l[colStart]
|
|
139
|
-
const colSame = colStart === colEnd ? 1 : 0
|
|
140
|
-
|
|
141
|
-
const end = +l[colEnd] + colSame
|
|
142
|
-
const data = names
|
|
143
|
-
? defaultParser(names, line)
|
|
144
|
-
: parser.parseLine(line, { uniqueId })
|
|
145
|
-
|
|
146
|
-
const { blockCount, blockSizes, blockStarts, chromStarts } = data
|
|
147
|
-
|
|
148
|
-
if (blockCount) {
|
|
149
|
-
const starts = chromStarts || blockStarts || []
|
|
150
|
-
const sizes = blockSizes
|
|
151
|
-
const blocksOffset = start
|
|
152
|
-
data.subfeatures = []
|
|
153
|
-
|
|
154
|
-
for (let b = 0; b < blockCount; b += 1) {
|
|
155
|
-
const bmin = (starts[b] || 0) + blocksOffset
|
|
156
|
-
const bmax = bmin + (sizes[b] || 0)
|
|
157
|
-
data.subfeatures.push({
|
|
158
|
-
uniqueId: `${uniqueId}-${b}`,
|
|
159
|
-
start: bmin,
|
|
160
|
-
end: bmax,
|
|
161
|
-
type: 'block',
|
|
162
|
-
})
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
if (scoreColumn) {
|
|
167
|
-
data.score = +data[scoreColumn]
|
|
168
|
-
}
|
|
169
|
-
delete data.chrom
|
|
170
|
-
delete data.chromStart
|
|
171
|
-
delete data.chromEnd
|
|
172
|
-
const f = new SimpleFeature({
|
|
173
|
-
...data,
|
|
174
|
-
start,
|
|
175
|
-
end,
|
|
176
|
-
refName,
|
|
177
|
-
uniqueId,
|
|
178
|
-
})
|
|
179
|
-
return f.get('thickStart') ? ucscProcessedTranscript(f) : f
|
|
180
|
-
}
|