@jbrowse/core 2.4.0 → 2.4.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 (88) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.js +13 -9
  2. package/BaseFeatureWidget/SequencePanel.js +1 -1
  3. package/BaseFeatureWidget/index.js +2 -2
  4. package/PluginLoader.js +8 -8
  5. package/PluginManager.d.ts +1 -1
  6. package/PluginManager.js +2 -3
  7. package/ReExports/Attributes.d.ts +1 -2
  8. package/ReExports/Attributes.js +4 -3
  9. package/ReExports/BaseCard.d.ts +1 -2
  10. package/ReExports/BaseCard.js +4 -3
  11. package/ReExports/DataGrid.d.ts +1 -2
  12. package/ReExports/DataGrid.js +2 -2
  13. package/ReExports/FeatureDetails.d.ts +1 -2
  14. package/ReExports/FeatureDetails.js +4 -3
  15. package/ReExports/index.d.ts +1 -2
  16. package/ReExports/index.js +3 -2
  17. package/ReExports/modules.d.ts +1 -1
  18. package/ReExports/modules.js +2 -2
  19. package/assemblyManager/assembly.js +5 -5
  20. package/assemblyManager/assemblyConfigSchema.js +2 -2
  21. package/configuration/configurationSchema.js +1 -1
  22. package/configuration/util.js +1 -1
  23. package/data_adapters/BaseAdapter.js +1 -1
  24. package/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  25. package/data_adapters/dataAdapterCache.d.ts +3 -2
  26. package/data_adapters/dataAdapterCache.js +2 -3
  27. package/package.json +2 -2
  28. package/pluggableElementTypes/RpcMethodType.js +1 -1
  29. package/pluggableElementTypes/index.d.ts +11 -1
  30. package/pluggableElementTypes/index.js +23 -23
  31. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -2
  32. package/pluggableElementTypes/models/BaseTrackModel.js +8 -13
  33. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +2 -2
  34. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +1 -3
  35. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
  36. package/pluggableElementTypes/renderers/index.d.ts +7 -9
  37. package/pluggableElementTypes/renderers/index.js +15 -15
  38. package/pluggableElementTypes/renderers/util/serializableFilterChain.js +1 -1
  39. package/rpc/BaseRpcDriver.js +7 -8
  40. package/rpc/WebWorkerRpcDriver.js +18 -12
  41. package/rpc/coreRpcMethods.d.ts +9 -11
  42. package/rpc/coreRpcMethods.js +17 -17
  43. package/rpc/methods/CoreGetFeatureDetails.js +1 -1
  44. package/rpc/methods/util.d.ts +2 -2
  45. package/rpc/methods/util.js +2 -2
  46. package/rpc/remoteAbortSignals.js +0 -1
  47. package/tsconfig.build.tsbuildinfo +1 -1
  48. package/ui/App.js +1 -1
  49. package/ui/AppLogo.js +1 -6
  50. package/ui/ColorPicker.js +1 -1
  51. package/ui/Dialog.js +1 -1
  52. package/ui/DrawerWidget.js +4 -4
  53. package/ui/EditableTypography.js +1 -1
  54. package/ui/FileSelector/FileSelector.d.ts +2 -2
  55. package/ui/FileSelector/FileSelector.js +24 -35
  56. package/ui/FileSelector/index.d.ts +1 -2
  57. package/ui/FileSelector/index.js +3 -2
  58. package/ui/LoadingEllipses.js +4 -4
  59. package/ui/Menu.js +45 -32
  60. package/ui/ResizeBar.js +6 -1
  61. package/ui/ResizeHandle.js +3 -6
  62. package/ui/ViewContainer.js +4 -6
  63. package/ui/theme.js +7 -7
  64. package/util/Base1DUtils.js +16 -14
  65. package/util/Base1DViewModel.d.ts +1 -1
  66. package/util/Base1DViewModel.js +9 -8
  67. package/util/aborting.js +1 -1
  68. package/util/analytics.js +1 -1
  69. package/util/blockTypes.js +10 -10
  70. package/util/color/index.d.ts +1 -2
  71. package/util/color/index.js +4 -3
  72. package/util/idMaker.js +5 -8
  73. package/util/index.d.ts +6 -7
  74. package/util/index.js +25 -48
  75. package/util/io/RemoteFileWithRangeCache.js +2 -2
  76. package/util/io/index.d.ts +1 -2
  77. package/util/io/index.js +6 -6
  78. package/util/jexl.js +3 -1
  79. package/util/layouts/GranularRectLayout.js +10 -4
  80. package/util/layouts/MultiLayout.js +1 -1
  81. package/util/layouts/SceneGraph.js +3 -7
  82. package/util/offscreenCanvasPonyfill.js +4 -3
  83. package/util/offscreenCanvasUtils.js +1 -0
  84. package/util/tracks.d.ts +1 -1
  85. package/util/tracks.js +0 -1
  86. package/util/types/index.d.ts +1 -1
  87. package/util/types/index.js +3 -3
  88. package/util/types/mst.js +3 -3
@@ -169,7 +169,7 @@ function Position(props) {
169
169
  '1': '+',
170
170
  };
171
171
  const str = strandMap[strand] ? `(${strandMap[strand]})` : '';
172
- // @ts-ignore
172
+ // @ts-expect-error
173
173
  const loc = (0, util_1.assembleLocString)(feature);
174
174
  return react_1.default.createElement(react_1.default.Fragment, null, `${loc} ${str}`);
175
175
  }
@@ -209,7 +209,11 @@ exports.UriLink = UriLink;
209
209
  function DataGridDetails({ value, prefix, name, }) {
210
210
  const keys = Object.keys(value[0]).sort();
211
211
  const unionKeys = new Set(keys);
212
- value.forEach((val) => Object.keys(val).forEach(k => unionKeys.add(k)));
212
+ for (const val of value) {
213
+ for (const k of Object.keys(val)) {
214
+ unionKeys.add(k);
215
+ }
216
+ }
213
217
  if (unionKeys.size < keys.length + 5) {
214
218
  // avoids key 'id' from being used in row data
215
219
  const rows = Object.entries(value).map(([k, val]) => {
@@ -294,12 +298,12 @@ function UriAttribute({ value, prefix, name, }) {
294
298
  }
295
299
  function Attributes(props) {
296
300
  const { attributes, omit = [], omitSingleLevel = [], descriptions, formatter = val => val, hideUris, prefix = [], } = props;
297
- const omits = [...omit, ...globalOmit, ...omitSingleLevel];
301
+ const omits = new Set([...omit, ...globalOmit, ...omitSingleLevel]);
298
302
  const { __jbrowsefmt, ...rest } = attributes;
299
303
  const formattedAttributes = { ...rest, ...__jbrowsefmt };
300
- const maxLabelWidth = generateMaxWidth(Object.entries(formattedAttributes).filter(([k, v]) => v !== undefined && !omits.includes(k)), prefix);
304
+ const maxLabelWidth = generateMaxWidth(Object.entries(formattedAttributes).filter(([k, v]) => v !== undefined && !omits.has(k)), prefix);
301
305
  return (react_1.default.createElement(react_1.default.Fragment, null, Object.entries(formattedAttributes)
302
- .filter(([k, v]) => v !== undefined && !omits.includes(k))
306
+ .filter(([k, v]) => v !== undefined && !omits.has(k))
303
307
  .map(([key, value]) => {
304
308
  const description = accessNested([...prefix, key], descriptions);
305
309
  if (Array.isArray(value)) {
@@ -333,7 +337,7 @@ function generateTitle(name, id, type) {
333
337
  }
334
338
  function FeatureDetails(props) {
335
339
  const { omit = [], model, feature, depth = 0 } = props;
336
- const { name = '', id = '', type = '', subfeatures } = feature;
340
+ const { mate, name = '', id = '', type = '', subfeatures } = feature;
337
341
  const pm = (0, util_1.getEnv)(model).pluginManager;
338
342
  const session = (0, util_1.getSession)(model);
339
343
  const ExtraPanel = pm.evaluateExtensionPoint('Core-extraFeaturePanel', null, {
@@ -344,10 +348,10 @@ function FeatureDetails(props) {
344
348
  return (react_1.default.createElement(BaseCard, { title: generateTitle(name, id, type) },
345
349
  react_1.default.createElement(material_1.Typography, null, "Core details"),
346
350
  react_1.default.createElement(CoreDetails, { ...props }),
347
- feature.mate ? (react_1.default.createElement(react_1.default.Fragment, null,
351
+ mate ? (react_1.default.createElement(react_1.default.Fragment, null,
348
352
  react_1.default.createElement(material_1.Divider, null),
349
353
  react_1.default.createElement(material_1.Typography, null, "Mate details"),
350
- react_1.default.createElement(CoreDetails, { ...props, feature: feature.mate }))) : null,
354
+ react_1.default.createElement(CoreDetails, { ...props, feature: mate }))) : null,
351
355
  react_1.default.createElement(material_1.Divider, null),
352
356
  react_1.default.createElement(material_1.Typography, null, "Attributes"),
353
357
  react_1.default.createElement(Attributes, { attributes: feature, ...props, omit: omit, omitSingleLevel: coreDetails }),
@@ -369,6 +373,6 @@ exports.default = (0, mobx_react_1.observer)(function ({ model }) {
369
373
  // setting null is not allowed by jexl so we set it to undefined to hide. see
370
374
  // config guide. this replacement happens both here and when snapshotting the
371
375
  // featureData
372
- const g = JSON.parse(JSON.stringify(featureData, (_, v) => typeof v === 'undefined' ? null : v));
376
+ const g = JSON.parse(JSON.stringify(featureData, (_, v) => (v === undefined ? null : v)));
373
377
  return isEmpty(g) ? null : react_1.default.createElement(FeatureDetails, { model: model, feature: g });
374
378
  });
@@ -68,7 +68,7 @@ const SeqPanel = react_1.default.forwardRef(function (props, ref) {
68
68
  } },
69
69
  react_1.default.createElement("span", { style: { background: 'white' } }, `>${feature.name ||
70
70
  feature.id ||
71
- feature.refName + ':' + (feature.start + 1) + '-' + feature.end}-${mode}\n`),
71
+ `${feature.refName}:${feature.start + 1}-${feature.end}`}-${mode}\n`),
72
72
  react_1.default.createElement("br", null),
73
73
  mode === 'genomic' ? (react_1.default.createElement(SequenceBox_1.Genomic, { sequence: seq })) : mode === 'genomic_sequence_updown' ? (react_1.default.createElement(SequenceBox_1.Genomic, { sequence: seq, upstream: upstream, downstream: downstream })) : mode === 'cds' ? (react_1.default.createElement(SequenceBox_1.GeneCDS, { cds: cds, sequence: seq })) : mode === 'cdna' ? (react_1.default.createElement(SequenceBox_1.GenecDNA, { exons: exons, cds: cds, utr: utr, sequence: seq, intronBp: intronBp })) : mode === 'protein' ? (react_1.default.createElement(SequenceBox_1.GeneProtein, { cds: cds, codonTable: codonTable, sequence: seq })) : mode === 'gene' ? (react_1.default.createElement(SequenceBox_1.GenecDNA, { exons: exons, cds: cds, utr: utr, sequence: seq, includeIntrons: true, intronBp: intronBp })) : mode === 'gene_collapsed_intron' ? (react_1.default.createElement(SequenceBox_1.GenecDNA, { exons: exons, cds: cds, sequence: seq, utr: utr, includeIntrons: true, collapseIntron: true, intronBp: intronBp })) : mode === 'gene_updownstream' ? (react_1.default.createElement(SequenceBox_1.GenecDNA, { exons: exons, cds: cds, sequence: seq, utr: utr, upstream: upstream, downstream: downstream, includeIntrons: true, intronBp: intronBp })) : mode === 'gene_updownstream_collapsed_intron' ? (react_1.default.createElement(SequenceBox_1.GenecDNA, { exons: exons, cds: cds, sequence: seq, utr: utr, upstream: upstream, downstream: downstream, includeIntrons: true, collapseIntron: true, intronBp: intronBp })) : (react_1.default.createElement("div", null, "Unknown type")))));
74
74
  });
@@ -82,7 +82,7 @@ function stateModelFactory(pluginManager) {
82
82
  },
83
83
  }))
84
84
  .preProcessSnapshot(snap => {
85
- // @ts-ignore
85
+ // @ts-expect-error
86
86
  const { featureData, finalizedFeatureData, ...rest } = snap;
87
87
  return {
88
88
  unformattedFeatureData: featureData,
@@ -100,7 +100,7 @@ function stateModelFactory(pluginManager) {
100
100
  // hidden, setting null is not allowed by jexl so we set it to
101
101
  // undefined to hide. see config guide. this replacement happens both
102
102
  // here and when displaying the featureData in base feature widget
103
- finalizedFeatureData: JSON.parse(JSON.stringify(featureData, (_, v) => typeof v === 'undefined' ? null : v)),
103
+ finalizedFeatureData: JSON.parse(JSON.stringify(featureData, (_, v) => (v === undefined ? null : v))),
104
104
  ...rest,
105
105
  };
106
106
  });
package/PluginLoader.js CHANGED
@@ -39,9 +39,9 @@ class PluginLoader {
39
39
  if (!isInWebWorker()) {
40
40
  return (0, load_script2_1.default)(scriptUrl);
41
41
  }
42
- // @ts-ignore
42
+ // @ts-expect-error
43
43
  if (globalThis === null || globalThis === void 0 ? void 0 : globalThis.importScripts) {
44
- // @ts-ignore
44
+ // @ts-expect-error
45
45
  await globalThis.importScripts(scriptUrl);
46
46
  return;
47
47
  }
@@ -84,14 +84,14 @@ class PluginLoader {
84
84
  }
85
85
  const moduleName = def.name;
86
86
  const umdName = `JBrowsePlugin${moduleName}`;
87
- if (typeof jest !== 'undefined') {
88
- // @ts-ignore
89
- globalThis[umdName] = { default: Plugin_1.default };
87
+ if (typeof jest === 'undefined') {
88
+ await this.loadScript(parsedUrl.href);
90
89
  }
91
90
  else {
92
- await this.loadScript(parsedUrl.href);
91
+ // @ts-expect-error
92
+ globalThis[umdName] = { default: Plugin_1.default };
93
93
  }
94
- // @ts-ignore
94
+ // @ts-expect-error
95
95
  const plugin = globalThis[umdName];
96
96
  if (!plugin) {
97
97
  throw new Error(`Failed to load UMD bundle for ${moduleName}, ${umdName} is undefined`);
@@ -118,7 +118,7 @@ class PluginLoader {
118
118
  return plugin.default;
119
119
  }
120
120
  installGlobalReExports(target) {
121
- // @ts-ignore
121
+ // @ts-expect-error
122
122
  target.JBrowseExports = Object.fromEntries(Object.entries(ReExports_1.default).map(([moduleName, module]) => {
123
123
  return [moduleName, module];
124
124
  }));
@@ -195,7 +195,7 @@ export default class PluginManager {
195
195
  showAllRegions(): void;
196
196
  zoomOut(): void;
197
197
  zoomIn(): void;
198
- zoomTo(newBpPerPx: number, offset?: number): number;
198
+ zoomTo(bpPerPx: number, offset?: number): number;
199
199
  scrollTo(offsetPx: number): number;
200
200
  centerAt(coord: number, refName: string | undefined, regionNumber: number): void;
201
201
  scroll(distance: number): number;
package/PluginManager.js CHANGED
@@ -149,7 +149,6 @@ class PluginManager {
149
149
  }
150
150
  this.pluginMetadata[plugin.name] = metadata;
151
151
  if ('definition' in load) {
152
- // @ts-ignore
153
152
  this.runtimePluginDefinitions.push(load.definition);
154
153
  }
155
154
  plugin.install(this);
@@ -253,7 +252,7 @@ class PluginManager {
253
252
  pluggableMstType(groupName, fieldName, fallback = mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.null)) {
254
253
  const pluggableTypes = this.getElementTypeRecord(groupName)
255
254
  .all()
256
- // @ts-ignore
255
+ // @ts-expect-error
257
256
  .map(t => t[fieldName])
258
257
  .filter(t => (0, mobx_state_tree_1.isType)(t) && (0, mobx_state_tree_1.isModelType)(t));
259
258
  // try to smooth over the case when no types are registered, mostly
@@ -268,7 +267,7 @@ class PluginManager {
268
267
  pluggableConfigSchemaType(typeGroup, fieldName = 'configSchema') {
269
268
  const pluggableTypes = this.getElementTypeRecord(typeGroup)
270
269
  .all()
271
- // @ts-ignore
270
+ // @ts-expect-error
272
271
  .map(t => t[fieldName])
273
272
  .filter(t => (0, configuration_1.isBareConfigurationSchemaType)(t));
274
273
  if (pluggableTypes.length === 0) {
@@ -1,2 +1 @@
1
- import { Attributes } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
2
- export default Attributes;
1
+ export { Attributes as default } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
2
  // convert named export to default for lazy react
4
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
5
- exports.default = BaseFeatureDetail_1.Attributes;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = void 0;
5
+ var BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
6
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return BaseFeatureDetail_1.Attributes; } });
@@ -1,2 +1 @@
1
- import { BaseCard } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
2
- export default BaseCard;
1
+ export { BaseCard as default } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
2
  // convert named export to default for lazy react
4
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
5
- exports.default = BaseFeatureDetail_1.BaseCard;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = void 0;
5
+ var BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
6
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return BaseFeatureDetail_1.BaseCard; } });
@@ -1,2 +1 @@
1
- import { DataGrid } from '@mui/x-data-grid';
2
- export { DataGrid as default };
1
+ export { DataGrid as default } from '@mui/x-data-grid';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
+ // convert named export to default for lazy react
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.default = void 0;
4
- // convert named export to default for lazy react
5
- const x_data_grid_1 = require("@mui/x-data-grid");
5
+ var x_data_grid_1 = require("@mui/x-data-grid");
6
6
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return x_data_grid_1.DataGrid; } });
@@ -1,2 +1 @@
1
- import { FeatureDetails } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
2
- export default FeatureDetails;
1
+ export { FeatureDetails as default } from '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail';
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
2
  // convert named export to default for lazy react
4
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
5
- exports.default = BaseFeatureDetail_1.FeatureDetails;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = void 0;
5
+ var BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
6
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return BaseFeatureDetail_1.FeatureDetails; } });
@@ -1,2 +1 @@
1
- import modules from './modules';
2
- export default modules;
1
+ export { default } from './modules';
@@ -3,5 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const modules_1 = __importDefault(require("./modules"));
7
- exports.default = modules_1.default;
6
+ exports.default = void 0;
7
+ var modules_1 = require("./modules");
8
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(modules_1).default; } });
@@ -112,7 +112,7 @@ declare const libs: {
112
112
  showAllRegions(): void;
113
113
  zoomOut(): void;
114
114
  zoomIn(): void;
115
- zoomTo(newBpPerPx: number, offset?: number): number;
115
+ zoomTo(bpPerPx: number, offset?: number): number;
116
116
  scrollTo(offsetPx: number): number;
117
117
  centerAt(coord: number, refName: string | undefined, regionNumber: number): void;
118
118
  scroll(distance: number): number;
@@ -445,11 +445,11 @@ const libs = {
445
445
  },
446
446
  '@jbrowse/core/data_adapters/BaseAdapter': BaseAdapterExports,
447
447
  };
448
- const libsList = Array.from(Object.keys(libs));
448
+ const libsList = Object.keys(libs);
449
449
  // make sure that all the items in the ReExports/list array (used by build
450
450
  // systems and such) are included here, and vice versa
451
451
  const inLibsOnly = libsList.filter(mod => !list_1.default.includes(mod));
452
- if (inLibsOnly.length) {
452
+ if (inLibsOnly.length > 0) {
453
453
  throw new Error(`The following modules are in the re-exports list, but not the modules libs: ${inLibsOnly.join(', ')}`);
454
454
  }
455
455
  const inReExportsOnly = list_1.default.filter(mod => !libsList.includes(mod));
@@ -74,7 +74,7 @@ async function loadRefNameMap(assembly, adapterConfig, options, signal) {
74
74
  }
75
75
  // Valid refName pattern from https://samtools.github.io/hts-specs/SAMv1.pdf
76
76
  function checkRefName(refName) {
77
- if (!refName.match(refNameRegex)) {
77
+ if (!refNameRegex.test(refName)) {
78
78
  throw new Error(`Encountered invalid refName: "${refName}"`);
79
79
  }
80
80
  }
@@ -104,7 +104,7 @@ function assemblyFactory(assemblyConfigType, pm) {
104
104
  }))
105
105
  .views(self => ({
106
106
  get initialized() {
107
- // @ts-ignore
107
+ // @ts-expect-error
108
108
  self.load();
109
109
  return !!self.refNameAliases;
110
110
  },
@@ -112,7 +112,7 @@ function assemblyFactory(assemblyConfigType, pm) {
112
112
  return (0, configuration_1.getConf)(self, 'name');
113
113
  },
114
114
  get regions() {
115
- // @ts-ignore
115
+ // @ts-expect-error
116
116
  self.load();
117
117
  return self.volatileRegions;
118
118
  },
@@ -172,7 +172,7 @@ function assemblyFactory(assemblyConfigType, pm) {
172
172
  if (!self.refNames) {
173
173
  return undefined;
174
174
  }
175
- const idx = self.refNames.findIndex(r => r === refName);
175
+ const idx = self.refNames.indexOf(refName);
176
176
  if (idx === -1) {
177
177
  return undefined;
178
178
  }
@@ -301,7 +301,7 @@ async function getCytobands(config, pm) {
301
301
  const type = pm.getAdapterType(config.type);
302
302
  const CLASS = await type.getAdapterClass();
303
303
  const adapter = new CLASS(config, undefined, pm);
304
- // @ts-ignore
304
+ // @ts-expect-error
305
305
  return adapter.getData();
306
306
  }
307
307
  async function getAssemblyRegions(config, pm, signal) {
@@ -42,7 +42,7 @@ function assemblyConfigSchema(pluginManager) {
42
42
  }, {
43
43
  preProcessSnapshot: snap => {
44
44
  // allow refNameAliases to be unspecified
45
- // @ts-ignore
45
+ // @ts-expect-error
46
46
  if (!snap.adapter) {
47
47
  return { adapter: { type: 'RefNameAliasAdapter' } };
48
48
  }
@@ -59,7 +59,7 @@ function assemblyConfigSchema(pluginManager) {
59
59
  }, {
60
60
  preProcessSnapshot: snap => {
61
61
  // allow cytoBand to be unspecified
62
- // @ts-ignore
62
+ // @ts-expect-error
63
63
  if (!snap.adapter) {
64
64
  return { adapter: { type: 'CytobandAdapter' } };
65
65
  }
@@ -32,7 +32,7 @@ function preprocessConfigurationSchemaArguments(modelName, inputSchemaDefinition
32
32
  ...schemaDefinition,
33
33
  };
34
34
  options = {
35
- ...(inputOptions.baseConfiguration.jbrowseSchemaOptions || {}),
35
+ ...inputOptions.baseConfiguration.jbrowseSchemaOptions,
36
36
  ...inputOptions,
37
37
  };
38
38
  delete options.baseConfiguration;
@@ -100,7 +100,7 @@ exports.getConf = getConf;
100
100
  function getTypeNamesFromExplicitlyTypedUnion(maybeUnionType) {
101
101
  if ((0, mobx_state_tree_1.isType)(maybeUnionType)) {
102
102
  maybeUnionType = (0, mst_reflection_1.resolveLateType)(maybeUnionType);
103
- // @ts-ignore
103
+ // @ts-expect-error
104
104
  if ((0, mobx_state_tree_1.isUnionType)(maybeUnionType)) {
105
105
  const typeNames = [];
106
106
  (0, mst_reflection_1.getUnionSubTypes)(maybeUnionType).forEach(type => {
@@ -169,7 +169,7 @@ class BaseFeatureDataAdapter extends BaseAdapter {
169
169
  }
170
170
  else {
171
171
  console.warn("Stats estimation reached timeout, or didn't get enough features");
172
- return { featureDensity: Infinity };
172
+ return { featureDensity: Number.POSITIVE_INFINITY };
173
173
  }
174
174
  };
175
175
  return statsFromInterval(1000, 0);
@@ -17,7 +17,7 @@ class CytobandAdapter extends BaseAdapter_1.BaseAdapter {
17
17
  if (loc.uri === '' || loc.uri === '/path/to/cytoband.txt.gz') {
18
18
  return [];
19
19
  }
20
- const buffer = (await (0, io_1.openLocation)(loc, pm).readFile());
20
+ const buffer = await (0, io_1.openLocation)(loc, pm).readFile();
21
21
  const buf = isGzip(buffer) ? await (0, bgzf_filehandle_1.unzip)(buffer) : buffer;
22
22
  const text = new TextDecoder('utf8', { fatal: true }).decode(buf);
23
23
  return text
@@ -1,7 +1,8 @@
1
1
  import { SnapshotIn } from 'mobx-state-tree';
2
2
  import PluginManager from '../PluginManager';
3
- import { AnyConfigurationSchemaType } from '../configuration/configurationSchema';
3
+ import { AnyConfigurationSchemaType } from '../configuration';
4
4
  import { AnyDataAdapter } from './BaseAdapter';
5
+ type ConfigSnap = SnapshotIn<AnyConfigurationSchemaType>;
5
6
  interface AdapterCacheEntry {
6
7
  dataAdapter: AnyDataAdapter;
7
8
  sessionIds: Set<string>;
@@ -21,7 +22,7 @@ export declare function getAdapter(pluginManager: PluginManager, sessionId: stri
21
22
  * allows them to get any sub-adapters that they need
22
23
  * internally, staying with the same worker session ID
23
24
  */
24
- export type getSubAdapterType = (adapterConfigSnapshot: SnapshotIn<AnyConfigurationSchemaType>) => ReturnType<typeof getAdapter>;
25
+ export type getSubAdapterType = (adapterConfigSnap: ConfigSnap) => ReturnType<typeof getAdapter>;
25
26
  export declare function freeAdapterResources(specification: Record<string, any>): number;
26
27
  export declare function clearAdapterCache(): void;
27
28
  export {};
@@ -39,7 +39,6 @@ async function getAdapter(pluginManager, sessionId, adapterConfigSnapshot) {
39
39
  // (such as sequence adapters or wrapped subadapters) that it needs
40
40
  //
41
41
  const { AdapterClass, getAdapterClass } = dataAdapterType;
42
- // @ts-ignore
43
42
  const CLASS = AdapterClass || (await getAdapterClass());
44
43
  if (!CLASS) {
45
44
  throw new Error('Failed to get adapter');
@@ -81,11 +80,11 @@ function freeAdapterResources(specification) {
81
80
  else {
82
81
  const regions = specification.regions ||
83
82
  (specification.region ? [specification.region] : []);
84
- regions.forEach((region) => {
83
+ for (const region of regions) {
85
84
  if (region.refName !== undefined) {
86
85
  cacheEntry.dataAdapter.freeResources(region);
87
86
  }
88
- });
87
+ }
89
88
  }
90
89
  });
91
90
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/core",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
4
4
  "description": "JBrowse 2 core libraries used by plugins",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -75,5 +75,5 @@
75
75
  "access": "public",
76
76
  "directory": "dist"
77
77
  },
78
- "gitHead": "78707a2bc3ba8489f26a590ef83f62ede945d048"
78
+ "gitHead": "747c50c4edc0184827efa4f8dfc576ca9a72caeb"
79
79
  }
@@ -55,7 +55,7 @@ class RpcMethodType extends PluggableElementBase_1.default {
55
55
  catch (error) {
56
56
  if ((0, types_1.isAuthNeededException)(error)) {
57
57
  const retryAccount =
58
- // @ts-ignore
58
+ // @ts-expect-error
59
59
  (_a = this.pluginManager.rootModel) === null || _a === void 0 ? void 0 : _a.createEphemeralInternetAccount(`HTTPBasicInternetAccount-${new URL(error.url).origin}`, {}, error.url);
60
60
  throw new types_1.RetryError('Retrying with created internet account', retryAccount.internetAccountId);
61
61
  }
@@ -11,6 +11,16 @@ import TextSearchAdapterType from './TextSearchAdapterType';
11
11
  import AddTrackWorkflowType from './AddTrackWorkflowType';
12
12
  export * from './renderers';
13
13
  export * from './models';
14
- export { AdapterType, ConnectionType, RendererType, WidgetType, TrackType, DisplayType, ViewType, RpcMethodType, InternetAccountType, TextSearchAdapterType, AddTrackWorkflowType, };
15
14
  export type PluggableElementType = AdapterType | ConnectionType | RendererType | WidgetType | TrackType | DisplayType | ViewType | RpcMethodType | InternetAccountType | TextSearchAdapterType | AddTrackWorkflowType;
16
15
  export type PluggableElementMember = keyof AdapterType | keyof ConnectionType | keyof RendererType | keyof WidgetType | keyof TrackType | keyof DisplayType | keyof ViewType | keyof RpcMethodType | keyof InternetAccountType | keyof TextSearchAdapterType | keyof AddTrackWorkflowType;
16
+ export { default as AdapterType } from './AdapterType';
17
+ export { default as RendererType } from './renderers/RendererType';
18
+ export { default as ConnectionType } from './ConnectionType';
19
+ export { default as TrackType } from './TrackType';
20
+ export { default as WidgetType } from './WidgetType';
21
+ export { default as ViewType } from './ViewType';
22
+ export { default as DisplayType } from './DisplayType';
23
+ export { default as InternetAccountType } from './InternetAccountType';
24
+ export { default as RpcMethodType } from './RpcMethodType';
25
+ export { default as AddTrackWorkflowType } from './AddTrackWorkflowType';
26
+ export { default as TextSearchAdapterType } from './TextSearchAdapterType';
@@ -17,28 +17,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.AddTrackWorkflowType = exports.TextSearchAdapterType = exports.InternetAccountType = exports.RpcMethodType = exports.ViewType = exports.DisplayType = exports.TrackType = exports.WidgetType = exports.RendererType = exports.ConnectionType = exports.AdapterType = void 0;
21
- const AdapterType_1 = __importDefault(require("./AdapterType"));
22
- exports.AdapterType = AdapterType_1.default;
23
- const ConnectionType_1 = __importDefault(require("./ConnectionType"));
24
- exports.ConnectionType = ConnectionType_1.default;
25
- const RendererType_1 = __importDefault(require("./renderers/RendererType"));
26
- exports.RendererType = RendererType_1.default;
27
- const WidgetType_1 = __importDefault(require("./WidgetType"));
28
- exports.WidgetType = WidgetType_1.default;
29
- const TrackType_1 = __importDefault(require("./TrackType"));
30
- exports.TrackType = TrackType_1.default;
31
- const DisplayType_1 = __importDefault(require("./DisplayType"));
32
- exports.DisplayType = DisplayType_1.default;
33
- const ViewType_1 = __importDefault(require("./ViewType"));
34
- exports.ViewType = ViewType_1.default;
35
- const RpcMethodType_1 = __importDefault(require("./RpcMethodType"));
36
- exports.RpcMethodType = RpcMethodType_1.default;
37
- const InternetAccountType_1 = __importDefault(require("./InternetAccountType"));
38
- exports.InternetAccountType = InternetAccountType_1.default;
39
- const TextSearchAdapterType_1 = __importDefault(require("./TextSearchAdapterType"));
40
- exports.TextSearchAdapterType = TextSearchAdapterType_1.default;
41
- const AddTrackWorkflowType_1 = __importDefault(require("./AddTrackWorkflowType"));
42
- exports.AddTrackWorkflowType = AddTrackWorkflowType_1.default;
20
+ exports.TextSearchAdapterType = exports.AddTrackWorkflowType = exports.RpcMethodType = exports.InternetAccountType = exports.DisplayType = exports.ViewType = exports.WidgetType = exports.TrackType = exports.ConnectionType = exports.RendererType = exports.AdapterType = void 0;
43
21
  __exportStar(require("./renderers"), exports);
44
22
  __exportStar(require("./models"), exports);
23
+ var AdapterType_1 = require("./AdapterType");
24
+ Object.defineProperty(exports, "AdapterType", { enumerable: true, get: function () { return __importDefault(AdapterType_1).default; } });
25
+ var RendererType_1 = require("./renderers/RendererType");
26
+ Object.defineProperty(exports, "RendererType", { enumerable: true, get: function () { return __importDefault(RendererType_1).default; } });
27
+ var ConnectionType_1 = require("./ConnectionType");
28
+ Object.defineProperty(exports, "ConnectionType", { enumerable: true, get: function () { return __importDefault(ConnectionType_1).default; } });
29
+ var TrackType_1 = require("./TrackType");
30
+ Object.defineProperty(exports, "TrackType", { enumerable: true, get: function () { return __importDefault(TrackType_1).default; } });
31
+ var WidgetType_1 = require("./WidgetType");
32
+ Object.defineProperty(exports, "WidgetType", { enumerable: true, get: function () { return __importDefault(WidgetType_1).default; } });
33
+ var ViewType_1 = require("./ViewType");
34
+ Object.defineProperty(exports, "ViewType", { enumerable: true, get: function () { return __importDefault(ViewType_1).default; } });
35
+ var DisplayType_1 = require("./DisplayType");
36
+ Object.defineProperty(exports, "DisplayType", { enumerable: true, get: function () { return __importDefault(DisplayType_1).default; } });
37
+ var InternetAccountType_1 = require("./InternetAccountType");
38
+ Object.defineProperty(exports, "InternetAccountType", { enumerable: true, get: function () { return __importDefault(InternetAccountType_1).default; } });
39
+ var RpcMethodType_1 = require("./RpcMethodType");
40
+ Object.defineProperty(exports, "RpcMethodType", { enumerable: true, get: function () { return __importDefault(RpcMethodType_1).default; } });
41
+ var AddTrackWorkflowType_1 = require("./AddTrackWorkflowType");
42
+ Object.defineProperty(exports, "AddTrackWorkflowType", { enumerable: true, get: function () { return __importDefault(AddTrackWorkflowType_1).default; } });
43
+ var TextSearchAdapterType_1 = require("./TextSearchAdapterType");
44
+ Object.defineProperty(exports, "TextSearchAdapterType", { enumerable: true, get: function () { return __importDefault(TextSearchAdapterType_1).default; } });
@@ -18,8 +18,8 @@ function stateModelFactory(pluginManager) {
18
18
  })
19
19
  .actions(self => ({
20
20
  afterAttach() {
21
- if (!self.tracks.length) {
22
- // @ts-ignore
21
+ if (self.tracks.length === 0) {
22
+ // @ts-expect-error
23
23
  self.connect(self.configuration);
24
24
  }
25
25
  },
@@ -12,9 +12,9 @@ function getCompatibleDisplays(self) {
12
12
  const { pluginManager } = (0, util_1.getEnv)(self);
13
13
  const view = (0, util_1.getContainingView)(self);
14
14
  const viewType = pluginManager.getViewType(view.type);
15
- const compatTypes = viewType.displayTypes.map(d => d.name);
15
+ const compatTypes = new Set(viewType.displayTypes.map(d => d.name));
16
16
  const displays = self.configuration.displays;
17
- return displays.filter(d => compatTypes.includes(d.type));
17
+ return displays.filter(d => compatTypes.has(d.type));
18
18
  }
19
19
  exports.getCompatibleDisplays = getCompatibleDisplays;
20
20
  /**
@@ -85,20 +85,17 @@ function createBaseTrackModel(pm, trackType, baseTrackConfig) {
85
85
  * #getter
86
86
  */
87
87
  get viewMenuActions() {
88
- return self.displays.map(d => d.viewMenuActions).flat();
88
+ return self.displays.flatMap(d => d.viewMenuActions);
89
89
  },
90
90
  /**
91
91
  * #getter
92
92
  */
93
93
  get canConfigure() {
94
94
  const session = (0, util_1.getSession)(self);
95
+ const { sessionTracks, adminMode } = session;
95
96
  return ((0, types_1.isSessionModelWithConfigEditing)(session) &&
96
- // @ts-ignore
97
- (session.adminMode ||
98
- // @ts-ignore
99
- session.sessionTracks.find(track => {
100
- return track.trackId === self.configuration.trackId;
101
- })));
97
+ (adminMode ||
98
+ sessionTracks.find((track) => track.trackId === self.configuration.trackId)));
102
99
  },
103
100
  }))
104
101
  .actions(self => ({
@@ -115,7 +112,7 @@ function createBaseTrackModel(pm, trackType, baseTrackConfig) {
115
112
  const session = (0, util_1.getSession)(self);
116
113
  const view = (0, util_1.getContainingView)(self);
117
114
  if ((0, types_1.isSessionModelWithConfigEditing)(session)) {
118
- // @ts-ignore
115
+ // @ts-expect-error
119
116
  const trackConf = session.editTrackConfiguration(self.configuration);
120
117
  if (trackConf && trackConf !== self.configuration) {
121
118
  view.hideTrack(self.configuration);
@@ -176,9 +173,7 @@ function createBaseTrackModel(pm, trackType, baseTrackConfig) {
176
173
  * #method
177
174
  */
178
175
  trackMenuItems() {
179
- const menuItems = self.displays
180
- .map(d => d.trackMenuItems())
181
- .flat();
176
+ const menuItems = self.displays.flatMap(d => d.trackMenuItems());
182
177
  const shownId = self.displays[0].configuration.displayId;
183
178
  const compatDisp = getCompatibleDisplays(self);
184
179
  return [
@@ -1,5 +1,5 @@
1
1
  import { Feature } from '../../util/simpleFeature';
2
- import ServerSideRenderer, { RenderArgs as ServerSideRenderArgs, RenderArgsSerialized as ServerSideRenderArgsSerialized, RenderArgsDeserialized as ServerSideRenderArgsDeserialized, RenderResults, ResultsSerialized as ServerSideResultsSerialized, ResultsDeserialized as ServerSideResultsDeserialized } from './ServerSideRendererType';
2
+ import ServerSideRenderer, { RenderArgs as ServerSideRenderArgs, RenderArgsSerialized as ServerSideRenderArgsSerialized, RenderArgsDeserialized as ServerSideRenderArgsDeserialized, ResultsSerialized as ServerSideResultsSerialized, ResultsDeserialized as ServerSideResultsDeserialized } from './ServerSideRendererType';
3
3
  import RpcManager from '../../rpc/RpcManager';
4
4
  export interface RenderArgs extends ServerSideRenderArgs {
5
5
  displayModel: {};
@@ -13,7 +13,6 @@ export interface RenderArgsDeserialized extends ServerSideRenderArgsDeserialized
13
13
  displayModel: {};
14
14
  blockKey: string;
15
15
  }
16
- export type { RenderResults };
17
16
  export type ResultsSerialized = ServerSideResultsSerialized;
18
17
  export interface ResultsDeserialized extends ServerSideResultsDeserialized {
19
18
  blockKey: string;
@@ -54,3 +53,4 @@ export default class ComparativeServerSideRenderer extends ServerSideRenderer {
54
53
  featurePassesFilters(renderArgs: RenderArgsDeserialized, feature: Feature): boolean;
55
54
  getFeatures(renderArgs: any): Promise<Feature[]>;
56
55
  }
56
+ export { type RenderResults } from './ServerSideRendererType';