@jbrowse/plugin-bed 2.5.0 → 2.6.2
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 +1 -2
- package/dist/BedAdapter/configSchema.js +0 -1
- package/dist/BedAdapter/index.js +0 -1
- package/dist/BedTabixAdapter/BedTabixAdapter.js +1 -2
- package/dist/BedTabixAdapter/configSchema.js +0 -1
- package/dist/BedTabixAdapter/index.js +0 -1
- package/dist/BedpeAdapter/BedpeAdapter.d.ts +2 -2
- package/dist/BedpeAdapter/BedpeAdapter.js +11 -6
- package/dist/BedpeAdapter/configSchema.js +0 -1
- package/dist/BedpeAdapter/index.js +0 -1
- package/dist/BigBedAdapter/BigBedAdapter.js +2 -3
- package/dist/BigBedAdapter/configSchema.js +0 -1
- package/dist/BigBedAdapter/index.js +0 -1
- package/dist/index.js +8 -1
- package/dist/util.js +1 -3
- package/esm/BedAdapter/BedAdapter.js +1 -2
- package/esm/BedAdapter/configSchema.js +0 -1
- package/esm/BedAdapter/index.js +0 -1
- package/esm/BedTabixAdapter/BedTabixAdapter.js +1 -2
- package/esm/BedTabixAdapter/configSchema.js +0 -1
- package/esm/BedTabixAdapter/index.js +0 -1
- package/esm/BedpeAdapter/BedpeAdapter.d.ts +2 -2
- package/esm/BedpeAdapter/BedpeAdapter.js +11 -6
- package/esm/BedpeAdapter/configSchema.js +0 -1
- package/esm/BedpeAdapter/index.js +0 -1
- package/esm/BigBedAdapter/BigBedAdapter.js +2 -3
- package/esm/BigBedAdapter/configSchema.js +0 -1
- package/esm/BigBedAdapter/index.js +0 -1
- package/esm/index.js +8 -1
- package/esm/util.js +1 -3
- package/package.json +4 -5
- 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 -202
- 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 -130
- 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 -120
- package/src/util.ts +0 -181
|
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,120 +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
|
-
} from '@jbrowse/core/util/tracks'
|
|
14
|
-
|
|
15
|
-
export default class BedPlugin extends Plugin {
|
|
16
|
-
name = 'BedPlugin'
|
|
17
|
-
|
|
18
|
-
install(pluginManager: PluginManager) {
|
|
19
|
-
BigBedAdapterF(pluginManager)
|
|
20
|
-
BedAdapterF(pluginManager)
|
|
21
|
-
BedpeAdapterF(pluginManager)
|
|
22
|
-
BedTabixAdapterF(pluginManager)
|
|
23
|
-
pluginManager.addToExtensionPoint(
|
|
24
|
-
'Core-guessAdapterForLocation',
|
|
25
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
26
|
-
return (
|
|
27
|
-
file: FileLocation,
|
|
28
|
-
index?: FileLocation,
|
|
29
|
-
adapterHint?: string,
|
|
30
|
-
) => {
|
|
31
|
-
const regexGuess = /\.(bb|bigbed)$/i
|
|
32
|
-
const adapterName = 'BigBedAdapter'
|
|
33
|
-
const fileName = getFileName(file)
|
|
34
|
-
const obj = {
|
|
35
|
-
type: adapterName,
|
|
36
|
-
bigBedLocation: file,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (regexGuess.test(fileName) && !adapterHint) {
|
|
40
|
-
return obj
|
|
41
|
-
} else if (adapterHint === adapterName) {
|
|
42
|
-
return obj
|
|
43
|
-
}
|
|
44
|
-
return adapterGuesser(file, index, adapterHint)
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
pluginManager.addToExtensionPoint(
|
|
50
|
-
'Core-guessAdapterForLocation',
|
|
51
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
52
|
-
return (
|
|
53
|
-
file: FileLocation,
|
|
54
|
-
index?: FileLocation,
|
|
55
|
-
adapterHint?: string,
|
|
56
|
-
) => {
|
|
57
|
-
const regexGuess = /\.bedpe\.gz$/i
|
|
58
|
-
const adapterName = 'BedpeAdapter'
|
|
59
|
-
const fileName = getFileName(file)
|
|
60
|
-
if (regexGuess.test(fileName) || adapterHint === adapterName) {
|
|
61
|
-
return {
|
|
62
|
-
type: adapterName,
|
|
63
|
-
bedpeLocation: file,
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return adapterGuesser(file, index, adapterHint)
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
pluginManager.addToExtensionPoint(
|
|
72
|
-
'Core-guessAdapterForLocation',
|
|
73
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
74
|
-
return (
|
|
75
|
-
file: FileLocation,
|
|
76
|
-
index?: FileLocation,
|
|
77
|
-
adapterHint?: string,
|
|
78
|
-
) => {
|
|
79
|
-
const regexGuess = /\.bed\.b?gz$/i
|
|
80
|
-
const adapterName = 'BedTabixAdapter'
|
|
81
|
-
const fileName = getFileName(file)
|
|
82
|
-
const indexName = index && getFileName(index)
|
|
83
|
-
if (regexGuess.test(fileName) || adapterHint === adapterName) {
|
|
84
|
-
return {
|
|
85
|
-
type: adapterName,
|
|
86
|
-
bedGzLocation: file,
|
|
87
|
-
index: {
|
|
88
|
-
location: index || makeIndex(file, '.tbi'),
|
|
89
|
-
indexType: makeIndexType(indexName, 'CSI', 'TBI'),
|
|
90
|
-
},
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return adapterGuesser(file, index, adapterHint)
|
|
94
|
-
}
|
|
95
|
-
},
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
pluginManager.addToExtensionPoint(
|
|
99
|
-
'Core-guessAdapterForLocation',
|
|
100
|
-
(adapterGuesser: AdapterGuesser) => {
|
|
101
|
-
return (
|
|
102
|
-
file: FileLocation,
|
|
103
|
-
index?: FileLocation,
|
|
104
|
-
adapterHint?: string,
|
|
105
|
-
) => {
|
|
106
|
-
const regexGuess = /\.bed$/i
|
|
107
|
-
const adapterName = 'BedAdapter'
|
|
108
|
-
const fileName = getFileName(file)
|
|
109
|
-
if (regexGuess.test(fileName) || adapterHint === adapterName) {
|
|
110
|
-
return {
|
|
111
|
-
type: adapterName,
|
|
112
|
-
bedLocation: file,
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return adapterGuesser(file, index, adapterHint)
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
)
|
|
119
|
-
}
|
|
120
|
-
}
|
package/src/util.ts
DELETED
|
@@ -1,181 +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
|
-
const newFeature = new SimpleFeature({
|
|
117
|
-
data: newData,
|
|
118
|
-
id: feature.id(),
|
|
119
|
-
})
|
|
120
|
-
return newFeature
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function defaultParser(fields: string[], line: string) {
|
|
124
|
-
return Object.fromEntries(line.split('\t').map((f, i) => [fields[i], f]))
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function featureData(
|
|
128
|
-
line: string,
|
|
129
|
-
colRef: number,
|
|
130
|
-
colStart: number,
|
|
131
|
-
colEnd: number,
|
|
132
|
-
scoreColumn: string,
|
|
133
|
-
parser: BED,
|
|
134
|
-
uniqueId: string,
|
|
135
|
-
names?: string[],
|
|
136
|
-
) {
|
|
137
|
-
const l = line.split('\t')
|
|
138
|
-
const refName = l[colRef]
|
|
139
|
-
const start = +l[colStart]
|
|
140
|
-
const colSame = colStart === colEnd ? 1 : 0
|
|
141
|
-
|
|
142
|
-
const end = +l[colEnd] + colSame
|
|
143
|
-
const data = names
|
|
144
|
-
? defaultParser(names, line)
|
|
145
|
-
: parser.parseLine(line, { uniqueId })
|
|
146
|
-
|
|
147
|
-
const { blockCount, blockSizes, blockStarts, chromStarts } = data
|
|
148
|
-
|
|
149
|
-
if (blockCount) {
|
|
150
|
-
const starts = chromStarts || blockStarts || []
|
|
151
|
-
const sizes = blockSizes
|
|
152
|
-
const blocksOffset = start
|
|
153
|
-
data.subfeatures = []
|
|
154
|
-
|
|
155
|
-
for (let b = 0; b < blockCount; b += 1) {
|
|
156
|
-
const bmin = (starts[b] || 0) + blocksOffset
|
|
157
|
-
const bmax = bmin + (sizes[b] || 0)
|
|
158
|
-
data.subfeatures.push({
|
|
159
|
-
uniqueId: `${uniqueId}-${b}`,
|
|
160
|
-
start: bmin,
|
|
161
|
-
end: bmax,
|
|
162
|
-
type: 'block',
|
|
163
|
-
})
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if (scoreColumn) {
|
|
168
|
-
data.score = +data[scoreColumn]
|
|
169
|
-
}
|
|
170
|
-
delete data.chrom
|
|
171
|
-
delete data.chromStart
|
|
172
|
-
delete data.chromEnd
|
|
173
|
-
const f = new SimpleFeature({
|
|
174
|
-
...data,
|
|
175
|
-
start,
|
|
176
|
-
end,
|
|
177
|
-
refName,
|
|
178
|
-
uniqueId,
|
|
179
|
-
})
|
|
180
|
-
return f.get('thickStart') ? ucscProcessedTranscript(f) : f
|
|
181
|
-
}
|