@jbrowse/img 1.7.9 → 2.0.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.
- package/README.md +5 -17
- package/dist/index.js +9 -0
- package/dist/index.testmod.js +76 -27
- package/package.json +9 -7
package/README.md
CHANGED
|
@@ -29,8 +29,6 @@ guide](DEVELOPER.md) for details
|
|
|
29
29
|
|
|
30
30
|
## Example usages
|
|
31
31
|
|
|
32
|
-
This will show some example usages
|
|
33
|
-
|
|
34
32
|
### Use with local files
|
|
35
33
|
|
|
36
34
|
We can call this script on local files, and it doesn't require a web browser,
|
|
@@ -56,7 +54,7 @@ If `--out` is not specified it writes to out.svg
|
|
|
56
54
|
Supply a file with the png extension to `--out`, uses rsvg-convert so you will
|
|
57
55
|
need to install rsvg-convert to your system e.g. with `sudo apt install librsvg2-bin`
|
|
58
56
|
|
|
59
|
-
```
|
|
57
|
+
```bash
|
|
60
58
|
jb2export --fasta yourfile.fa --bam yourfile.bam --loc chr1:1,000,000-1,001,000 --out file.png
|
|
61
59
|
```
|
|
62
60
|
|
|
@@ -65,7 +63,7 @@ jb2export --fasta yourfile.fa --bam yourfile.bam --loc chr1:1,000,000-1,001,000
|
|
|
65
63
|
Supply a file with the pdf extension to `--out`, uses rsvg-convert so you will
|
|
66
64
|
need to install rsvg-convert to your system e.g. with `sudo apt install librsvg2-bin`
|
|
67
65
|
|
|
68
|
-
```
|
|
66
|
+
```bash
|
|
69
67
|
jb2export --fasta yourfile.fa --bam yourfile.bam --loc chr1:1,000,000-1,001,000 --out file.pdf
|
|
70
68
|
```
|
|
71
69
|
|
|
@@ -76,8 +74,7 @@ This example shows using remote files, e.g. with human hg19 and several tracks
|
|
|
76
74
|
Note the use of --aliases, which smoothes over refname differences e.g. fasta
|
|
77
75
|
contains 1 for chr1, and bigbed contains chr1, gff contains NC_000001.10
|
|
78
76
|
|
|
79
|
-
```
|
|
80
|
-
|
|
77
|
+
```bash
|
|
81
78
|
jb2export --fasta https://jbrowse.org/genomes/hg19/fasta/hg19.fa.gz \
|
|
82
79
|
--aliases https://jbrowse.org/genomes/hg19/hg19_aliases.txt \
|
|
83
80
|
--bigbed https://hgdownload.soe.ucsc.edu/gbdb/hg19/bbi/clinvar/clinvarMain.bb \
|
|
@@ -158,7 +155,7 @@ If you use jbrowse-web, you can select File->Export session which produces a
|
|
|
158
155
|
session.json file, and then use the --session parameter. Make sure to specify
|
|
159
156
|
the assembly also, it currently does not infer the assembly from the session
|
|
160
157
|
|
|
161
|
-
```
|
|
158
|
+
```bash
|
|
162
159
|
jb2export --config data/skbr3/config.json \
|
|
163
160
|
--session session.json \
|
|
164
161
|
--assembly hg19
|
|
@@ -210,7 +207,7 @@ Then you can call it like above
|
|
|
210
207
|
|
|
211
208
|
```bash
|
|
212
209
|
jb2export --config data/volvox/config.json \
|
|
213
|
-
--assembly volvox
|
|
210
|
+
--assembly volvox \
|
|
214
211
|
--configtracks volvox_sv \
|
|
215
212
|
--loc ctgA:1-50,000
|
|
216
213
|
```
|
|
@@ -340,10 +337,6 @@ convert -size 2048x out.svg out.png
|
|
|
340
337
|
|
|
341
338
|
## Troubleshooting
|
|
342
339
|
|
|
343
|
-
### I see the message 'useLayoutEffect does nothing on the server'
|
|
344
|
-
|
|
345
|
-
This is a harmless warning, we are working on fixing it though
|
|
346
|
-
|
|
347
340
|
### I don't get any outputted svg and no message
|
|
348
341
|
|
|
349
342
|
The error reporting from the app is not very good at the moment so often has
|
|
@@ -357,8 +350,3 @@ There are some new features in the latest NPM (2021, v7) related to
|
|
|
357
350
|
peerDependencies that may produce some warnings. It should work even despite
|
|
358
351
|
making warnings, but you can use yarn to install or use legacy peer
|
|
359
352
|
dependencies if you want to avoid install time warningsvg
|
|
360
|
-
|
|
361
|
-
### The program keeps running after saying it completed?
|
|
362
|
-
|
|
363
|
-
We are looking into this still. The file should have been generated though, and
|
|
364
|
-
the program will complete
|
package/dist/index.js
CHANGED
|
@@ -24,11 +24,20 @@ var _child_process = require("child_process");
|
|
|
24
24
|
|
|
25
25
|
var _nodeFetch = _interopRequireWildcard(require("node-fetch"));
|
|
26
26
|
|
|
27
|
+
var _jsdom = require("jsdom");
|
|
28
|
+
|
|
29
|
+
var _canvas = require("canvas");
|
|
30
|
+
|
|
27
31
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
28
32
|
|
|
29
33
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
30
34
|
|
|
31
35
|
/* eslint-disable no-console */
|
|
36
|
+
global.nodeImage = _canvas.Image;
|
|
37
|
+
global.nodeCreateCanvas = _canvas.createCanvas;
|
|
38
|
+
var document = new _jsdom.JSDOM("...").window.document;
|
|
39
|
+
global.document = document;
|
|
40
|
+
|
|
32
41
|
if (!global.fetch) {
|
|
33
42
|
global.fetch = _nodeFetch.default;
|
|
34
43
|
global.Headers = _nodeFetch.Headers;
|
package/dist/index.testmod.js
CHANGED
|
@@ -10,6 +10,17 @@ var _renderRegion = require("./renderRegion");
|
|
|
10
10
|
|
|
11
11
|
var _fs = _interopRequireDefault(require("fs"));
|
|
12
12
|
|
|
13
|
+
var _jsdom = require("jsdom");
|
|
14
|
+
|
|
15
|
+
require("abortcontroller-polyfill/dist/abortcontroller-polyfill-only");
|
|
16
|
+
|
|
17
|
+
var _canvas = require("canvas");
|
|
18
|
+
|
|
19
|
+
var document = new _jsdom.JSDOM("...").window.document;
|
|
20
|
+
global.document = document;
|
|
21
|
+
global.nodeImage = _canvas.Image;
|
|
22
|
+
global.nodeCreateCanvas = _canvas.createCanvas;
|
|
23
|
+
|
|
13
24
|
function hashCode(str) {
|
|
14
25
|
var hash = 0;
|
|
15
26
|
var chr;
|
|
@@ -84,20 +95,24 @@ xtest('renders a region with --session, --tracks, and --assembly args', /*#__PUR
|
|
|
84
95
|
}, _callee2);
|
|
85
96
|
})), timeout);
|
|
86
97
|
test('renders volvox with variety of args', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
87
|
-
var result;
|
|
98
|
+
var fp, result;
|
|
88
99
|
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
89
100
|
while (1) {
|
|
90
101
|
switch (_context3.prev = _context3.next) {
|
|
91
102
|
case 0:
|
|
103
|
+
fp = function fp(f) {
|
|
104
|
+
return require.resolve('../data/volvox/' + f);
|
|
105
|
+
};
|
|
106
|
+
|
|
92
107
|
console.error = jest.fn();
|
|
93
|
-
_context3.next =
|
|
108
|
+
_context3.next = 4;
|
|
94
109
|
return (0, _renderRegion.renderRegion)({
|
|
95
|
-
fasta:
|
|
96
|
-
trackList: [['bam', [
|
|
110
|
+
fasta: fp('volvox.fa'),
|
|
111
|
+
trackList: [['bam', [fp('volvox-sorted.bam')]], ['cram', [fp('volvox-sorted.cram')]], ['bigwig', [fp('volvox-sorted.bam.coverage.bw')]], ['vcfgz', [fp('volvox.filtered.vcf.gz')]], ['gffgz', [fp('volvox.sort.gff3.gz')]], ['bigbed', [fp('volvox.bb')]], ['bedgz', [fp('volvox-bed12.bed.gz')]]],
|
|
97
112
|
loc: 'ctgA:1000-2000'
|
|
98
113
|
});
|
|
99
114
|
|
|
100
|
-
case
|
|
115
|
+
case 4:
|
|
101
116
|
result = _context3.sent;
|
|
102
117
|
|
|
103
118
|
// can't do a snapshot test here, slightly inconsistent results(?)
|
|
@@ -105,21 +120,55 @@ test('renders volvox with variety of args', /*#__PURE__*/(0, _asyncToGenerator2.
|
|
|
105
120
|
|
|
106
121
|
expect(result).toBeTruthy();
|
|
107
122
|
|
|
108
|
-
case
|
|
123
|
+
case 7:
|
|
109
124
|
case "end":
|
|
110
125
|
return _context3.stop();
|
|
111
126
|
}
|
|
112
127
|
}
|
|
113
128
|
}, _callee3);
|
|
129
|
+
})), timeout);
|
|
130
|
+
test('renders volvox with variety of args (noRasterize)', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
131
|
+
var fp, result;
|
|
132
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
133
|
+
while (1) {
|
|
134
|
+
switch (_context4.prev = _context4.next) {
|
|
135
|
+
case 0:
|
|
136
|
+
fp = function fp(f) {
|
|
137
|
+
return require.resolve('../data/volvox/' + f);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
console.error = jest.fn();
|
|
141
|
+
_context4.next = 4;
|
|
142
|
+
return (0, _renderRegion.renderRegion)({
|
|
143
|
+
fasta: fp('volvox.fa'),
|
|
144
|
+
trackList: [['bam', [fp('volvox-sorted.bam')]], ['cram', [fp('volvox-sorted.cram')]], ['bigwig', [fp('volvox-sorted.bam.coverage.bw')]], ['vcfgz', [fp('volvox.filtered.vcf.gz')]], ['gffgz', [fp('volvox.sort.gff3.gz')]], ['bigbed', [fp('volvox.bb')]], ['bedgz', [fp('volvox-bed12.bed.gz')]]],
|
|
145
|
+
loc: 'ctgA:1000-2000',
|
|
146
|
+
noRasterize: true
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
case 4:
|
|
150
|
+
result = _context4.sent;
|
|
151
|
+
|
|
152
|
+
// can't do a snapshot test here, slightly inconsistent results(?)
|
|
153
|
+
_fs.default.writeFileSync(require.resolve('../test/svg_from_volvox_fasta_and_bam_norasterize.svg'), result);
|
|
154
|
+
|
|
155
|
+
expect(result).toBeTruthy();
|
|
156
|
+
|
|
157
|
+
case 7:
|
|
158
|
+
case "end":
|
|
159
|
+
return _context4.stop();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}, _callee4);
|
|
114
163
|
})), timeout); // commented out for using remote files currently
|
|
115
164
|
|
|
116
|
-
xtest('configtracks arg with urls', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
165
|
+
xtest('configtracks arg with urls', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
|
|
117
166
|
var result;
|
|
118
|
-
return _regenerator.default.wrap(function
|
|
167
|
+
return _regenerator.default.wrap(function _callee5$(_context5) {
|
|
119
168
|
while (1) {
|
|
120
|
-
switch (
|
|
169
|
+
switch (_context5.prev = _context5.next) {
|
|
121
170
|
case 0:
|
|
122
|
-
|
|
171
|
+
_context5.next = 2;
|
|
123
172
|
return (0, _renderRegion.renderRegion)({
|
|
124
173
|
config: 'data/config.json',
|
|
125
174
|
trackList: [['configtracks', ['ncbi_refseq_109_hg38']]],
|
|
@@ -128,7 +177,7 @@ xtest('configtracks arg with urls', /*#__PURE__*/(0, _asyncToGenerator2.default)
|
|
|
128
177
|
});
|
|
129
178
|
|
|
130
179
|
case 2:
|
|
131
|
-
result =
|
|
180
|
+
result = _context5.sent;
|
|
132
181
|
|
|
133
182
|
// can't do a snapshot test here, slightly inconsistent results(?)
|
|
134
183
|
_fs.default.writeFileSync('svg_configtracks_simple.svg', result);
|
|
@@ -137,18 +186,18 @@ xtest('configtracks arg with urls', /*#__PURE__*/(0, _asyncToGenerator2.default)
|
|
|
137
186
|
|
|
138
187
|
case 5:
|
|
139
188
|
case "end":
|
|
140
|
-
return
|
|
189
|
+
return _context5.stop();
|
|
141
190
|
}
|
|
142
191
|
}
|
|
143
|
-
},
|
|
192
|
+
}, _callee5);
|
|
144
193
|
})), timeout * 3);
|
|
145
|
-
test('configtracks arg with local files', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
194
|
+
test('configtracks arg with local files', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
|
|
146
195
|
var result;
|
|
147
|
-
return _regenerator.default.wrap(function
|
|
196
|
+
return _regenerator.default.wrap(function _callee6$(_context6) {
|
|
148
197
|
while (1) {
|
|
149
|
-
switch (
|
|
198
|
+
switch (_context6.prev = _context6.next) {
|
|
150
199
|
case 0:
|
|
151
|
-
|
|
200
|
+
_context6.next = 2;
|
|
152
201
|
return (0, _renderRegion.renderRegion)({
|
|
153
202
|
config: require.resolve('../data/volvox/config.json'),
|
|
154
203
|
trackList: [['configtracks', ['volvox_sv']]],
|
|
@@ -157,7 +206,7 @@ test('configtracks arg with local files', /*#__PURE__*/(0, _asyncToGenerator2.de
|
|
|
157
206
|
});
|
|
158
207
|
|
|
159
208
|
case 2:
|
|
160
|
-
result =
|
|
209
|
+
result = _context6.sent;
|
|
161
210
|
|
|
162
211
|
// can't do a snapshot test here, slightly inconsistent results(?)
|
|
163
212
|
_fs.default.writeFileSync(require.resolve('../test/svg_configtracks_local.svg'), result);
|
|
@@ -166,18 +215,18 @@ test('configtracks arg with local files', /*#__PURE__*/(0, _asyncToGenerator2.de
|
|
|
166
215
|
|
|
167
216
|
case 5:
|
|
168
217
|
case "end":
|
|
169
|
-
return
|
|
218
|
+
return _context6.stop();
|
|
170
219
|
}
|
|
171
220
|
}
|
|
172
|
-
},
|
|
221
|
+
}, _callee6);
|
|
173
222
|
})), timeout * 3);
|
|
174
|
-
xtest('renders --hic', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function
|
|
223
|
+
xtest('renders --hic', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
|
|
175
224
|
var result;
|
|
176
|
-
return _regenerator.default.wrap(function
|
|
225
|
+
return _regenerator.default.wrap(function _callee7$(_context7) {
|
|
177
226
|
while (1) {
|
|
178
|
-
switch (
|
|
227
|
+
switch (_context7.prev = _context7.next) {
|
|
179
228
|
case 0:
|
|
180
|
-
|
|
229
|
+
_context7.next = 2;
|
|
181
230
|
return (0, _renderRegion.renderRegion)({
|
|
182
231
|
fasta: 'https://jbrowse.org/genomes/hg19/fasta/hg19.fa.gz',
|
|
183
232
|
trackList: [['hic', ['https://s3.amazonaws.com/igv.broadinstitute.org/data/hic/intra_nofrag_30.hic']]],
|
|
@@ -185,7 +234,7 @@ xtest('renders --hic', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__
|
|
|
185
234
|
});
|
|
186
235
|
|
|
187
236
|
case 2:
|
|
188
|
-
result =
|
|
237
|
+
result = _context7.sent;
|
|
189
238
|
|
|
190
239
|
_fs.default.writeFileSync(require.resolve('../test/svg_from_human_hic.svg'), result);
|
|
191
240
|
|
|
@@ -193,8 +242,8 @@ xtest('renders --hic', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__
|
|
|
193
242
|
|
|
194
243
|
case 5:
|
|
195
244
|
case "end":
|
|
196
|
-
return
|
|
245
|
+
return _context7.stop();
|
|
197
246
|
}
|
|
198
247
|
}
|
|
199
|
-
},
|
|
248
|
+
}, _callee7);
|
|
200
249
|
})), 20000);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/img",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "JBrowse Team",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -29,18 +29,20 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@babel/runtime": "^7.17.9",
|
|
32
|
-
"@jbrowse/plugin-linear-genome-view": "^
|
|
33
|
-
"@jbrowse/react-linear-genome-view": "^
|
|
32
|
+
"@jbrowse/plugin-linear-genome-view": "^2.0.0",
|
|
33
|
+
"@jbrowse/react-linear-genome-view": "^2.0.0",
|
|
34
34
|
"abortcontroller-polyfill": "^1.7.3",
|
|
35
|
-
"
|
|
35
|
+
"canvas": "^2.9.1",
|
|
36
|
+
"jsdom": "^19.0.0",
|
|
37
|
+
"mobx": "^6.6.0",
|
|
36
38
|
"node-fetch": "^2.6.7",
|
|
37
|
-
"react": "^17.0.
|
|
38
|
-
"react-dom": "^17.0.
|
|
39
|
+
"react": "^17.0.0",
|
|
40
|
+
"react-dom": "^17.0.0",
|
|
39
41
|
"tmp": "^0.2.1",
|
|
40
42
|
"yargs": "^17.3.0"
|
|
41
43
|
},
|
|
42
44
|
"publishConfig": {
|
|
43
45
|
"access": "public"
|
|
44
46
|
},
|
|
45
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "ecc7f5d47351a5ea04bc00f3a6eb6dfb607342e6"
|
|
46
48
|
}
|