@jbrowse/img 2.2.0 → 2.2.1

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.
Files changed (51) hide show
  1. package/README.md +1 -4
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.js +2 -2
  4. package/dist/bin.js.map +1 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +206 -202
  7. package/dist/index.js.map +1 -0
  8. package/dist/index.testmod.d.ts +1 -0
  9. package/dist/index.testmod.js +165 -206
  10. package/dist/index.testmod.js.map +1 -0
  11. package/dist/parseArgv.d.ts +8 -0
  12. package/dist/parseArgv.js +42 -33
  13. package/dist/parseArgv.js.map +1 -0
  14. package/dist/parseArgv.testmod.d.ts +1 -0
  15. package/dist/parseArgv.testmod.js +25 -6
  16. package/dist/parseArgv.testmod.js.map +1 -0
  17. package/dist/renderRegion.d.ts +35 -0
  18. package/dist/renderRegion.js +345 -425
  19. package/dist/renderRegion.js.map +1 -0
  20. package/dist/util.d.ts +5 -0
  21. package/dist/util.js +31 -9
  22. package/dist/util.js.map +1 -0
  23. package/esm/bin.d.ts +2 -0
  24. package/esm/bin.js +4 -0
  25. package/esm/bin.js.map +1 -0
  26. package/esm/index.d.ts +1 -0
  27. package/esm/index.js +185 -0
  28. package/esm/index.js.map +1 -0
  29. package/esm/index.testmod.d.ts +1 -0
  30. package/esm/index.testmod.js +141 -0
  31. package/esm/index.testmod.js.map +1 -0
  32. package/esm/parseArgv.d.ts +8 -0
  33. package/esm/parseArgv.js +42 -0
  34. package/esm/parseArgv.js.map +1 -0
  35. package/esm/parseArgv.testmod.d.ts +1 -0
  36. package/esm/parseArgv.testmod.js +24 -0
  37. package/esm/parseArgv.testmod.js.map +1 -0
  38. package/esm/renderRegion.d.ts +35 -0
  39. package/esm/renderRegion.js +366 -0
  40. package/esm/renderRegion.js.map +1 -0
  41. package/esm/util.d.ts +5 -0
  42. package/esm/util.js +25 -0
  43. package/esm/util.js.map +1 -0
  44. package/package.json +15 -10
  45. package/src/bin.js +2 -0
  46. package/src/index.testmod.js +163 -0
  47. package/src/index.ts +209 -0
  48. package/src/parseArgv.testmod.js +29 -0
  49. package/src/parseArgv.ts +48 -0
  50. package/src/renderRegion.tsx +456 -0
  51. package/src/util.ts +32 -0
@@ -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.1",
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.1",
33
+ "@jbrowse/react-linear-genome-view": "^2.2.1",
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": "896d175c5d9345049faea8e1155f243c912aac42"
43
48
  }
package/src/bin.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('./index.js')
@@ -0,0 +1,163 @@
1
+ import { renderRegion } from './renderRegion'
2
+ import fs from 'fs'
3
+ import { JSDOM } from 'jsdom'
4
+ import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'
5
+ import { Image, createCanvas } from 'canvas'
6
+ import fetch, { Headers, Response, Request } from 'node-fetch'
7
+
8
+ global.fetch = fetch
9
+ global.Headers = Headers
10
+ global.Response = Response
11
+ global.Request = Request
12
+
13
+ const { document } = new JSDOM(`...`).window
14
+ global.document = document
15
+ global.nodeImage = Image
16
+ global.nodeCreateCanvas = createCanvas
17
+
18
+ xtest('renders a region with --session and --config args', async () => {
19
+ const result = await renderRegion({
20
+ session: require.resolve('../test/clingen_session.json'),
21
+ config: require.resolve('../data/config.json'),
22
+ })
23
+ fs.writeFileSync('svg_from_config_and_session_param.svg', result)
24
+ expect(result).toMatchSnapshot()
25
+ }, 40000)
26
+
27
+ xtest('renders a region with --session, --tracks, and --assembly args', async () => {
28
+ const result = await renderRegion({
29
+ session: require.resolve('../test/clingen_session.json'),
30
+ tracks: require.resolve('../data/tracks.json'),
31
+ assembly: require.resolve('../data/assembly.json'),
32
+ })
33
+ fs.writeFileSync('svg_from_separate_session_and_tracks.svg', result)
34
+ expect(result).toMatchSnapshot()
35
+ }, 40000)
36
+
37
+ test('renders volvox with variety of args', async () => {
38
+ const fp = f => require.resolve('../data/volvox/' + f)
39
+ console.error = jest.fn()
40
+ const result = await renderRegion({
41
+ fasta: fp('volvox.fa'),
42
+ trackList: [
43
+ ['bam', [fp('volvox-sorted.bam')]],
44
+ ['cram', [fp('volvox-sorted.cram')]],
45
+ ['bigwig', [fp('volvox-sorted.bam.coverage.bw')]],
46
+ ['vcfgz', [fp('volvox.filtered.vcf.gz')]],
47
+ ['gffgz', [fp('volvox.sort.gff3.gz')]],
48
+ ['bigbed', [fp('volvox.bb')]],
49
+ ['bedgz', [fp('volvox-bed12.bed.gz')]],
50
+ ],
51
+ loc: 'ctgA:1000-2000',
52
+ })
53
+ fs.writeFileSync(
54
+ require.resolve('../test/svg_from_volvox_fasta_and_bam.svg'),
55
+ result,
56
+ )
57
+ expect(result).toBeTruthy()
58
+ }, 40000)
59
+
60
+ xtest('renders human large region with remote urls', async () => {
61
+ const result = await renderRegion({
62
+ fasta: 'https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz',
63
+ trackList: [
64
+ [
65
+ 'cram',
66
+ [
67
+ 'https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/skbr3/skbr3.ont.sort.mod.cram',
68
+ 'force:true',
69
+ ],
70
+ ],
71
+ ],
72
+ loc: '1:10,000,000-10,030,000',
73
+ })
74
+ fs.writeFileSync(
75
+ require.resolve('../test/human_remote_urls_large_region.svg'),
76
+ result,
77
+ )
78
+ expect(result).toBeTruthy()
79
+ }, 120000)
80
+
81
+ xtest('renders volvox with remote urls', async () => {
82
+ const result = await renderRegion({
83
+ fasta: 'https://jbrowse.org/code/jb2/main/test_data/volvox/volvox.fa',
84
+ trackList: [
85
+ [
86
+ 'bam',
87
+ [
88
+ 'https://jbrowse.org/code/jb2/main/test_data/volvox/volvox-sorted.bam',
89
+ ],
90
+ ],
91
+ ],
92
+ loc: 'ctgA:1-1000',
93
+ })
94
+ fs.writeFileSync(require.resolve('../test/volvox_remote_region.svg'), result)
95
+ expect(result).toBeTruthy()
96
+ }, 20000)
97
+
98
+ test('renders volvox with variety of args (noRasterize)', async () => {
99
+ const fp = f => require.resolve('../data/volvox/' + f)
100
+ console.error = jest.fn()
101
+ const result = await renderRegion({
102
+ fasta: fp('volvox.fa'),
103
+ trackList: [
104
+ ['bam', [fp('volvox-sorted.bam')]],
105
+ ['cram', [fp('volvox-sorted.cram')]],
106
+ ['bigwig', [fp('volvox-sorted.bam.coverage.bw')]],
107
+ ['vcfgz', [fp('volvox.filtered.vcf.gz')]],
108
+ ['gffgz', [fp('volvox.sort.gff3.gz')]],
109
+ ['bigbed', [fp('volvox.bb')]],
110
+ ['bedgz', [fp('volvox-bed12.bed.gz')]],
111
+ ],
112
+ loc: 'ctgA:1000-2000',
113
+ noRasterize: true,
114
+ })
115
+ fs.writeFileSync(
116
+ require.resolve('../test/svg_from_volvox_fasta_and_bam_norasterize.svg'),
117
+ result,
118
+ )
119
+ expect(result).toBeTruthy()
120
+ }, 40000)
121
+
122
+ // commented out for using remote files currently
123
+ xtest('configtracks arg with urls', async () => {
124
+ const result = await renderRegion({
125
+ config: 'data/config.json',
126
+ trackList: [['configtracks', ['ncbi_refseq_109_hg38']]],
127
+ assembly: 'GRCh38',
128
+ loc: 'chr1:50,000-60,000',
129
+ })
130
+ fs.writeFileSync('svg_configtracks_simple.svg', result)
131
+ expect(result).toBeTruthy()
132
+ }, 40000)
133
+
134
+ test('configtracks arg with local files', async () => {
135
+ const result = await renderRegion({
136
+ config: require.resolve('../data/volvox/config.json'),
137
+ trackList: [['configtracks', ['volvox_sv']]],
138
+ assembly: 'volvox',
139
+ loc: 'ctgA:1-50,000',
140
+ })
141
+ fs.writeFileSync(
142
+ require.resolve('../test/svg_configtracks_local.svg'),
143
+ result,
144
+ )
145
+ expect(result).toBeTruthy()
146
+ }, 40000)
147
+
148
+ xtest('renders --hic', async () => {
149
+ const result = await renderRegion({
150
+ fasta: 'https://jbrowse.org/genomes/hg19/fasta/hg19.fa.gz',
151
+ trackList: [
152
+ [
153
+ 'hic',
154
+ [
155
+ 'https://s3.amazonaws.com/igv.broadinstitute.org/data/hic/intra_nofrag_30.hic',
156
+ ],
157
+ ],
158
+ ],
159
+ loc: '1:2,000,000-10,000,000',
160
+ })
161
+ fs.writeFileSync(require.resolve('../test/svg_from_human_hic.svg'), result)
162
+ expect(result).toBeTruthy()
163
+ }, 20000)