jbrowse-plugin-msaview 2.0.1 → 2.0.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/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.js +3 -3
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.js.map +1 -1
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.d.ts +1 -2
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.js +1 -2
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.js.map +1 -1
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js +2 -2
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js.map +1 -1
- package/dist/MsaViewPanel/model.d.ts +65 -31
- package/dist/MsaViewPanel/model.js +27 -19
- package/dist/MsaViewPanel/model.js.map +1 -1
- package/dist/jbrowse-plugin-msaview.umd.production.min.js +26 -26
- package/dist/jbrowse-plugin-msaview.umd.production.min.js.map +4 -4
- package/dist/utils/msa.js +31 -11
- package/dist/utils/msa.js.map +1 -1
- package/dist/utils/ncbiBlast.js +6 -6
- package/dist/utils/ncbiBlast.js.map +1 -1
- package/package.json +5 -4
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.tsx +3 -3
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/index.tsx +1 -2
- package/src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx +2 -1
- package/src/MsaViewPanel/model.ts +25 -19
- package/src/utils/msa.ts +38 -8
- package/src/utils/ncbiBlast.ts +6 -6
package/dist/utils/msa.js
CHANGED
|
@@ -45,6 +45,21 @@ async function runKalign({ sequence, onProgress, }) {
|
|
|
45
45
|
tree: await textfetch(`${base}/kalign/result/${jobId}/phylotree`),
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
|
+
async function runMafft({ sequence, onProgress, }) {
|
|
49
|
+
const jobId = await textfetch(`${base}/mafft/run`, {
|
|
50
|
+
method: 'POST',
|
|
51
|
+
body: new URLSearchParams({
|
|
52
|
+
email: 'colin.diesh@gmail.com',
|
|
53
|
+
stype: 'protein',
|
|
54
|
+
sequence,
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
await wait({ jobId, algorithm: 'mafft', onProgress });
|
|
58
|
+
return {
|
|
59
|
+
msa: await textfetch(`${base}/mafft/result/${jobId}/fa`),
|
|
60
|
+
tree: await textfetch(`${base}/mafft/result/${jobId}/phylotree`),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
48
63
|
async function wait({ onProgress, jobId, algorithm, }) {
|
|
49
64
|
while (true) {
|
|
50
65
|
for (let i = 0; i < 10; i++) {
|
|
@@ -59,17 +74,22 @@ async function wait({ onProgress, jobId, algorithm, }) {
|
|
|
59
74
|
}
|
|
60
75
|
export async function launchMSA({ algorithm, sequence, onProgress, }) {
|
|
61
76
|
onProgress(`Launching ${algorithm} MSA...`);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
switch (algorithm) {
|
|
78
|
+
case 'clustalo': {
|
|
79
|
+
return runClustalOmega({ sequence, onProgress });
|
|
80
|
+
}
|
|
81
|
+
case 'muscle': {
|
|
82
|
+
return runMuscle({ sequence, onProgress });
|
|
83
|
+
}
|
|
84
|
+
case 'kalign': {
|
|
85
|
+
return runKalign({ sequence, onProgress });
|
|
86
|
+
}
|
|
87
|
+
case 'mafft': {
|
|
88
|
+
return runMafft({ sequence, onProgress });
|
|
89
|
+
}
|
|
90
|
+
default: {
|
|
91
|
+
throw new Error('unknown algorithm');
|
|
92
|
+
}
|
|
73
93
|
}
|
|
74
94
|
}
|
|
75
95
|
//# sourceMappingURL=msa.js.map
|
package/dist/utils/msa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msa.js","sourceRoot":"","sources":["../../src/utils/msa.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"msa.js","sourceRoot":"","sources":["../../src/utils/msa.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/ncbiBlast.js
CHANGED
|
@@ -32,8 +32,8 @@ async function initialQuery({ query, blastProgram, blastDatabase, }) {
|
|
|
32
32
|
// the initial submission/query to the BLAST "REST API" does not return JSON
|
|
33
33
|
// as a response (e.g. FORMAT_TYPE=JSON does not work), so the RID is
|
|
34
34
|
// literally parsed from the text of the HTML that is returned
|
|
35
|
-
const rid =
|
|
36
|
-
const rtoe =
|
|
35
|
+
const rid = /^ RID = (.*$)/m.exec(res)?.[1];
|
|
36
|
+
const rtoe = /^ RTOE = (.*$)/m.exec(res)?.[1];
|
|
37
37
|
if (!rid) {
|
|
38
38
|
throw new Error('Failed to get RID from BLAST request');
|
|
39
39
|
}
|
|
@@ -47,14 +47,14 @@ async function waitForRid({ rid, onProgress, }) {
|
|
|
47
47
|
onProgress(`Re-checking BLAST status in... ${iter - i}`);
|
|
48
48
|
}
|
|
49
49
|
const res = await textfetch(`${BLAST_URL}?CMD=Get&FORMAT_OBJECT=SearchInfo&RID=${rid}`);
|
|
50
|
-
if (
|
|
50
|
+
if (/\s+Status=WAITING/m.test(res)) {
|
|
51
51
|
continue;
|
|
52
52
|
}
|
|
53
|
-
else if (
|
|
53
|
+
else if (/\s+Status=FAILED/m.test(res)) {
|
|
54
54
|
throw new Error(`BLAST ${rid} failed; please report to blast-help@ncbi.nlm.nih.gov`);
|
|
55
55
|
}
|
|
56
|
-
else if (
|
|
57
|
-
if (
|
|
56
|
+
else if (/\s+Status=READY/m.test(res)) {
|
|
57
|
+
if (/\s+ThereAreHits=yes/m.test(res)) {
|
|
58
58
|
return true;
|
|
59
59
|
}
|
|
60
60
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ncbiBlast.js","sourceRoot":"","sources":["../../src/utils/ncbiBlast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG,gDAAgD,CAAA;AAEzE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAC/B,KAAK,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,KAAK,GAON;IACC,UAAU,CAAC,6BAA6B,CAAC,CAAA;IACzC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,YAAY,CAAC;QACjC,KAAK;QACL,aAAa;QACb,YAAY;KACb,CAAC,CAAA;IACF,KAAK,CAAC,GAAG,CAAC,CAAA;IACV,MAAM,UAAU,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA;IACrC,MAAM,GAAG,GAAG,MAAM,SAAS,CACzB,GAAG,SAAS,gBAAgB,GAAG,8CAA8C,CAC9E,CAAA;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAGpD,CAAA;IAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;AACtB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAC1B,KAAK,EACL,YAAY,EACZ,aAAa,GAKd;IACC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE;QACrC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,GAAG,EAAE,KAAK;YACV,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,KAAK;YACZ,GAAG,CAAC,aAAa,KAAK,kBAAkB;gBACtC,CAAC,CAAC;oBACE,YAAY,EAAE,IAAI;oBAClB,OAAO,EAAE,wBAAwB;iBAClC;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;KACH,CAAC,CAAA;IAEF,4EAA4E;IAC5E,qEAAqE;IACrE,8DAA8D;IAC9D,MAAM,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"ncbiBlast.js","sourceRoot":"","sources":["../../src/utils/ncbiBlast.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.0.
|
|
2
|
+
"version": "2.0.3",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"name": "jbrowse-plugin-msaview",
|
|
5
5
|
"keywords": [
|
|
@@ -52,14 +52,15 @@
|
|
|
52
52
|
"@types/node": "^20.8.6",
|
|
53
53
|
"@types/pako": "^2.0.1",
|
|
54
54
|
"@types/react": "^18.2.28",
|
|
55
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
56
|
-
"@typescript-eslint/parser": "^
|
|
55
|
+
"@typescript-eslint/eslint-plugin": "^8.0.1",
|
|
56
|
+
"@typescript-eslint/parser": "^8.0.1",
|
|
57
57
|
"esbuild": "^0.23.0",
|
|
58
58
|
"eslint": "^9.0.0",
|
|
59
59
|
"eslint-config-prettier": "^9.1.0",
|
|
60
60
|
"eslint-plugin-prettier": "^5.1.0",
|
|
61
61
|
"eslint-plugin-react": "^7.20.3",
|
|
62
62
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
63
|
+
"eslint-plugin-unicorn": "^55.0.0",
|
|
63
64
|
"mobx": "^6.10.2",
|
|
64
65
|
"mobx-react": "^9.0.1",
|
|
65
66
|
"mobx-state-tree": "^5.3.0",
|
|
@@ -67,7 +68,7 @@
|
|
|
67
68
|
"pretty-bytes": "^6.1.1",
|
|
68
69
|
"react": "^18.2.0",
|
|
69
70
|
"react-dom": "^18.2.0",
|
|
70
|
-
"rimraf": "^
|
|
71
|
+
"rimraf": "^6.0.0",
|
|
71
72
|
"rxjs": "^7.8.1",
|
|
72
73
|
"tss-react": "^4.9.2",
|
|
73
74
|
"typescript": "^5.2.2"
|
|
@@ -110,9 +110,9 @@ const NcbiBlastPanel = observer(function NcbiBlastPanel2({
|
|
|
110
110
|
maxRows={10}
|
|
111
111
|
fullWidth
|
|
112
112
|
value={
|
|
113
|
-
|
|
114
|
-
?
|
|
115
|
-
:
|
|
113
|
+
proteinSequence
|
|
114
|
+
? `>${getTranscriptDisplayName(selectedTranscript)}\n${proteinSequence}`
|
|
115
|
+
: 'Loading...'
|
|
116
116
|
}
|
|
117
117
|
InputProps={{
|
|
118
118
|
readOnly: true,
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export default NcbiBlastPanel
|
|
1
|
+
export { default } from './NcbiBlastPanel'
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
getTranscriptDisplayName,
|
|
24
24
|
getId,
|
|
25
25
|
getTranscriptFeatures,
|
|
26
|
+
getGeneDisplayName,
|
|
26
27
|
} from '../../util'
|
|
27
28
|
import { fetchGeneList } from './fetchGeneList'
|
|
28
29
|
import { preCalculatedLaunchView } from './preCalculatedLaunchView'
|
|
@@ -120,7 +121,7 @@ const PreLoadedMSA = observer(function PreLoadedMSA2({
|
|
|
120
121
|
await preCalculatedLaunchView({
|
|
121
122
|
userSelection,
|
|
122
123
|
session,
|
|
123
|
-
newViewTitle:
|
|
124
|
+
newViewTitle: getGeneDisplayName(ret),
|
|
124
125
|
view,
|
|
125
126
|
feature: ret,
|
|
126
127
|
})
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Instance, addDisposer, cast, types } from 'mobx-state-tree'
|
|
2
2
|
import { autorun } from 'mobx'
|
|
3
3
|
import { MSAModelF } from 'react-msaview'
|
|
4
|
-
import { Feature, getSession
|
|
4
|
+
import { Feature, getSession } from '@jbrowse/core/util'
|
|
5
5
|
import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
|
|
6
6
|
import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes'
|
|
7
7
|
|
|
@@ -101,7 +101,6 @@ export default function stateModelFactory() {
|
|
|
101
101
|
* #getter
|
|
102
102
|
*/
|
|
103
103
|
get transcriptToMsaMap() {
|
|
104
|
-
console.log(self.connectedFeature)
|
|
105
104
|
return self.connectedFeature
|
|
106
105
|
? genomeToTranscriptSeqMapping(self.connectedFeature)
|
|
107
106
|
: undefined
|
|
@@ -226,13 +225,20 @@ export default function stateModelFactory() {
|
|
|
226
225
|
self,
|
|
227
226
|
autorun(async () => {
|
|
228
227
|
if (self.blastParams) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
228
|
+
try {
|
|
229
|
+
self.setProgress('Submitting query')
|
|
230
|
+
const data = await doLaunchBlast({
|
|
231
|
+
self: self as JBrowsePluginMsaViewModel,
|
|
232
|
+
})
|
|
233
|
+
self.setData(data)
|
|
234
|
+
self.setBlastParams(undefined)
|
|
235
|
+
self.setProgress('')
|
|
236
|
+
} catch (e) {
|
|
237
|
+
self.setError(e)
|
|
238
|
+
console.error(e)
|
|
239
|
+
} finally {
|
|
240
|
+
self.setProgress('')
|
|
241
|
+
}
|
|
236
242
|
}
|
|
237
243
|
}),
|
|
238
244
|
)
|
|
@@ -243,14 +249,14 @@ export default function stateModelFactory() {
|
|
|
243
249
|
autorun(() => {
|
|
244
250
|
const { mouseCol, mouseClickCol } = self
|
|
245
251
|
const r1 =
|
|
246
|
-
mouseCol
|
|
247
|
-
?
|
|
248
|
-
:
|
|
252
|
+
mouseCol === undefined
|
|
253
|
+
? undefined
|
|
254
|
+
: msaCoordToGenomeCoord({ model: self, coord: mouseCol })
|
|
249
255
|
const r2 =
|
|
250
|
-
mouseClickCol
|
|
251
|
-
?
|
|
252
|
-
:
|
|
253
|
-
self.setConnectedHighlights([r1, r2].filter(
|
|
256
|
+
mouseClickCol === undefined
|
|
257
|
+
? undefined
|
|
258
|
+
: msaCoordToGenomeCoord({ model: self, coord: mouseClickCol })
|
|
259
|
+
self.setConnectedHighlights([r1, r2].filter(f => !!f))
|
|
254
260
|
}),
|
|
255
261
|
)
|
|
256
262
|
|
|
@@ -261,9 +267,9 @@ export default function stateModelFactory() {
|
|
|
261
267
|
const { connectedView, zoomToBaseLevel, mouseClickCol } = self
|
|
262
268
|
const { assemblyManager } = getSession(self)
|
|
263
269
|
const r2 =
|
|
264
|
-
mouseClickCol
|
|
265
|
-
?
|
|
266
|
-
:
|
|
270
|
+
mouseClickCol === undefined
|
|
271
|
+
? undefined
|
|
272
|
+
: msaCoordToGenomeCoord({ model: self, coord: mouseClickCol })
|
|
267
273
|
|
|
268
274
|
if (!r2 || !connectedView) {
|
|
269
275
|
return
|
package/src/utils/msa.ts
CHANGED
|
@@ -67,6 +67,28 @@ async function runKalign({
|
|
|
67
67
|
tree: await textfetch(`${base}/kalign/result/${jobId}/phylotree`),
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
|
|
71
|
+
async function runMafft({
|
|
72
|
+
sequence,
|
|
73
|
+
onProgress,
|
|
74
|
+
}: {
|
|
75
|
+
sequence: string
|
|
76
|
+
onProgress: (arg: string) => void
|
|
77
|
+
}) {
|
|
78
|
+
const jobId = await textfetch(`${base}/mafft/run`, {
|
|
79
|
+
method: 'POST',
|
|
80
|
+
body: new URLSearchParams({
|
|
81
|
+
email: 'colin.diesh@gmail.com',
|
|
82
|
+
stype: 'protein',
|
|
83
|
+
sequence,
|
|
84
|
+
}),
|
|
85
|
+
})
|
|
86
|
+
await wait({ jobId, algorithm: 'mafft', onProgress })
|
|
87
|
+
return {
|
|
88
|
+
msa: await textfetch(`${base}/mafft/result/${jobId}/fa`),
|
|
89
|
+
tree: await textfetch(`${base}/mafft/result/${jobId}/phylotree`),
|
|
90
|
+
}
|
|
91
|
+
}
|
|
70
92
|
async function wait({
|
|
71
93
|
onProgress,
|
|
72
94
|
jobId,
|
|
@@ -99,13 +121,21 @@ export async function launchMSA({
|
|
|
99
121
|
onProgress: (arg: string) => void
|
|
100
122
|
}) {
|
|
101
123
|
onProgress(`Launching ${algorithm} MSA...`)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
124
|
+
switch (algorithm) {
|
|
125
|
+
case 'clustalo': {
|
|
126
|
+
return runClustalOmega({ sequence, onProgress })
|
|
127
|
+
}
|
|
128
|
+
case 'muscle': {
|
|
129
|
+
return runMuscle({ sequence, onProgress })
|
|
130
|
+
}
|
|
131
|
+
case 'kalign': {
|
|
132
|
+
return runKalign({ sequence, onProgress })
|
|
133
|
+
}
|
|
134
|
+
case 'mafft': {
|
|
135
|
+
return runMafft({ sequence, onProgress })
|
|
136
|
+
}
|
|
137
|
+
default: {
|
|
138
|
+
throw new Error('unknown algorithm')
|
|
139
|
+
}
|
|
110
140
|
}
|
|
111
141
|
}
|
package/src/utils/ncbiBlast.ts
CHANGED
|
@@ -62,8 +62,8 @@ async function initialQuery({
|
|
|
62
62
|
// the initial submission/query to the BLAST "REST API" does not return JSON
|
|
63
63
|
// as a response (e.g. FORMAT_TYPE=JSON does not work), so the RID is
|
|
64
64
|
// literally parsed from the text of the HTML that is returned
|
|
65
|
-
const rid =
|
|
66
|
-
const rtoe =
|
|
65
|
+
const rid = /^ RID = (.*$)/m.exec(res)?.[1]
|
|
66
|
+
const rtoe = /^ RTOE = (.*$)/m.exec(res)?.[1]
|
|
67
67
|
|
|
68
68
|
if (!rid) {
|
|
69
69
|
throw new Error('Failed to get RID from BLAST request')
|
|
@@ -88,14 +88,14 @@ async function waitForRid({
|
|
|
88
88
|
const res = await textfetch(
|
|
89
89
|
`${BLAST_URL}?CMD=Get&FORMAT_OBJECT=SearchInfo&RID=${rid}`,
|
|
90
90
|
)
|
|
91
|
-
if (
|
|
91
|
+
if (/\s+Status=WAITING/m.test(res)) {
|
|
92
92
|
continue
|
|
93
|
-
} else if (
|
|
93
|
+
} else if (/\s+Status=FAILED/m.test(res)) {
|
|
94
94
|
throw new Error(
|
|
95
95
|
`BLAST ${rid} failed; please report to blast-help@ncbi.nlm.nih.gov`,
|
|
96
96
|
)
|
|
97
|
-
} else if (
|
|
98
|
-
if (
|
|
97
|
+
} else if (/\s+Status=READY/m.test(res)) {
|
|
98
|
+
if (/\s+ThereAreHits=yes/m.test(res)) {
|
|
99
99
|
return true
|
|
100
100
|
} else {
|
|
101
101
|
throw new Error('No hits found')
|