@jbrowse/img 2.2.0 → 2.2.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.
@@ -0,0 +1,366 @@
1
+ import React from 'react';
2
+ import { createViewState } from '@jbrowse/react-linear-genome-view';
3
+ import { renderToSvg, } from '@jbrowse/plugin-linear-genome-view';
4
+ import createCache from '@emotion/cache';
5
+ import { CacheProvider } from '@emotion/react';
6
+ import path from 'path';
7
+ import fs from 'fs';
8
+ import { booleanize } from './util';
9
+ function read(file) {
10
+ let res;
11
+ try {
12
+ res = JSON.parse(fs.readFileSync(file, 'utf8'));
13
+ }
14
+ catch (e) {
15
+ throw new Error(`Failed to parse ${file} as JSON, use --fasta if you mean to pass a FASTA file`);
16
+ }
17
+ return res;
18
+ }
19
+ function makeLocation(file) {
20
+ return file.startsWith('http') ? { uri: file } : { localPath: file };
21
+ }
22
+ function addRelativePaths(config, configPath) {
23
+ if (typeof config === 'object') {
24
+ for (const key of Object.keys(config)) {
25
+ if (typeof config[key] === 'object') {
26
+ addRelativePaths(config[key], configPath);
27
+ }
28
+ else if (key === 'localPath') {
29
+ config.localPath = path.resolve(configPath, config.localPath);
30
+ }
31
+ }
32
+ }
33
+ }
34
+ export function readData({ assembly: asm, config, session, fasta, aliases, cytobands, defaultSession, tracks, trackList = [], }) {
35
+ var _a;
36
+ const assemblyData = asm && fs.existsSync(asm) ? read(asm) : undefined;
37
+ const tracksData = tracks ? read(tracks) : undefined;
38
+ const configData = (config ? read(config) : {});
39
+ let sessionData = session ? read(session) : undefined;
40
+ if (config) {
41
+ addRelativePaths(configData, path.dirname(path.resolve(config)));
42
+ }
43
+ // the session.json can be a raw session or a json file with a "session"
44
+ // attribute, which is what is exported via the "File->Export session" in
45
+ // jbrowse-web
46
+ if (sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) {
47
+ sessionData = sessionData.session;
48
+ }
49
+ // only export first view
50
+ if (sessionData === null || sessionData === void 0 ? void 0 : sessionData.views) {
51
+ sessionData.view = sessionData.views[0];
52
+ }
53
+ // use assembly from file if a file existed
54
+ if (assemblyData) {
55
+ configData.assembly = assemblyData;
56
+ }
57
+ // else check if it was an assembly name in a config file
58
+ else if ((_a = configData.assemblies) === null || _a === void 0 ? void 0 : _a.length) {
59
+ configData.assemblies.find(entry => entry.name === asm);
60
+ if (asm) {
61
+ const assembly = configData.assemblies.find(entry => entry.name === asm);
62
+ if (!assembly) {
63
+ throw new Error(`assembly ${asm} not found in config`);
64
+ }
65
+ configData.assembly = assembly;
66
+ }
67
+ else {
68
+ configData.assembly = configData.assemblies[0];
69
+ }
70
+ }
71
+ // else load fasta from command line
72
+ else if (fasta) {
73
+ const bgzip = fasta.endsWith('gz');
74
+ configData.assembly = {
75
+ name: path.basename(fasta),
76
+ sequence: {
77
+ type: 'ReferenceSequenceTrack',
78
+ trackId: 'refseq',
79
+ adapter: {
80
+ type: bgzip ? 'BgzipFastaAdapter' : 'IndexedFastaAdapter',
81
+ fastaLocation: makeLocation(fasta),
82
+ faiLocation: makeLocation(fasta + '.fai'),
83
+ gziLocation: bgzip ? makeLocation(fasta + '.gzi') : undefined,
84
+ },
85
+ },
86
+ };
87
+ if (aliases) {
88
+ configData.assembly.refNameAliases = {
89
+ adapter: {
90
+ type: 'RefNameAliasAdapter',
91
+ location: makeLocation(aliases),
92
+ },
93
+ };
94
+ }
95
+ if (cytobands) {
96
+ configData.assembly.cytobands = {
97
+ adapter: {
98
+ type: 'CytobandAdapter',
99
+ location: makeLocation(cytobands),
100
+ },
101
+ };
102
+ }
103
+ }
104
+ // throw if still no assembly
105
+ if (!configData.assembly) {
106
+ throw new Error('no assembly specified, use --fasta to supply an indexed FASTA file (generated with samtools faidx yourfile.fa). see README for alternatives with --assembly and --config');
107
+ }
108
+ if (tracksData) {
109
+ configData.tracks = tracksData;
110
+ }
111
+ else if (!configData.tracks) {
112
+ configData.tracks = [];
113
+ }
114
+ trackList.forEach(track => {
115
+ const [type, [file]] = track;
116
+ if (type === 'bam') {
117
+ configData.tracks = [
118
+ ...configData.tracks,
119
+ {
120
+ type: 'AlignmentsTrack',
121
+ trackId: path.basename(file),
122
+ name: path.basename(file),
123
+ assemblyNames: [configData.assembly.name],
124
+ adapter: {
125
+ type: 'BamAdapter',
126
+ bamLocation: makeLocation(file),
127
+ index: { location: makeLocation(file + '.bai') },
128
+ sequenceAdapter: configData.assembly.sequence.adapter,
129
+ },
130
+ },
131
+ ];
132
+ }
133
+ if (type === 'cram') {
134
+ configData.tracks = [
135
+ ...configData.tracks,
136
+ {
137
+ type: 'AlignmentsTrack',
138
+ trackId: path.basename(file),
139
+ name: path.basename(file),
140
+ assemblyNames: [configData.assembly.name],
141
+ adapter: {
142
+ type: 'CramAdapter',
143
+ cramLocation: makeLocation(file),
144
+ craiLocation: makeLocation(file + '.crai'),
145
+ sequenceAdapter: configData.assembly.sequence.adapter,
146
+ },
147
+ },
148
+ ];
149
+ }
150
+ if (type === 'bigwig') {
151
+ configData.tracks = [
152
+ ...configData.tracks,
153
+ {
154
+ type: 'QuantitativeTrack',
155
+ trackId: path.basename(file),
156
+ name: path.basename(file),
157
+ assemblyNames: [configData.assembly.name],
158
+ adapter: {
159
+ type: 'BigWigAdapter',
160
+ bigWigLocation: makeLocation(file),
161
+ },
162
+ },
163
+ ];
164
+ }
165
+ if (type === 'vcfgz') {
166
+ configData.tracks = [
167
+ ...configData.tracks,
168
+ {
169
+ type: 'VariantTrack',
170
+ trackId: path.basename(file),
171
+ name: path.basename(file),
172
+ assemblyNames: [configData.assembly.name],
173
+ adapter: {
174
+ type: 'VcfTabixAdapter',
175
+ vcfGzLocation: makeLocation(file),
176
+ index: {
177
+ location: makeLocation(file + '.tbi'),
178
+ },
179
+ },
180
+ },
181
+ ];
182
+ }
183
+ if (type === 'gffgz') {
184
+ configData.tracks = [
185
+ ...configData.tracks,
186
+ {
187
+ type: 'FeatureTrack',
188
+ trackId: path.basename(file),
189
+ name: path.basename(file),
190
+ assemblyNames: [configData.assembly.name],
191
+ adapter: {
192
+ type: 'Gff3TabixAdapter',
193
+ gffGzLocation: makeLocation(file),
194
+ index: {
195
+ location: makeLocation(file + '.tbi'),
196
+ },
197
+ },
198
+ },
199
+ ];
200
+ }
201
+ if (type === 'hic') {
202
+ configData.tracks = [
203
+ ...configData.tracks,
204
+ {
205
+ type: 'HicTrack',
206
+ trackId: path.basename(file),
207
+ name: path.basename(file),
208
+ assemblyNames: [configData.assembly.name],
209
+ adapter: {
210
+ type: 'HicAdapter',
211
+ hicLocation: makeLocation(file),
212
+ },
213
+ },
214
+ ];
215
+ }
216
+ if (type === 'bigbed') {
217
+ configData.tracks = [
218
+ ...configData.tracks,
219
+ {
220
+ type: 'FeatureTrack',
221
+ trackId: path.basename(file),
222
+ name: path.basename(file),
223
+ assemblyNames: [configData.assembly.name],
224
+ adapter: {
225
+ type: 'BigBedAdapter',
226
+ bigBedLocation: makeLocation(file),
227
+ },
228
+ },
229
+ ];
230
+ }
231
+ if (type === 'bedgz') {
232
+ configData.tracks = [
233
+ ...configData.tracks,
234
+ {
235
+ type: 'FeatureTrack',
236
+ trackId: path.basename(file),
237
+ name: path.basename(file),
238
+ assemblyNames: [configData.assembly.name],
239
+ adapter: {
240
+ type: 'BedTabixAdapter',
241
+ bedGzLocation: makeLocation(file),
242
+ index: {
243
+ location: makeLocation(file + '.tbi'),
244
+ },
245
+ },
246
+ },
247
+ ];
248
+ }
249
+ });
250
+ if (!defaultSession) {
251
+ // don't use defaultSession from config.json file, can result in assembly
252
+ // name confusion
253
+ delete configData.defaultSession;
254
+ }
255
+ // only allow an external manually specified session
256
+ if (sessionData) {
257
+ configData.defaultSession = sessionData;
258
+ }
259
+ return configData;
260
+ }
261
+ // without this, the styles can become messed up especially in lgv header
262
+ // xref https://github.com/garronej/tss-react/issues/25
263
+ export const muiCache = createCache({
264
+ key: 'mui',
265
+ prepend: true,
266
+ });
267
+ function process(trackEntry, view, extra = c => c) {
268
+ const [, [track, ...opts]] = trackEntry;
269
+ const currentTrack = view.showTrack(extra(track));
270
+ const display = currentTrack.displays[0];
271
+ opts.forEach(opt => {
272
+ // apply height to any track
273
+ if (opt.startsWith('height:')) {
274
+ const [, height] = opt.split(':');
275
+ display.setHeight(+height);
276
+ }
277
+ // apply sort to pileup
278
+ else if (opt.startsWith('sort:')) {
279
+ const [, type, tag] = opt.split(':');
280
+ display.PileupDisplay.setSortedBy(type, tag);
281
+ }
282
+ // apply color scheme to pileup
283
+ else if (opt.startsWith('color:')) {
284
+ const [, type, tag] = opt.split(':');
285
+ if (display.PileupDisplay) {
286
+ display.PileupDisplay.setColorScheme({ type, tag });
287
+ }
288
+ else {
289
+ display.setColor(type);
290
+ }
291
+ }
292
+ // force track to render even if maxbpperpx limit hit...
293
+ else if (opt.startsWith('force:')) {
294
+ const [, force] = opt.split(':');
295
+ if (force) {
296
+ display.updateStatsLimit({ bytes: Number.MAX_VALUE });
297
+ }
298
+ }
299
+ // apply wiggle autoscale
300
+ else if (opt.startsWith('autoscale:')) {
301
+ const [, autoscale] = opt.split(':');
302
+ display.setAutoscale(autoscale);
303
+ }
304
+ // apply min and max score to wiggle
305
+ else if (opt.startsWith('minmax:')) {
306
+ const [, min, max] = opt.split(':');
307
+ display.setMinScore(+min);
308
+ display.setMaxScore(+max);
309
+ }
310
+ // apply linear or log scale to wiggle
311
+ else if (opt.startsWith('scaletype:')) {
312
+ const [, scaletype] = opt.split(':');
313
+ display.setScaleType(scaletype);
314
+ }
315
+ // draw crosshatches on wiggle
316
+ else if (opt.startsWith('crosshatch:')) {
317
+ const [, val] = opt.split(':');
318
+ display.setCrossHatches(booleanize(val));
319
+ }
320
+ // turn off fill on bigwig with fill:false
321
+ else if (opt.startsWith('fill:')) {
322
+ const [, val] = opt.split(':');
323
+ display.setFill(booleanize(val));
324
+ }
325
+ // set resolution:superfine to use finer bigwig bin size
326
+ else if (opt.startsWith('resolution:')) {
327
+ let [, val] = opt.split(':');
328
+ if (val === 'fine') {
329
+ val = '10';
330
+ }
331
+ else if (val === 'superfine') {
332
+ val = '100';
333
+ }
334
+ display.setResolution(+val);
335
+ }
336
+ });
337
+ }
338
+ export async function renderRegion(opts) {
339
+ const model = createViewState(readData(opts));
340
+ const { loc, width = 1500, trackList = [], session: sessionParam, defaultSession, } = opts;
341
+ const { session } = model;
342
+ const { view } = session;
343
+ const { assemblyManager } = model;
344
+ view.setWidth(width);
345
+ if (loc) {
346
+ const [assembly] = assemblyManager.assemblies;
347
+ if (loc === 'all') {
348
+ view.showAllRegionsInAssembly(assembly.name);
349
+ }
350
+ else {
351
+ await view.navToLocString(loc, assembly.name);
352
+ }
353
+ }
354
+ else if (!sessionParam && !defaultSession) {
355
+ console.warn('No loc specified');
356
+ }
357
+ trackList.forEach(track => {
358
+ process(track, view, extra => path.basename(extra));
359
+ });
360
+ return renderToSvg(view, {
361
+ rasterizeLayers: !opts.noRasterize,
362
+ ...opts,
363
+ Wrapper: ({ children }) => (React.createElement(CacheProvider, { value: muiCache }, children)),
364
+ });
365
+ }
366
+ //# sourceMappingURL=renderRegion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderRegion.js","sourceRoot":"","sources":["../src/renderRegion.tsx"],"names":[],"mappings":"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"}
package/esm/util.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export declare function booleanize(str: string): boolean;
2
+ export declare function convert(result: string, args: {
3
+ out: string;
4
+ pngwidth?: string;
5
+ }, spawnArgs?: string[]): void;
package/esm/util.js ADDED
@@ -0,0 +1,25 @@
1
+ import fs from 'fs';
2
+ import tmp from 'tmp';
3
+ import { spawnSync } from 'child_process';
4
+ // nice helper function from https://stackoverflow.com/questions/263965/
5
+ export function booleanize(str) {
6
+ return str === 'false' ? false : !!str;
7
+ }
8
+ function createTmp() {
9
+ return tmp.fileSync({
10
+ mode: 0o644,
11
+ prefix: 'prefix-',
12
+ postfix: '.svg',
13
+ });
14
+ }
15
+ export function convert(result, args, spawnArgs = []) {
16
+ const { name } = createTmp();
17
+ const { pngwidth = '2048', out } = args;
18
+ fs.writeFileSync(name, result);
19
+ const a = ['-w', pngwidth, name, '-o', out, ...spawnArgs];
20
+ const ls = spawnSync('rsvg-convert', a);
21
+ console.error(`rsvg-convert stderr: ${ls.stderr.toString()}`);
22
+ console.log(`rsvg-convert stdout: ${ls.stdout.toString()}`); // eslint-disable-line no-console
23
+ fs.unlinkSync(name);
24
+ }
25
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACxC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,MAAM;KAChB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,IAAwC,EACxC,YAAsB,EAAE;IAExB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAAA;IAC5B,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACvC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,CAAa,CAAA;IACrE,MAAM,EAAE,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;IAEvC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,CAAC,iCAAiC;IAC7F,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@jbrowse/img",
3
- "version": "2.2.0",
4
- "main": "index.js",
3
+ "version": "2.2.2",
4
+ "main": "dist/index.js",
5
+ "module": "esm/index.js",
5
6
  "author": "JBrowse Team",
6
7
  "license": "Apache-2.0",
7
8
  "engines": {
@@ -11,21 +12,25 @@
11
12
  "jb2export": "./dist/bin.js"
12
13
  },
13
14
  "files": [
14
- "dist"
15
+ "dist",
16
+ "esm",
17
+ "src"
15
18
  ],
16
19
  "scripts": {
17
- "pretest": "cd ../jbrowse-react-linear-genome-view; yarn build; cd ../jb2export",
18
- "test": "jest",
19
- "prebuild": "rm -rf dist",
20
- "build": "babel --root-mode upward src -d dist",
20
+ "test": "cd ../../; jest --env node --testMatch '**/*testmod.js' products/jbrowse-img",
21
+ "clean": "rm -rf dist esm *.tsbuildinfo",
22
+ "prebuild": "yarn clean",
23
+ "build": "npm-run-all build:*",
24
+ "build:esm": "tsc --build tsconfig.build.esm.json",
25
+ "build:es5": "tsc --build tsconfig.build.es5.json",
21
26
  "preversion": "npm run build"
22
27
  },
23
28
  "dependencies": {
24
29
  "@babel/runtime": "^7.17.9",
25
30
  "@emotion/cache": "^11.7.1",
26
31
  "@emotion/react": "^11.9.0",
27
- "@jbrowse/plugin-linear-genome-view": "^2.2.0",
28
- "@jbrowse/react-linear-genome-view": "^2.2.0",
32
+ "@jbrowse/plugin-linear-genome-view": "^2.2.2",
33
+ "@jbrowse/react-linear-genome-view": "^2.2.2",
29
34
  "abortcontroller-polyfill": "^1.7.3",
30
35
  "canvas": "^2.9.1",
31
36
  "jsdom": "^19.0.0",
@@ -39,5 +44,5 @@
39
44
  "publishConfig": {
40
45
  "access": "public"
41
46
  },
42
- "gitHead": "cf31db8d833117f8822510340664fb3f045975cb"
47
+ "gitHead": "abbc00e8feedbc58de84a7a3e735ec0224909b29"
43
48
  }
package/src/bin.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('./index.js')
@@ -0,0 +1,179 @@
1
+ /**
2
+ * @jest-environment node
3
+ */
4
+
5
+ // the above jest-environment node is important to check true usage as a CLI tool
6
+
7
+ import { renderRegion } from './renderRegion'
8
+ import path from 'path'
9
+ import fs from 'fs'
10
+ import { JSDOM } from 'jsdom'
11
+ import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'
12
+ import { Image, createCanvas } from 'canvas'
13
+ import fetch, { Headers, Response, Request } from 'node-fetch'
14
+
15
+ global.fetch = fetch
16
+ global.Headers = Headers
17
+ global.Response = Response
18
+ global.Request = Request
19
+
20
+ const { document } = new JSDOM(`...`).window
21
+ global.document = document
22
+ global.nodeImage = Image
23
+ global.nodeCreateCanvas = createCanvas
24
+
25
+ xtest('renders a region with --session and --config args', async () => {
26
+ const result = await renderRegion({
27
+ session: path.join(__dirname, '../test/clingen_session.json'),
28
+ config: path.join(__dirname, '../data/config.json'),
29
+ })
30
+ fs.writeFileSync('svg_from_config_and_session_param.svg', result)
31
+ expect(result).toMatchSnapshot()
32
+ }, 40000)
33
+
34
+ xtest('renders a region with --session, --tracks, and --assembly args', async () => {
35
+ const result = await renderRegion({
36
+ session: path.join(__dirname, '../test/clingen_session.json'),
37
+ tracks: path.join(__dirname, '../data/tracks.json'),
38
+ assembly: path.join(__dirname, '../data/assembly.json'),
39
+ })
40
+ fs.writeFileSync('svg_from_separate_session_and_tracks.svg', result)
41
+ expect(result).toMatchSnapshot()
42
+ }, 40000)
43
+
44
+ test('renders volvox with variety of args', async () => {
45
+ const fp = f => path.join(__dirname, '../data/volvox/' + f)
46
+ console.error = jest.fn()
47
+ const result = await renderRegion({
48
+ fasta: fp('volvox.fa'),
49
+ trackList: [
50
+ ['bam', [fp('volvox-sorted.bam')]],
51
+ ['cram', [fp('volvox-sorted.cram')]],
52
+ ['bigwig', [fp('volvox-sorted.bam.coverage.bw')]],
53
+ ['vcfgz', [fp('volvox.filtered.vcf.gz')]],
54
+ ['gffgz', [fp('volvox.sort.gff3.gz')]],
55
+ ['bigbed', [fp('volvox.bb')]],
56
+ ['bedgz', [fp('volvox-bed12.bed.gz')]],
57
+ ],
58
+ loc: 'ctgA:1000-2000',
59
+ })
60
+ fs.writeFileSync(
61
+ path.join(__dirname, '../test/svg_from_volvox_fasta_and_bam.svg'),
62
+ result,
63
+ )
64
+ expect(result).toBeTruthy()
65
+ }, 40000)
66
+
67
+ xtest('renders human large region with remote urls', async () => {
68
+ const result = await renderRegion({
69
+ fasta: 'https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz',
70
+ trackList: [
71
+ [
72
+ 'cram',
73
+ [
74
+ 'https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/skbr3/skbr3.ont.sort.mod.cram',
75
+ 'force:true',
76
+ ],
77
+ ],
78
+ ],
79
+ loc: '1:10,000,000-10,030,000',
80
+ })
81
+ fs.writeFileSync(
82
+ path.join(__dirname, '../test/human_remote_urls_large_region.svg'),
83
+ result,
84
+ )
85
+ expect(result).toBeTruthy()
86
+ }, 120000)
87
+
88
+ xtest('renders volvox with remote urls', async () => {
89
+ const result = await renderRegion({
90
+ fasta: 'https://jbrowse.org/code/jb2/main/test_data/volvox/volvox.fa',
91
+ trackList: [
92
+ [
93
+ 'bam',
94
+ [
95
+ 'https://jbrowse.org/code/jb2/main/test_data/volvox/volvox-sorted.bam',
96
+ ],
97
+ ],
98
+ ],
99
+ loc: 'ctgA:1-1000',
100
+ })
101
+ fs.writeFileSync(
102
+ path.join(__dirname, '../test/volvox_remote_region.svg'),
103
+ result,
104
+ )
105
+ expect(result).toBeTruthy()
106
+ }, 20000)
107
+
108
+ test('renders volvox with variety of args (noRasterize)', async () => {
109
+ const fp = f => path.join(__dirname, '../data/volvox/' + f)
110
+ console.error = jest.fn()
111
+ const result = await renderRegion({
112
+ fasta: fp('volvox.fa'),
113
+ trackList: [
114
+ ['bam', [fp('volvox-sorted.bam')]],
115
+ ['cram', [fp('volvox-sorted.cram')]],
116
+ ['bigwig', [fp('volvox-sorted.bam.coverage.bw')]],
117
+ ['vcfgz', [fp('volvox.filtered.vcf.gz')]],
118
+ ['gffgz', [fp('volvox.sort.gff3.gz')]],
119
+ ['bigbed', [fp('volvox.bb')]],
120
+ ['bedgz', [fp('volvox-bed12.bed.gz')]],
121
+ ],
122
+ loc: 'ctgA:1000-2000',
123
+ noRasterize: true,
124
+ })
125
+ fs.writeFileSync(
126
+ path.join(
127
+ __dirname,
128
+ '../test/svg_from_volvox_fasta_and_bam_norasterize.svg',
129
+ ),
130
+ result,
131
+ )
132
+ expect(result).toBeTruthy()
133
+ }, 40000)
134
+
135
+ // commented out for using remote files currently
136
+ xtest('configtracks arg with urls', async () => {
137
+ const result = await renderRegion({
138
+ config: 'data/config.json',
139
+ trackList: [['configtracks', ['ncbi_refseq_109_hg38']]],
140
+ assembly: 'GRCh38',
141
+ loc: 'chr1:50,000-60,000',
142
+ })
143
+ fs.writeFileSync('svg_configtracks_simple.svg', result)
144
+ expect(result).toBeTruthy()
145
+ }, 40000)
146
+
147
+ test('configtracks arg with local files', async () => {
148
+ const result = await renderRegion({
149
+ config: path.join(__dirname, '../data/volvox/config.json'),
150
+ trackList: [['configtracks', ['volvox_sv']]],
151
+ assembly: 'volvox',
152
+ loc: 'ctgA:1-50,000',
153
+ })
154
+ fs.writeFileSync(
155
+ path.join(__dirname, '../test/svg_configtracks_local.svg'),
156
+ result,
157
+ )
158
+ expect(result).toBeTruthy()
159
+ }, 40000)
160
+
161
+ xtest('renders --hic', async () => {
162
+ const result = await renderRegion({
163
+ fasta: 'https://jbrowse.org/genomes/hg19/fasta/hg19.fa.gz',
164
+ trackList: [
165
+ [
166
+ 'hic',
167
+ [
168
+ 'https://s3.amazonaws.com/igv.broadinstitute.org/data/hic/intra_nofrag_30.hic',
169
+ ],
170
+ ],
171
+ ],
172
+ loc: '1:2,000,000-10,000,000',
173
+ })
174
+ fs.writeFileSync(
175
+ path.join(__dirname, '../test/svg_from_human_hic.svg'),
176
+ result,
177
+ )
178
+ expect(result).toBeTruthy()
179
+ }, 20000)