@jbrowse/img 2.1.6 → 2.2.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/dist/index.js CHANGED
@@ -1,77 +1,56 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
8
-
9
6
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
-
11
7
  var _fs = _interopRequireDefault(require("fs"));
12
-
13
8
  var _yargs = _interopRequireDefault(require("yargs"));
14
-
15
9
  var _parseArgv = require("./parseArgv");
16
-
17
10
  var _renderRegion = require("./renderRegion");
18
-
19
11
  var _tmp = _interopRequireDefault(require("tmp"));
20
-
21
12
  require("abortcontroller-polyfill/dist/abortcontroller-polyfill-only");
22
-
23
13
  var _child_process = require("child_process");
24
-
25
14
  var _nodeFetch = _interopRequireWildcard(require("node-fetch"));
26
-
27
15
  var _jsdom = require("jsdom");
28
-
29
16
  var _canvas = require("canvas");
30
-
31
17
  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); }
32
-
33
18
  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; }
34
-
35
19
  /* eslint-disable no-console */
20
+
36
21
  global.nodeImage = _canvas.Image;
37
22
  global.nodeCreateCanvas = _canvas.createCanvas;
38
23
  var document = new _jsdom.JSDOM("...").window.document;
39
24
  global.document = document;
40
-
41
25
  if (!global.fetch) {
42
26
  global.fetch = _nodeFetch.default;
43
27
  global.Headers = _nodeFetch.Headers;
44
28
  global.Response = _nodeFetch.Response;
45
29
  global.Request = _nodeFetch.Request;
46
30
  }
47
-
48
31
  var err = console.error;
49
-
50
32
  console.error = function () {
51
33
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
52
34
  args[_key] = arguments[_key];
53
35
  }
54
-
55
36
  if ("".concat(args[0]).match('useLayoutEffect')) {
56
37
  return null;
57
38
  } else {
58
39
  err(args);
59
40
  }
60
41
  };
61
-
62
42
  console.warn = function () {
63
43
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
64
44
  args[_key2] = arguments[_key2];
65
45
  }
66
-
67
46
  if ("".concat(args[0]).match('estimation reached timeout')) {
68
47
  return null;
69
48
  } else {
70
49
  err(args);
71
50
  }
72
- }; // eslint-disable-next-line no-unused-expressions
73
-
51
+ };
74
52
 
53
+ // eslint-disable-next-line no-unused-expressions
75
54
  _yargs.default.command('jb2export', 'Creates a jbrowse 2 image snapshot').option('config', {
76
55
  description: 'Path to config file',
77
56
  type: 'string'
@@ -100,7 +79,8 @@ _yargs.default.command('jb2export', 'Creates a jbrowse 2 image snapshot').option
100
79
  description: 'Set the width of the png canvas if using png output, default 2048px',
101
80
  type: 'number',
102
81
  default: 2048
103
- }) // track types
82
+ })
83
+ // track types
104
84
  .option('configtracks', {
105
85
  description: 'A list of track labels from a config file',
106
86
  type: 'array'
@@ -128,7 +108,9 @@ _yargs.default.command('jb2export', 'Creates a jbrowse 2 image snapshot').option
128
108
  }).option('bedgz', {
129
109
  description: 'A bed tabix file, the --bedgz can be used multiple times to specify multiple bedtabix files',
130
110
  type: 'array'
131
- }) // other
111
+ })
112
+
113
+ // other
132
114
  .option('out', {
133
115
  description: 'File to output to. Default: out.svg. If a filename with extension .png is supplied the program will try to automatically execute rsvg-convert to convert it to png',
134
116
  type: 'string',
@@ -139,12 +121,12 @@ _yargs.default.command('jb2export', 'Creates a jbrowse 2 image snapshot').option
139
121
  }).option('defaultSession', {
140
122
  description: 'Use the defaultSession from config.json',
141
123
  type: 'boolean'
142
- }).help().alias('help', 'h').alias('width', 'w').argv; // prints to stderr the time it takes to execute cb
124
+ }).help().alias('help', 'h').alias('width', 'w').argv;
143
125
 
126
+ // prints to stderr the time it takes to execute cb
144
127
  function time(_x) {
145
128
  return _time.apply(this, arguments);
146
129
  }
147
-
148
130
  function _time() {
149
131
  _time = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(cb) {
150
132
  var start, ret;
@@ -155,12 +137,10 @@ function _time() {
155
137
  start = +Date.now();
156
138
  _context2.next = 3;
157
139
  return cb();
158
-
159
140
  case 3:
160
141
  ret = _context2.sent;
161
142
  console.log("Finished rendering: ".concat((+Date.now() - start) / 1000, "s"));
162
143
  return _context2.abrupt("return", ret);
163
-
164
144
  case 6:
165
145
  case "end":
166
146
  return _context2.stop();
@@ -170,11 +150,9 @@ function _time() {
170
150
  }));
171
151
  return _time.apply(this, arguments);
172
152
  }
173
-
174
153
  var args = (0, _parseArgv.standardizeArgv)((0, _parseArgv.parseArgv)(process.argv.slice(2)), ['bam', 'cram', 'vcfgz', 'hic', 'bigwig', 'bigbed', 'bedgz', 'gffgz', 'configtracks']);
175
154
  time( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
176
155
  var result, outfile, tmpobj, ls, _tmpobj, _ls;
177
-
178
156
  return _regenerator.default.wrap(function _callee$(_context) {
179
157
  while (1) {
180
158
  switch (_context.prev = _context.next) {
@@ -182,24 +160,19 @@ time( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.de
182
160
  _context.prev = 0;
183
161
  _context.next = 3;
184
162
  return (0, _renderRegion.renderRegion)(args);
185
-
186
163
  case 3:
187
164
  result = _context.sent;
188
165
  outfile = args.out || 'out.svg';
189
-
190
166
  if (outfile.endsWith('.png')) {
191
167
  tmpobj = _tmp.default.fileSync({
192
168
  mode: 420,
193
169
  prefix: 'prefix-',
194
170
  postfix: '.svg'
195
171
  });
196
-
197
172
  _fs.default.writeFileSync(tmpobj.name, result);
198
-
199
173
  ls = (0, _child_process.spawnSync)('rsvg-convert', ['-w', args.pngwidth || 2048, tmpobj.name, '-o', outfile]);
200
174
  console.log("rsvg-convert stderr: ".concat(ls.stderr.toString()));
201
175
  console.log("rsvg-convert stdout: ".concat(ls.stdout.toString()));
202
-
203
176
  _fs.default.unlinkSync(tmpobj.name);
204
177
  } else if (outfile.endsWith('.pdf')) {
205
178
  _tmpobj = _tmp.default.fileSync({
@@ -207,31 +180,26 @@ time( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.de
207
180
  prefix: 'prefix-',
208
181
  postfix: '.svg'
209
182
  });
210
-
211
183
  _fs.default.writeFileSync(_tmpobj.name, result);
212
-
213
184
  _ls = (0, _child_process.spawnSync)('rsvg-convert', ['-w', args.pngwidth || 2048, _tmpobj.name, '-f', 'pdf', '-o', outfile]);
214
185
  console.log("rsvg-convert stderr: ".concat(_ls.stderr.toString()));
215
186
  console.log("rsvg-convert stdout: ".concat(_ls.stdout.toString()));
216
-
217
187
  _fs.default.unlinkSync(_tmpobj.name);
218
188
  } else {
219
189
  _fs.default.writeFileSync(outfile, result);
220
- } // manually exit the process after done rendering because autoruns or
190
+ }
191
+
192
+ // manually exit the process after done rendering because autoruns or
221
193
  // something similar otherwise keeps the nodejs process alive xref
222
194
  // https://github.com/GMOD/jb2export/issues/6
223
-
224
-
225
195
  process.exit(0);
226
196
  _context.next = 13;
227
197
  break;
228
-
229
198
  case 9:
230
199
  _context.prev = 9;
231
200
  _context.t0 = _context["catch"](0);
232
201
  console.error(_context.t0);
233
202
  process.exit(1);
234
-
235
203
  case 13:
236
204
  case "end":
237
205
  return _context.stop();
@@ -1,34 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
-
7
5
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
-
9
6
  var _renderRegion = require("./renderRegion");
10
-
11
7
  var _fs = _interopRequireDefault(require("fs"));
12
-
13
8
  var _jsdom = require("jsdom");
14
-
15
9
  require("abortcontroller-polyfill/dist/abortcontroller-polyfill-only");
16
-
17
10
  var _canvas = require("canvas");
18
-
19
11
  var document = new _jsdom.JSDOM("...").window.document;
20
12
  global.document = document;
21
13
  global.nodeImage = _canvas.Image;
22
14
  global.nodeCreateCanvas = _canvas.createCanvas;
23
-
24
15
  function hashCode(str) {
25
16
  var hash = 0;
26
17
  var chr;
27
-
28
18
  if (str.length === 0) {
29
19
  return hash;
30
20
  }
31
-
32
21
  for (var i = 0; i < str.length; i++) {
33
22
  chr = str.charCodeAt(i);
34
23
  hash = (hash << 5) - hash + chr;
@@ -37,9 +26,9 @@ function hashCode(str) {
37
26
 
38
27
  return hash;
39
28
  }
29
+ var timeout = 20000;
40
30
 
41
- var timeout = 20000; // commented out for using remote files currently
42
-
31
+ // commented out for using remote files currently
43
32
  xtest('renders a region with --session and --config args', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
44
33
  var result;
45
34
  return _regenerator.default.wrap(function _callee$(_context) {
@@ -51,22 +40,19 @@ xtest('renders a region with --session and --config args', /*#__PURE__*/(0, _asy
51
40
  session: require.resolve('../test/clingen_session.json'),
52
41
  config: require.resolve('../data/config.json')
53
42
  });
54
-
55
43
  case 2:
56
44
  result = _context.sent;
57
-
58
45
  _fs.default.writeFileSync('svg_from_config_and_session_param.svg', result);
59
-
60
46
  expect(hashCode(result)).toMatchSnapshot();
61
-
62
47
  case 5:
63
48
  case "end":
64
49
  return _context.stop();
65
50
  }
66
51
  }
67
52
  }, _callee);
68
- })), timeout); // commented out for using remote files currently
53
+ })), timeout);
69
54
 
55
+ // commented out for using remote files currently
70
56
  xtest('renders a region with --session, --tracks, and --assembly args', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
71
57
  var result;
72
58
  return _regenerator.default.wrap(function _callee2$(_context2) {
@@ -79,14 +65,10 @@ xtest('renders a region with --session, --tracks, and --assembly args', /*#__PUR
79
65
  tracks: require.resolve('../data/tracks.json'),
80
66
  assembly: require.resolve('../data/assembly.json')
81
67
  });
82
-
83
68
  case 2:
84
69
  result = _context2.sent;
85
-
86
70
  _fs.default.writeFileSync('svg_from_separate_session_and_tracks.svg', result);
87
-
88
71
  expect(hashCode(result)).toMatchSnapshot();
89
-
90
72
  case 5:
91
73
  case "end":
92
74
  return _context2.stop();
@@ -103,7 +85,6 @@ test('renders volvox with variety of args', /*#__PURE__*/(0, _asyncToGenerator2.
103
85
  fp = function fp(f) {
104
86
  return require.resolve('../data/volvox/' + f);
105
87
  };
106
-
107
88
  console.error = jest.fn();
108
89
  _context3.next = 4;
109
90
  return (0, _renderRegion.renderRegion)({
@@ -111,15 +92,11 @@ test('renders volvox with variety of args', /*#__PURE__*/(0, _asyncToGenerator2.
111
92
  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')]]],
112
93
  loc: 'ctgA:1000-2000'
113
94
  });
114
-
115
95
  case 4:
116
96
  result = _context3.sent;
117
-
118
97
  // can't do a snapshot test here, slightly inconsistent results(?)
119
98
  _fs.default.writeFileSync(require.resolve('../test/svg_from_volvox_fasta_and_bam.svg'), result);
120
-
121
99
  expect(result).toBeTruthy();
122
-
123
100
  case 7:
124
101
  case "end":
125
102
  return _context3.stop();
@@ -136,7 +113,6 @@ test('renders volvox with variety of args (noRasterize)', /*#__PURE__*/(0, _asyn
136
113
  fp = function fp(f) {
137
114
  return require.resolve('../data/volvox/' + f);
138
115
  };
139
-
140
116
  console.error = jest.fn();
141
117
  _context4.next = 4;
142
118
  return (0, _renderRegion.renderRegion)({
@@ -145,23 +121,20 @@ test('renders volvox with variety of args (noRasterize)', /*#__PURE__*/(0, _asyn
145
121
  loc: 'ctgA:1000-2000',
146
122
  noRasterize: true
147
123
  });
148
-
149
124
  case 4:
150
125
  result = _context4.sent;
151
-
152
126
  // can't do a snapshot test here, slightly inconsistent results(?)
153
127
  _fs.default.writeFileSync(require.resolve('../test/svg_from_volvox_fasta_and_bam_norasterize.svg'), result);
154
-
155
128
  expect(result).toBeTruthy();
156
-
157
129
  case 7:
158
130
  case "end":
159
131
  return _context4.stop();
160
132
  }
161
133
  }
162
134
  }, _callee4);
163
- })), timeout); // commented out for using remote files currently
135
+ })), timeout);
164
136
 
137
+ // commented out for using remote files currently
165
138
  xtest('configtracks arg with urls', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
166
139
  var result;
167
140
  return _regenerator.default.wrap(function _callee5$(_context5) {
@@ -175,15 +148,11 @@ xtest('configtracks arg with urls', /*#__PURE__*/(0, _asyncToGenerator2.default)
175
148
  assembly: 'GRCh38',
176
149
  loc: 'chr1:50,000-60,000'
177
150
  });
178
-
179
151
  case 2:
180
152
  result = _context5.sent;
181
-
182
153
  // can't do a snapshot test here, slightly inconsistent results(?)
183
154
  _fs.default.writeFileSync('svg_configtracks_simple.svg', result);
184
-
185
155
  expect(result).toBeTruthy();
186
-
187
156
  case 5:
188
157
  case "end":
189
158
  return _context5.stop();
@@ -204,15 +173,11 @@ test('configtracks arg with local files', /*#__PURE__*/(0, _asyncToGenerator2.de
204
173
  assembly: 'volvox',
205
174
  loc: 'ctgA:1-50,000'
206
175
  });
207
-
208
176
  case 2:
209
177
  result = _context6.sent;
210
-
211
178
  // can't do a snapshot test here, slightly inconsistent results(?)
212
179
  _fs.default.writeFileSync(require.resolve('../test/svg_configtracks_local.svg'), result);
213
-
214
180
  expect(result).toBeTruthy();
215
-
216
181
  case 5:
217
182
  case "end":
218
183
  return _context6.stop();
@@ -232,14 +197,10 @@ xtest('renders --hic', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__
232
197
  trackList: [['hic', ['https://s3.amazonaws.com/igv.broadinstitute.org/data/hic/intra_nofrag_30.hic']]],
233
198
  loc: '1:2,000,000-10,000,000'
234
199
  });
235
-
236
200
  case 2:
237
201
  result = _context7.sent;
238
-
239
202
  _fs.default.writeFileSync(require.resolve('../test/svg_from_human_hic.svg'), result);
240
-
241
203
  expect(result).toBeTruthy();
242
-
243
204
  case 5:
244
205
  case "end":
245
206
  return _context7.stop();
package/dist/parseArgv.js CHANGED
@@ -5,17 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.parseArgv = parseArgv;
7
7
  exports.standardizeArgv = standardizeArgv;
8
-
9
8
  function parseArgv(argv) {
10
9
  var map = [];
11
-
12
10
  while (argv.length) {
13
11
  var val = argv[0].slice(2);
14
12
  argv = argv.slice(1);
15
13
  var next = argv.findIndex(function (arg) {
16
14
  return arg.startsWith('-');
17
15
  });
18
-
19
16
  if (next !== -1) {
20
17
  map.push([val, argv.slice(0, next)]);
21
18
  argv = argv.slice(next);
@@ -24,10 +21,8 @@ function parseArgv(argv) {
24
21
  break;
25
22
  }
26
23
  }
27
-
28
24
  return map;
29
25
  }
30
-
31
26
  function standardizeArgv(args, trackTypes) {
32
27
  var result = {
33
28
  trackList: []
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _parseArgv = require("./parseArgv");
4
-
5
4
  test('parse', function () {
6
5
  var args = '--bam dad.bam color:red --vcf variants.vcf --bam mom.bam --defaultSession --out out.svg --noRasterize';
7
6
  expect((0, _parseArgv.parseArgv)(args.split(' '))).toEqual([['bam', ['dad.bam', 'color:red']], ['vcf', ['variants.vcf']], ['bam', ['mom.bam']], ['defaultSession', []], ['out', ['out.svg']], ['noRasterize', []]]);
@@ -1,55 +1,38 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
7
+ exports.muiCache = void 0;
8
8
  exports.readData = readData;
9
9
  exports.renderRegion = renderRegion;
10
-
11
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
-
13
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
-
15
12
  var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
16
-
17
13
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
18
-
19
14
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
20
-
21
15
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
22
-
23
16
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
24
-
17
+ var _react = _interopRequireDefault(require("react"));
25
18
  var _reactLinearGenomeView = require("@jbrowse/react-linear-genome-view");
26
-
27
19
  var _pluginLinearGenomeView = require("@jbrowse/plugin-linear-genome-view");
28
-
29
- var _mobx = require("mobx");
30
-
20
+ var _cache = _interopRequireDefault(require("@emotion/cache"));
21
+ var _react2 = require("@emotion/react");
31
22
  var _path = _interopRequireDefault(require("path"));
32
-
33
23
  var _fs = _interopRequireDefault(require("fs"));
34
-
35
24
  var _util = require("./util");
36
-
37
25
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
38
-
39
26
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
40
-
41
27
  function read(file) {
42
28
  var res;
43
-
44
29
  try {
45
- res = JSON.parse(_fs.default.readFileSync(file));
30
+ res = JSON.parse(_fs.default.readFileSync(file, 'utf8'));
46
31
  } catch (e) {
47
32
  throw new Error("Failed to parse ".concat(file, " as JSON, use --fasta if you mean to pass a FASTA file"));
48
33
  }
49
-
50
34
  return res;
51
35
  }
52
-
53
36
  function makeLocation(file) {
54
37
  return file.startsWith('http') ? {
55
38
  uri: file
@@ -57,12 +40,10 @@ function makeLocation(file) {
57
40
  localPath: file
58
41
  };
59
42
  }
60
-
61
43
  function addRelativePaths(config, configPath) {
62
44
  if ((0, _typeof2.default)(config) === 'object') {
63
45
  for (var _i = 0, _Object$keys = Object.keys(config); _i < _Object$keys.length; _i++) {
64
46
  var key = _Object$keys[_i];
65
-
66
47
  if ((0, _typeof2.default)(config[key]) === 'object') {
67
48
  addRelativePaths(config[key], configPath);
68
49
  } else if (key === 'localPath') {
@@ -71,49 +52,48 @@ function addRelativePaths(config, configPath) {
71
52
  }
72
53
  }
73
54
  }
74
-
75
55
  function readData(opts) {
76
56
  var _sessionData, _sessionData2, _configData$assemblie;
77
-
78
57
  var asm = opts.assembly,
79
- config = opts.config,
80
- session = opts.session,
81
- fasta = opts.fasta,
82
- aliases = opts.aliases,
83
- defaultSession = opts.defaultSession,
84
- _opts$trackList = opts.trackList,
85
- trackList = _opts$trackList === void 0 ? [] : _opts$trackList,
86
- tracks = opts.tracks;
58
+ config = opts.config,
59
+ session = opts.session,
60
+ fasta = opts.fasta,
61
+ aliases = opts.aliases,
62
+ defaultSession = opts.defaultSession,
63
+ _opts$trackList = opts.trackList,
64
+ trackList = _opts$trackList === void 0 ? [] : _opts$trackList,
65
+ tracks = opts.tracks;
87
66
  var assemblyData = asm && _fs.default.existsSync(asm) ? read(asm) : undefined;
88
67
  var tracksData = tracks ? read(tracks) : undefined;
89
68
  var configData = config ? read(config) : {};
90
69
  var sessionData = session ? read(session) : undefined;
91
-
92
70
  if (config) {
93
71
  addRelativePaths(configData, _path.default.dirname(_path.default.resolve(config)));
94
- } // the session.json can be a raw session or a json file with a "session"
72
+ }
73
+
74
+ // the session.json can be a raw session or a json file with a "session"
95
75
  // attribute, which is what is exported via the "File->Export session" in
96
76
  // jbrowse-web
97
-
98
-
99
77
  if ((_sessionData = sessionData) !== null && _sessionData !== void 0 && _sessionData.session) {
100
78
  sessionData = sessionData.session;
101
- } // only export first view
102
-
79
+ }
103
80
 
81
+ // only export first view
104
82
  if ((_sessionData2 = sessionData) !== null && _sessionData2 !== void 0 && _sessionData2.views) {
105
83
  sessionData.view = sessionData.views[0];
106
- } // use assembly from file if a file existed
107
-
84
+ }
108
85
 
86
+ // use assembly from file if a file existed
109
87
  if (assemblyData) {
110
88
  configData.assembly = assemblyData;
111
- } // else check if it was an assembly name in a config file
89
+ }
90
+ // else check if it was an assembly name in a config file
112
91
  else if ((_configData$assemblie = configData.assemblies) !== null && _configData$assemblie !== void 0 && _configData$assemblie.length) {
113
92
  configData.assembly = asm ? configData.assemblies.find(function (entry) {
114
93
  return entry.name === asm;
115
94
  }) : configData.assemblies[0];
116
- } // else load fasta from command line
95
+ }
96
+ // else load fasta from command line
117
97
  else if (fasta) {
118
98
  var bgzip = fasta.endsWith('gz');
119
99
  configData.assembly = {
@@ -129,7 +109,6 @@ function readData(opts) {
129
109
  }
130
110
  }
131
111
  };
132
-
133
112
  if (aliases) {
134
113
  configData.assembly.refNameAliases = {
135
114
  adapter: {
@@ -138,25 +117,22 @@ function readData(opts) {
138
117
  }
139
118
  };
140
119
  }
141
- } // throw if still no assembly
142
-
120
+ }
143
121
 
122
+ // throw if still no assembly
144
123
  if (!configData.assembly) {
145
124
  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');
146
125
  }
147
-
148
126
  if (tracksData) {
149
127
  configData.tracks = tracksData;
150
128
  } else if (!configData.tracks) {
151
129
  configData.tracks = [];
152
130
  }
153
-
154
131
  trackList.forEach(function (track) {
155
132
  var _track = (0, _slicedToArray2.default)(track, 2),
156
- type = _track[0],
157
- _track$ = (0, _slicedToArray2.default)(_track[1], 1),
158
- file = _track$[0];
159
-
133
+ type = _track[0],
134
+ _track$ = (0, _slicedToArray2.default)(_track[1], 1),
135
+ file = _track$[0];
160
136
  if (type === 'bam') {
161
137
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
162
138
  type: 'AlignmentsTrack',
@@ -173,7 +149,6 @@ function readData(opts) {
173
149
  }
174
150
  }]);
175
151
  }
176
-
177
152
  if (type === 'cram') {
178
153
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
179
154
  type: 'AlignmentsTrack',
@@ -188,7 +163,6 @@ function readData(opts) {
188
163
  }
189
164
  }]);
190
165
  }
191
-
192
166
  if (type === 'bigwig') {
193
167
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
194
168
  type: 'QuantitativeTrack',
@@ -201,7 +175,6 @@ function readData(opts) {
201
175
  }
202
176
  }]);
203
177
  }
204
-
205
178
  if (type === 'vcfgz') {
206
179
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
207
180
  type: 'VariantTrack',
@@ -217,7 +190,6 @@ function readData(opts) {
217
190
  }
218
191
  }]);
219
192
  }
220
-
221
193
  if (type === 'gffgz') {
222
194
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
223
195
  type: 'FeatureTrack',
@@ -233,7 +205,6 @@ function readData(opts) {
233
205
  }
234
206
  }]);
235
207
  }
236
-
237
208
  if (type === 'hic') {
238
209
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
239
210
  type: 'HicTrack',
@@ -246,7 +217,6 @@ function readData(opts) {
246
217
  }
247
218
  }]);
248
219
  }
249
-
250
220
  if (type === 'bigbed') {
251
221
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
252
222
  type: 'FeatureTrack',
@@ -259,7 +229,6 @@ function readData(opts) {
259
229
  }
260
230
  }]);
261
231
  }
262
-
263
232
  if (type === 'bedgz') {
264
233
  configData.tracks = [].concat((0, _toConsumableArray2.default)(configData.tracks), [{
265
234
  type: 'FeatureTrack',
@@ -276,81 +245,83 @@ function readData(opts) {
276
245
  }]);
277
246
  }
278
247
  });
279
-
280
248
  if (!defaultSession) {
281
249
  // don't use defaultSession from config.json file, can result in assembly
282
250
  // name confusion
283
251
  delete configData.defaultSession;
284
- } // only allow an external manually specified session
285
-
252
+ }
286
253
 
254
+ // only allow an external manually specified session
287
255
  if (sessionData) {
288
256
  configData.defaultSession = sessionData;
289
257
  }
290
-
291
258
  return configData;
292
259
  }
293
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
+ var muiCache = (0, _cache.default)({
264
+ key: 'mui',
265
+ prepend: true
266
+ });
267
+ exports.muiCache = muiCache;
294
268
  function renderRegion() {
295
269
  return _renderRegion.apply(this, arguments);
296
270
  }
297
-
298
271
  function _renderRegion() {
299
272
  _renderRegion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
300
273
  var opts,
301
- model,
302
- loc,
303
- _opts$width,
304
- width,
305
- _opts$trackList2,
306
- trackList,
307
- sessionParam,
308
- defaultSession,
309
- session,
310
- view,
311
- assemblyManager,
312
- assembly,
313
- region,
314
- process,
315
- _args = arguments;
316
-
274
+ model,
275
+ loc,
276
+ _opts$width,
277
+ width,
278
+ _opts$trackList2,
279
+ trackList,
280
+ sessionParam,
281
+ defaultSession,
282
+ session,
283
+ view,
284
+ assemblyManager,
285
+ _assemblyManager$asse,
286
+ assembly,
287
+ process,
288
+ _args = arguments;
317
289
  return _regenerator.default.wrap(function _callee$(_context) {
318
290
  while (1) {
319
291
  switch (_context.prev = _context.next) {
320
292
  case 0:
321
293
  process = function _process(trackEntry) {
322
294
  var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
323
-
324
295
  var _trackEntry = (0, _slicedToArray2.default)(trackEntry, 2),
325
- _trackEntry$ = (0, _toArray2.default)(_trackEntry[1]),
326
- track = _trackEntry$[0],
327
- opts = _trackEntry$.slice(1);
328
-
296
+ _trackEntry$ = (0, _toArray2.default)(_trackEntry[1]),
297
+ track = _trackEntry$[0],
298
+ opts = _trackEntry$.slice(1);
329
299
  var currentTrack = view.showTrack(extra(track));
330
300
  var display = currentTrack.displays[0];
331
301
  opts.forEach(function (opt) {
332
302
  // apply height to any track
333
303
  if (opt.startsWith('height:')) {
334
304
  var _opt$split = opt.split(':'),
335
- _opt$split2 = (0, _slicedToArray2.default)(_opt$split, 2),
336
- height = _opt$split2[1];
337
-
305
+ _opt$split2 = (0, _slicedToArray2.default)(_opt$split, 2),
306
+ height = _opt$split2[1];
338
307
  display.setHeight(+height);
339
- } // apply sort to pileup
308
+ }
309
+
310
+ // apply sort to pileup
340
311
  else if (opt.startsWith('sort:')) {
341
312
  var _opt$split3 = opt.split(':'),
342
- _opt$split4 = (0, _slicedToArray2.default)(_opt$split3, 3),
343
- type = _opt$split4[1],
344
- tag = _opt$split4[2];
345
-
313
+ _opt$split4 = (0, _slicedToArray2.default)(_opt$split3, 3),
314
+ type = _opt$split4[1],
315
+ tag = _opt$split4[2];
346
316
  display.PileupDisplay.setSortedBy(type, tag);
347
- } // apply color scheme to pileup
317
+ }
318
+
319
+ // apply color scheme to pileup
348
320
  else if (opt.startsWith('color:')) {
349
321
  var _opt$split5 = opt.split(':'),
350
- _opt$split6 = (0, _slicedToArray2.default)(_opt$split5, 3),
351
- _type = _opt$split6[1],
352
- _tag = _opt$split6[2];
353
-
322
+ _opt$split6 = (0, _slicedToArray2.default)(_opt$split5, 3),
323
+ _type = _opt$split6[1],
324
+ _tag = _opt$split6[2];
354
325
  if (display.PileupDisplay) {
355
326
  display.PileupDisplay.setColorScheme({
356
327
  type: _type,
@@ -359,69 +330,74 @@ function _renderRegion() {
359
330
  } else {
360
331
  display.setColor(_type);
361
332
  }
362
- } // force track to render even if maxbpperpx limit hit...
333
+ }
334
+
335
+ // force track to render even if maxbpperpx limit hit...
363
336
  else if (opt.startsWith('force:')) {
364
337
  var _opt$split7 = opt.split(':'),
365
- _opt$split8 = (0, _slicedToArray2.default)(_opt$split7, 2),
366
- force = _opt$split8[1];
367
-
338
+ _opt$split8 = (0, _slicedToArray2.default)(_opt$split7, 2),
339
+ force = _opt$split8[1];
368
340
  if (force) {
369
341
  display.setUserFeatureScreenDensity(Number.MAX_VALUE);
370
342
  }
371
- } // apply wiggle autoscale
343
+ }
344
+
345
+ // apply wiggle autoscale
372
346
  else if (opt.startsWith('autoscale:')) {
373
347
  var _opt$split9 = opt.split(':'),
374
- _opt$split10 = (0, _slicedToArray2.default)(_opt$split9, 2),
375
- autoscale = _opt$split10[1];
376
-
348
+ _opt$split10 = (0, _slicedToArray2.default)(_opt$split9, 2),
349
+ autoscale = _opt$split10[1];
377
350
  display.setAutoscale(autoscale);
378
- } // apply min and max score to wiggle
351
+ }
352
+
353
+ // apply min and max score to wiggle
379
354
  else if (opt.startsWith('minmax:')) {
380
355
  var _opt$split11 = opt.split(':'),
381
- _opt$split12 = (0, _slicedToArray2.default)(_opt$split11, 3),
382
- min = _opt$split12[1],
383
- max = _opt$split12[2];
384
-
356
+ _opt$split12 = (0, _slicedToArray2.default)(_opt$split11, 3),
357
+ min = _opt$split12[1],
358
+ max = _opt$split12[2];
385
359
  display.setMinScore(+min);
386
360
  display.setMaxScore(+max);
387
- } // apply linear or log scale to wiggle
361
+ }
362
+
363
+ // apply linear or log scale to wiggle
388
364
  else if (opt.startsWith('scaletype:')) {
389
365
  var _opt$split13 = opt.split(':'),
390
- _opt$split14 = (0, _slicedToArray2.default)(_opt$split13, 2),
391
- scaletype = _opt$split14[1];
392
-
366
+ _opt$split14 = (0, _slicedToArray2.default)(_opt$split13, 2),
367
+ scaletype = _opt$split14[1];
393
368
  display.setScaleType(scaletype);
394
- } // draw crosshatches on wiggle
369
+ }
370
+
371
+ // draw crosshatches on wiggle
395
372
  else if (opt.startsWith('crosshatch:')) {
396
373
  var _opt$split15 = opt.split(':'),
397
- _opt$split16 = (0, _slicedToArray2.default)(_opt$split15, 2),
398
- val = _opt$split16[1];
399
-
374
+ _opt$split16 = (0, _slicedToArray2.default)(_opt$split15, 2),
375
+ val = _opt$split16[1];
400
376
  display.setCrossHatches((0, _util.booleanize)(val));
401
- } // turn off fill on bigwig with fill:false
377
+ }
378
+
379
+ // turn off fill on bigwig with fill:false
402
380
  else if (opt.startsWith('fill:')) {
403
381
  var _opt$split17 = opt.split(':'),
404
- _opt$split18 = (0, _slicedToArray2.default)(_opt$split17, 2),
405
- _val = _opt$split18[1];
406
-
382
+ _opt$split18 = (0, _slicedToArray2.default)(_opt$split17, 2),
383
+ _val = _opt$split18[1];
407
384
  display.setFill((0, _util.booleanize)(_val));
408
- } // set resolution:superfine to use finer bigwig bin size
385
+ }
386
+
387
+ // set resolution:superfine to use finer bigwig bin size
409
388
  else if (opt.startsWith('resolution:')) {
410
389
  var _opt$split19 = opt.split(':'),
411
- _opt$split20 = (0, _slicedToArray2.default)(_opt$split19, 2),
412
- _val2 = _opt$split20[1];
413
-
390
+ _opt$split20 = (0, _slicedToArray2.default)(_opt$split19, 2),
391
+ _val2 = _opt$split20[1];
414
392
  if (_val2 === 'fine') {
415
393
  _val2 = 10;
416
394
  } else if (_val2 === 'superfine') {
417
395
  _val2 = 100;
418
396
  }
419
-
420
397
  display.setResolution(_val2);
421
398
  }
422
399
  });
423
400
  };
424
-
425
401
  opts = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
426
402
  model = (0, _reactLinearGenomeView.createViewState)(readData(opts));
427
403
  loc = opts.loc, _opts$width = opts.width, width = _opts$width === void 0 ? 1500 : _opts$width, _opts$trackList2 = opts.trackList, trackList = _opts$trackList2 === void 0 ? [] : _opts$trackList2, sessionParam = opts.session, defaultSession = opts.defaultSession;
@@ -429,41 +405,45 @@ function _renderRegion() {
429
405
  view = session.view;
430
406
  assemblyManager = model.assemblyManager;
431
407
  view.setWidth(width);
432
- _context.next = 10;
433
- return (0, _mobx.when)(function () {
434
- var _assemblyManager$allP;
435
-
436
- return ((_assemblyManager$allP = assemblyManager.allPossibleRefNames) === null || _assemblyManager$allP === void 0 ? void 0 : _assemblyManager$allP.length) && model.session.view.initialized;
437
- });
438
-
439
- case 10:
440
- if (loc) {
441
- assembly = assemblyManager.assemblies[0];
442
- region = assembly.regions[0];
443
-
444
- if (region) {
445
- view.setDisplayedRegions([region]);
446
- }
447
-
448
- if (loc === 'all') {
449
- view.showAllRegionsInAssembly(assembly.name);
450
- } else {
451
- view.navToLocString(loc);
452
- }
453
- } else if (!sessionParam && !defaultSession) {
408
+ if (!loc) {
409
+ _context.next = 18;
410
+ break;
411
+ }
412
+ _assemblyManager$asse = (0, _slicedToArray2.default)(assemblyManager.assemblies, 1), assembly = _assemblyManager$asse[0];
413
+ if (!(loc === 'all')) {
414
+ _context.next = 14;
415
+ break;
416
+ }
417
+ view.showAllRegionsInAssembly(assembly.name);
418
+ _context.next = 16;
419
+ break;
420
+ case 14:
421
+ _context.next = 16;
422
+ return view.navToLocString(loc, assembly.name);
423
+ case 16:
424
+ _context.next = 19;
425
+ break;
426
+ case 18:
427
+ if (!sessionParam && !defaultSession) {
454
428
  console.warn('No loc specified');
455
429
  }
456
-
430
+ case 19:
457
431
  trackList.forEach(function (track) {
458
432
  return process(track, function (extra) {
459
433
  return _path.default.basename(extra);
460
434
  });
461
435
  });
462
- return _context.abrupt("return", (0, _pluginLinearGenomeView.renderToSvg)(view, _objectSpread({
436
+ return _context.abrupt("return", (0, _pluginLinearGenomeView.renderToSvg)(view, _objectSpread(_objectSpread({
463
437
  rasterizeLayers: !opts.noRasterize
464
- }, opts)));
465
-
466
- case 13:
438
+ }, opts), {}, {
439
+ Wrapper: function Wrapper(_ref) {
440
+ var children = _ref.children;
441
+ return /*#__PURE__*/_react.default.createElement(_react2.CacheProvider, {
442
+ value: muiCache
443
+ }, children);
444
+ }
445
+ })));
446
+ case 21:
467
447
  case "end":
468
448
  return _context.stop();
469
449
  }
package/dist/util.js CHANGED
@@ -4,10 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.booleanize = void 0;
7
-
8
7
  // nice helper function from https://stackoverflow.com/questions/263965/
9
8
  var booleanize = function booleanize(string) {
10
9
  return string === 'false' ? false : !!string;
11
10
  };
12
-
13
11
  exports.booleanize = booleanize;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/img",
3
- "version": "2.1.6",
3
+ "version": "2.2.0",
4
4
  "main": "index.js",
5
5
  "author": "JBrowse Team",
6
6
  "license": "Apache-2.0",
@@ -18,18 +18,14 @@
18
18
  "test": "jest",
19
19
  "prebuild": "rm -rf dist",
20
20
  "build": "babel --root-mode upward src -d dist",
21
- "preversion": "npm run build",
22
- "snap": "npm run build && node dist/index.js --config data/config.json --defaultSession --out out.svg",
23
- "snappng": "npm run build && node dist/index.js --config data/config.json --defaultSession --out out.png",
24
- "snappdf": "npm run build && node dist/index.js --config data/config.json --defaultSession --out out.pdf",
25
- "snapjpg": "npm run build && node dist/index.js --config data/config.json --defaultSession --out out.jpg",
26
- "tiny": "npm run build && node dist/index.js --fasta data/volvox/volvox.fa --bam data/volvox/volvox-sorted.bam --loc ctgA:1-5000 --out tiny.svg",
27
- "tinypng": "npm run build && node dist/index.js --fasta data/volvox/volvox.fa --bam data/volvox/volvox-sorted.bam --loc ctgA:1-5000 --out out.png"
21
+ "preversion": "npm run build"
28
22
  },
29
23
  "dependencies": {
30
24
  "@babel/runtime": "^7.17.9",
31
- "@jbrowse/plugin-linear-genome-view": "^2.1.6",
32
- "@jbrowse/react-linear-genome-view": "^2.1.6",
25
+ "@emotion/cache": "^11.7.1",
26
+ "@emotion/react": "^11.9.0",
27
+ "@jbrowse/plugin-linear-genome-view": "^2.2.0",
28
+ "@jbrowse/react-linear-genome-view": "^2.2.0",
33
29
  "abortcontroller-polyfill": "^1.7.3",
34
30
  "canvas": "^2.9.1",
35
31
  "jsdom": "^19.0.0",
@@ -43,5 +39,5 @@
43
39
  "publishConfig": {
44
40
  "access": "public"
45
41
  },
46
- "gitHead": "df810d2a4f057adcd8f5345d54972508fba007a7"
42
+ "gitHead": "cf31db8d833117f8822510340664fb3f045975cb"
47
43
  }