@jbrowse/core 2.3.4 → 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 (116) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +18 -19
  2. package/BaseFeatureWidget/BaseFeatureDetail.js +76 -69
  3. package/BaseFeatureWidget/SequenceBox.js +9 -3
  4. package/BaseFeatureWidget/SequenceFeatureDetails.js +70 -52
  5. package/BaseFeatureWidget/SequencePanel.d.ts +3 -3
  6. package/BaseFeatureWidget/SequencePanel.js +8 -5
  7. package/BaseFeatureWidget/index.js +2 -2
  8. package/CorePlugin.js +2 -7
  9. package/PluginLoader.d.ts +1 -1
  10. package/PluginLoader.js +20 -24
  11. package/PluginManager.d.ts +1 -1
  12. package/PluginManager.js +2 -3
  13. package/ReExports/Attributes.d.ts +1 -2
  14. package/ReExports/Attributes.js +4 -3
  15. package/ReExports/BaseCard.d.ts +1 -2
  16. package/ReExports/BaseCard.js +4 -3
  17. package/ReExports/DataGrid.d.ts +1 -2
  18. package/ReExports/DataGrid.js +2 -2
  19. package/ReExports/FeatureDetails.d.ts +1 -2
  20. package/ReExports/FeatureDetails.js +4 -3
  21. package/ReExports/index.d.ts +1 -2
  22. package/ReExports/index.js +3 -2
  23. package/ReExports/modules.d.ts +1 -1
  24. package/ReExports/modules.js +2 -2
  25. package/assemblyManager/assembly.js +5 -5
  26. package/assemblyManager/assemblyConfigSchema.js +2 -2
  27. package/configuration/configurationSchema.js +1 -1
  28. package/configuration/util.js +1 -1
  29. package/data_adapters/BaseAdapter.js +1 -1
  30. package/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +8 -0
  31. package/data_adapters/CytobandAdapter/CytobandAdapter.js +40 -0
  32. package/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
  33. package/data_adapters/CytobandAdapter/configSchema.js +17 -0
  34. package/data_adapters/CytobandAdapter/index.d.ts +3 -0
  35. package/data_adapters/CytobandAdapter/index.js +37 -0
  36. package/data_adapters/dataAdapterCache.d.ts +3 -2
  37. package/data_adapters/dataAdapterCache.js +2 -3
  38. package/package.json +5 -4
  39. package/pluggableElementTypes/PluggableElementBase.d.ts +1 -1
  40. package/pluggableElementTypes/PluggableElementBase.js +1 -2
  41. package/pluggableElementTypes/RpcMethodType.d.ts +5 -8
  42. package/pluggableElementTypes/RpcMethodType.js +23 -34
  43. package/pluggableElementTypes/index.d.ts +11 -1
  44. package/pluggableElementTypes/index.js +23 -23
  45. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -2
  46. package/pluggableElementTypes/models/BaseTrackModel.js +8 -13
  47. package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +13 -2
  48. package/pluggableElementTypes/renderers/CircularChordRendererType.js +10 -2
  49. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +8 -2
  50. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +10 -4
  51. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
  52. package/pluggableElementTypes/renderers/ServerSideRendererType.js +2 -34
  53. package/pluggableElementTypes/renderers/index.d.ts +7 -9
  54. package/pluggableElementTypes/renderers/index.js +15 -15
  55. package/pluggableElementTypes/renderers/util/serializableFilterChain.js +1 -1
  56. package/rpc/BaseRpcDriver.js +7 -8
  57. package/rpc/WebWorkerRpcDriver.js +18 -12
  58. package/rpc/coreRpcMethods.d.ts +9 -11
  59. package/rpc/coreRpcMethods.js +17 -17
  60. package/rpc/methods/CoreGetFeatureDetails.js +1 -1
  61. package/rpc/methods/util.d.ts +2 -2
  62. package/rpc/methods/util.js +2 -2
  63. package/rpc/remoteAbortSignals.js +0 -1
  64. package/tsconfig.build.tsbuildinfo +1 -1
  65. package/ui/App.js +3 -18
  66. package/ui/AppLogo.js +1 -6
  67. package/ui/ColorPicker.js +1 -1
  68. package/ui/Dialog.js +1 -1
  69. package/ui/DrawerWidget.js +4 -4
  70. package/ui/EditableTypography.js +1 -1
  71. package/ui/FileSelector/FileSelector.d.ts +2 -2
  72. package/ui/FileSelector/FileSelector.js +24 -35
  73. package/ui/FileSelector/index.d.ts +1 -2
  74. package/ui/FileSelector/index.js +3 -2
  75. package/ui/LoadingEllipses.js +2 -2
  76. package/ui/Menu.js +45 -32
  77. package/ui/ResizeBar.js +10 -6
  78. package/ui/ResizeHandle.js +3 -6
  79. package/ui/SanitizedHTML.js +2 -0
  80. package/ui/ViewContainer.js +7 -44
  81. package/ui/ViewMenu.d.ts +9 -0
  82. package/ui/ViewMenu.js +69 -0
  83. package/ui/ViewPanel.d.ts +19 -0
  84. package/ui/ViewPanel.js +49 -0
  85. package/ui/theme.d.ts +10 -166
  86. package/ui/theme.js +260 -48
  87. package/util/Base1DUtils.js +16 -14
  88. package/util/Base1DViewModel.d.ts +1 -1
  89. package/util/Base1DViewModel.js +9 -8
  90. package/util/aborting.js +1 -1
  91. package/util/analytics.js +1 -1
  92. package/util/blockTypes.js +10 -10
  93. package/util/color/index.d.ts +1 -2
  94. package/util/color/index.js +4 -3
  95. package/util/idMaker.js +5 -8
  96. package/util/index.d.ts +9 -9
  97. package/util/index.js +35 -52
  98. package/util/io/RemoteFileWithRangeCache.js +2 -2
  99. package/util/io/index.d.ts +1 -2
  100. package/util/io/index.js +6 -6
  101. package/util/jexl.js +3 -1
  102. package/util/layouts/GranularRectLayout.js +10 -4
  103. package/util/layouts/MultiLayout.js +1 -1
  104. package/util/layouts/SceneGraph.js +3 -7
  105. package/util/map-obj.d.ts +3 -0
  106. package/util/map-obj.js +33 -0
  107. package/util/offscreenCanvasPonyfill.js +4 -3
  108. package/util/offscreenCanvasUtils.d.ts +18 -4
  109. package/util/offscreenCanvasUtils.js +49 -7
  110. package/util/tracks.d.ts +1 -1
  111. package/util/tracks.js +0 -1
  112. package/util/types/index.d.ts +1 -1
  113. package/util/types/index.js +3 -3
  114. package/util/types/mst.js +3 -3
  115. package/data_adapters/CytobandAdapter.d.ts +0 -8
  116. package/data_adapters/CytobandAdapter.js +0 -49
@@ -70,7 +70,7 @@ function pxToBp(self, px) {
70
70
  if (bp < 0) {
71
71
  const r = displayedRegions[0];
72
72
  const snap = (0, mobx_state_tree_1.getSnapshot)(r);
73
- // @ts-ignore
73
+ // @ts-expect-error
74
74
  return {
75
75
  // xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
76
76
  ...snap,
@@ -88,7 +88,7 @@ function pxToBp(self, px) {
88
88
  const offset = bp - bpSoFar;
89
89
  if (len + bpSoFar > bp && bpSoFar <= bp) {
90
90
  const snap = (0, mobx_state_tree_1.getSnapshot)(r);
91
- // @ts-ignore
91
+ // @ts-expect-error
92
92
  return {
93
93
  // xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
94
94
  ...snap,
@@ -108,12 +108,12 @@ function pxToBp(self, px) {
108
108
  bpSoFar += len;
109
109
  }
110
110
  }
111
- if (bp >= bpSoFar && displayedRegions.length) {
111
+ if (bp >= bpSoFar && displayedRegions.length > 0) {
112
112
  const r = displayedRegions[displayedRegions.length - 1];
113
113
  const len = r.end - r.start;
114
114
  const offset = bp - bpSoFar + len;
115
115
  const snap = (0, mobx_state_tree_1.getSnapshot)(r);
116
- // @ts-ignore
116
+ // @ts-expect-error
117
117
  return {
118
118
  // xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
119
119
  ...snap,
@@ -147,11 +147,12 @@ function bpToPx({ refName, coord, regionNumber, self, }) {
147
147
  for (; i < displayedRegions.length; i++) {
148
148
  const r = displayedRegions[i];
149
149
  const len = r.end - r.start;
150
- if (refName === r.refName && coord >= r.start && coord <= r.end) {
151
- if (regionNumber ? regionNumber === i : true) {
152
- bpSoFar += r.reversed ? r.end - coord : coord - r.start;
153
- break;
154
- }
150
+ if (refName === r.refName &&
151
+ coord >= r.start &&
152
+ coord <= r.end &&
153
+ (regionNumber ? regionNumber === i : true)) {
154
+ bpSoFar += r.reversed ? r.end - coord : coord - r.start;
155
+ break;
155
156
  }
156
157
  // add the interRegionPaddingWidth if the boundary is in the screen e.g. in
157
158
  // a static block
@@ -185,11 +186,12 @@ function bpToPxMap({ refName, coord, regionNumber, self, }) {
185
186
  for (; i < displayedRegions.length; i++) {
186
187
  const r = displayedRegions[i];
187
188
  const len = r.end - r.start;
188
- if (refName === r.refName && coord >= r.start && coord <= r.end) {
189
- if (regionNumber !== undefined ? regionNumber === i : true) {
190
- bpSoFar += r.reversed ? r.end - coord : coord - r.start;
191
- break;
192
- }
189
+ if (refName === r.refName &&
190
+ coord >= r.start &&
191
+ coord <= r.end &&
192
+ (regionNumber === undefined ? true : regionNumber === i)) {
193
+ bpSoFar += r.reversed ? r.end - coord : coord - r.start;
194
+ break;
193
195
  }
194
196
  // add the interRegionPaddingWidth if the boundary is in the screen e.g. in
195
197
  // a static block
@@ -119,7 +119,7 @@ declare const Base1DView: import("mobx-state-tree").IModelType<{
119
119
  /**
120
120
  * #action
121
121
  */
122
- zoomTo(newBpPerPx: number, offset?: number): number;
122
+ zoomTo(bpPerPx: number, offset?: number): number;
123
123
  /**
124
124
  * #action
125
125
  */
@@ -180,15 +180,16 @@ const Base1DView = mobx_state_tree_1.types
180
180
  /**
181
181
  * #action
182
182
  */
183
- zoomTo(newBpPerPx, offset = self.width / 2) {
184
- const bpPerPx = newBpPerPx;
185
- if (bpPerPx === self.bpPerPx) {
186
- return self.bpPerPx;
187
- }
183
+ zoomTo(bpPerPx, offset = self.width / 2) {
184
+ const newBpPerPx = (0, index_1.clamp)(bpPerPx, 'minBpPerPx' in self ? self.minBpPerPx : 0, 'maxBpPerPx' in self ? self.maxBpPerPx : Infinity);
188
185
  const oldBpPerPx = self.bpPerPx;
189
- self.bpPerPx = bpPerPx;
190
- // tweak the offset so that the center of the view remains at the same coordinate
191
- self.offsetPx = (0, index_1.clamp)(Math.round(((self.offsetPx + offset) * oldBpPerPx) / bpPerPx - offset), self.minOffset, self.maxOffset);
186
+ if (Math.abs(oldBpPerPx - newBpPerPx) < 0.000001) {
187
+ return oldBpPerPx;
188
+ }
189
+ self.bpPerPx = newBpPerPx;
190
+ // tweak the offset so that the center of the view remains at the same
191
+ // coordinate
192
+ self.offsetPx = (0, index_1.clamp)(Math.round(((self.offsetPx + offset) * oldBpPerPx) / newBpPerPx - offset), self.minOffset, self.maxOffset);
192
193
  return self.bpPerPx;
193
194
  },
194
195
  /**
package/util/aborting.js CHANGED
@@ -75,6 +75,6 @@ function isAbortException(exception) {
75
75
  // Error: aborted
76
76
  // AbortError: aborted
77
77
  // AbortError: The user aborted a request.
78
- !!exception.message.match(/\b(aborted|AbortError)\b/i)));
78
+ !!/\b(aborted|aborterror)\b/i.test(exception.message)));
79
79
  }
80
80
  exports.isAbortException = isAbortException;
package/util/analytics.js CHANGED
@@ -83,7 +83,7 @@ async function writeGAAnalytics(rootModel, initialTimestamp) {
83
83
  analyticsScript += `ga('jbrowseTracker.send', 'pageview',${JSON.stringify(gaData)});`;
84
84
  const analyticsScriptNode = document.createElement('script');
85
85
  analyticsScriptNode.innerHTML = analyticsScript;
86
- document.getElementsByTagName('head')[0].appendChild(analyticsScriptNode);
86
+ document.getElementsByTagName('head')[0].append(analyticsScriptNode);
87
87
  }
88
88
  exports.writeGAAnalytics = writeGAAnalytics;
89
89
  function doAnalytics(rootModel, initialTimestamp, initialSessionQuery) {
@@ -6,13 +6,11 @@ class BlockSet {
6
6
  this.blocks = blocks;
7
7
  }
8
8
  push(block) {
9
- if (block instanceof ElidedBlock) {
10
- if (this.blocks.length) {
11
- const lastBlock = this.blocks[this.blocks.length - 1];
12
- if (lastBlock instanceof ElidedBlock) {
13
- lastBlock.push(block);
14
- return;
15
- }
9
+ if (block instanceof ElidedBlock && this.blocks.length > 0) {
10
+ const lastBlock = this.blocks[this.blocks.length - 1];
11
+ if (lastBlock instanceof ElidedBlock) {
12
+ lastBlock.push(block);
13
+ return;
16
14
  }
17
15
  }
18
16
  this.blocks.push(block);
@@ -24,21 +22,23 @@ class BlockSet {
24
22
  return this.blocks.map(block => block.toRegion());
25
23
  }
26
24
  map(func, thisarg) {
25
+ // eslint-disable-next-line unicorn/no-array-method-this-argument
27
26
  return this.blocks.map(func, thisarg);
28
27
  }
29
28
  forEach(func, thisarg) {
29
+ // eslint-disable-next-line unicorn/no-array-method-this-argument
30
30
  return this.blocks.forEach(func, thisarg);
31
31
  }
32
32
  get length() {
33
33
  return this.blocks.length;
34
34
  }
35
35
  get totalWidthPx() {
36
- return this.blocks.length
36
+ return this.blocks.length > 0
37
37
  ? this.blocks.map(blocks => blocks.widthPx).reduce((a, b) => a + b)
38
38
  : 0;
39
39
  }
40
40
  get totalWidthPxWithoutBorders() {
41
- return this.blocks.length
41
+ return this.blocks.length > 0
42
42
  ? this.blocks
43
43
  .filter(block => block.variant !== 'boundary')
44
44
  .map(blocks => blocks.widthPx)
@@ -46,7 +46,7 @@ class BlockSet {
46
46
  : 0;
47
47
  }
48
48
  get offsetPx() {
49
- return this.blocks.length ? this.blocks[0].offsetPx : 0;
49
+ return this.blocks.length > 0 ? this.blocks[0].offsetPx : 0;
50
50
  }
51
51
  get contentBlocks() {
52
52
  return this.blocks.filter(block => block instanceof ContentBlock);
@@ -1,5 +1,3 @@
1
- import { namedColorToHex, isNamedColor } from './cssColorsLevel4';
2
- export { namedColorToHex, isNamedColor };
3
1
  /**
4
2
  * Algorithmically pick a contrasting text color that will
5
3
  * be visible on top of the given background color. Either
@@ -22,3 +20,4 @@ export declare function contrastingTextColor(color: string): string;
22
20
  */
23
21
  export declare function emphasize(color: string, coefficient?: number): string;
24
22
  export declare function makeContrasting(foreground: string, background?: string, minContrastRatio?: number): string;
23
+ export { isNamedColor, namedColorToHex } from './cssColorsLevel4';
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeContrasting = exports.emphasize = exports.contrastingTextColor = exports.isNamedColor = exports.namedColorToHex = void 0;
3
+ exports.namedColorToHex = exports.isNamedColor = exports.makeContrasting = exports.emphasize = exports.contrastingTextColor = void 0;
4
4
  const styles_1 = require("@mui/material/styles");
5
5
  const cssColorsLevel4_1 = require("./cssColorsLevel4");
6
- Object.defineProperty(exports, "namedColorToHex", { enumerable: true, get: function () { return cssColorsLevel4_1.namedColorToHex; } });
7
- Object.defineProperty(exports, "isNamedColor", { enumerable: true, get: function () { return cssColorsLevel4_1.isNamedColor; } });
8
6
  /**
9
7
  * Algorithmically pick a contrasting text color that will
10
8
  * be visible on top of the given background color. Either
@@ -67,3 +65,6 @@ function makeContrasting(foreground, background = 'white', minContrastRatio = 3)
67
65
  return convertedForeground;
68
66
  }
69
67
  exports.makeContrasting = makeContrasting;
68
+ var cssColorsLevel4_2 = require("./cssColorsLevel4");
69
+ Object.defineProperty(exports, "isNamedColor", { enumerable: true, get: function () { return cssColorsLevel4_2.isNamedColor; } });
70
+ Object.defineProperty(exports, "namedColorToHex", { enumerable: true, get: function () { return cssColorsLevel4_2.namedColorToHex; } });
package/util/idMaker.js CHANGED
@@ -7,17 +7,14 @@ const _1 = require("./");
7
7
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
8
  function idMaker(args, id = '') {
9
9
  const keys = Object.keys(args);
10
- for (let i = 0; i < keys.length; i++) {
11
- const key = keys[i];
10
+ for (const key of keys) {
12
11
  if (id.length > 5000) {
13
12
  break;
14
13
  }
15
- if (typeof args[key] === 'object' && args[key]) {
16
- id += idMaker(args[key], id);
17
- }
18
- else {
19
- id += `${key}-${args[key]};`;
20
- }
14
+ id +=
15
+ typeof args[key] === 'object' && args[key]
16
+ ? idMaker(args[key], id)
17
+ : `${key}-${args[key]};`;
21
18
  }
22
19
  return (0, _1.hashCode)(id);
23
20
  }
package/util/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import PluginManager from '../PluginManager';
2
2
  import { IAnyStateTreeNode, IStateTreeNode } from 'mobx-state-tree';
3
3
  import { IReactionPublic, IReactionOptions } from 'mobx';
4
- import SimpleFeature, { Feature, SimpleFeatureSerialized, isFeature } from './simpleFeature';
4
+ import { Feature } from './simpleFeature';
5
5
  import { AssemblyManager, Region, TypeTestedByPredicate } from './types';
6
6
  import { BaseBlock } from './blockTypes';
7
7
  export * from './types';
@@ -9,8 +9,6 @@ export * from './aborting';
9
9
  export * from './when';
10
10
  export * from './range';
11
11
  export * from './dedupe';
12
- export { SimpleFeature, isFeature };
13
- export type { Feature, SimpleFeatureSerialized };
14
12
  export * from './offscreenCanvasPonyfill';
15
13
  export * from './offscreenCanvasUtils';
16
14
  export declare const inDevelopment: boolean;
@@ -286,7 +284,7 @@ export declare const defaultCodonTable: {
286
284
  export declare function generateCodonTable(table: any): {
287
285
  [key: string]: string;
288
286
  };
289
- export declare function updateStatus<U>(msg: string, cb: (arg: string) => void, fn: () => U): Promise<U>;
287
+ export declare function updateStatus<U>(msg: string, cb: (arg: string) => void, fn: () => U | Promise<U>): Promise<U>;
290
288
  export declare function hashCode(str: string): number;
291
289
  export declare function objectHash(obj: Record<string, any>): string;
292
290
  interface VirtualOffset {
@@ -324,8 +322,8 @@ export declare function getTickDisplayStr(totalBp: number, bpPerPx: number): str
324
322
  export declare function getViewParams(model: IAnyStateTreeNode, exportSVG?: boolean): {
325
323
  offsetPx: number;
326
324
  offsetPx1: number;
327
- start: any;
328
- end: any;
325
+ start: number;
326
+ end: number;
329
327
  };
330
328
  export declare function getLayoutId({ sessionId, layoutId, }: {
331
329
  sessionId: string;
@@ -337,7 +335,7 @@ export declare function getUriLink(value: {
337
335
  baseUri?: string;
338
336
  }): string;
339
337
  export declare function getStr(obj: unknown): string;
340
- export declare function measureGridWidth(elements: string[], args?: {
338
+ export declare function measureGridWidth(elements: unknown[], args?: {
341
339
  minWidth?: number;
342
340
  fontSize?: number;
343
341
  maxWidth?: number;
@@ -348,7 +346,9 @@ export declare function getEnv(obj: any): {
348
346
  pluginManager: PluginManager;
349
347
  };
350
348
  export declare function localStorageGetItem(item: string): string | null | undefined;
351
- export declare function max(arr: number[]): number;
352
- export declare function min(arr: number[]): number;
349
+ export declare function localStorageSetItem(str: string, item: string): void;
350
+ export declare function max(arr: number[], init?: number): number;
351
+ export declare function min(arr: number[], init?: number): number;
353
352
  export declare function sum(arr: number[]): number;
354
353
  export declare function avg(arr: number[]): number;
354
+ export { default as SimpleFeature, type Feature, type SimpleFeatureSerialized, isFeature, } from './simpleFeature';
package/util/index.js CHANGED
@@ -10,18 +10,6 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
13
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
15
  };
@@ -29,16 +17,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
29
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
30
18
  };
31
19
  Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.bytesForRegions = exports.objectHash = exports.hashCode = exports.updateStatus = exports.generateCodonTable = exports.defaultCodonTable = exports.defaultStops = exports.defaultStarts = exports.measureText = exports.rIC = exports.blobToDataURL = exports.complement = exports.reverse = exports.revcom = exports.isElectron = exports.stringify = exports.shorten = exports.minmax = exports.renameRegionsIfNeeded = exports.renameRegionIfNeeded = exports.makeAbortableReaction = exports.findLastIndex = exports.iterMap = exports.bpSpanPx = exports.featureSpanPx = exports.cartesianToPolar = exports.polarToCartesian = exports.degToRad = exports.radToDeg = exports.bpToPx = exports.clamp = exports.compareLocStrings = exports.compareLocs = exports.parseLocString = exports.parseLocStringOneBased = exports.assembleLocStringFast = exports.assembleLocString = exports.getContainingDisplay = exports.getContainingTrack = exports.getContainingView = exports.getSession = exports.findParentThatIs = exports.springAnimate = exports.findParentThat = exports.useDebouncedCallback = exports.useDebounce = exports.inProduction = exports.inDevelopment = exports.isFeature = exports.SimpleFeature = void 0;
33
- exports.avg = exports.sum = exports.min = exports.max = exports.localStorageGetItem = exports.getEnv = exports.measureGridWidth = exports.getStr = exports.getUriLink = exports.useLocalStorage = exports.getLayoutId = exports.getViewParams = exports.getTickDisplayStr = exports.toLocale = exports.getBpDisplayStr = exports.supportedIndexingAdapters = void 0;
20
+ exports.getBpDisplayStr = exports.supportedIndexingAdapters = exports.bytesForRegions = exports.objectHash = exports.hashCode = exports.updateStatus = exports.generateCodonTable = exports.defaultCodonTable = exports.defaultStops = exports.defaultStarts = exports.measureText = exports.rIC = exports.blobToDataURL = exports.complement = exports.reverse = exports.revcom = exports.isElectron = exports.stringify = exports.shorten = exports.minmax = exports.renameRegionsIfNeeded = exports.renameRegionIfNeeded = exports.makeAbortableReaction = exports.findLastIndex = exports.iterMap = exports.bpSpanPx = exports.featureSpanPx = exports.cartesianToPolar = exports.polarToCartesian = exports.degToRad = exports.radToDeg = exports.bpToPx = exports.clamp = exports.compareLocStrings = exports.compareLocs = exports.parseLocString = exports.parseLocStringOneBased = exports.assembleLocStringFast = exports.assembleLocString = exports.getContainingDisplay = exports.getContainingTrack = exports.getContainingView = exports.getSession = exports.findParentThatIs = exports.springAnimate = exports.findParentThat = exports.useDebouncedCallback = exports.useDebounce = exports.inProduction = exports.inDevelopment = void 0;
21
+ exports.isFeature = exports.SimpleFeature = exports.avg = exports.sum = exports.min = exports.max = exports.localStorageSetItem = exports.localStorageGetItem = exports.getEnv = exports.measureGridWidth = exports.getStr = exports.getUriLink = exports.useLocalStorage = exports.getLayoutId = exports.getViewParams = exports.getTickDisplayStr = exports.toLocale = void 0;
34
22
  /* eslint-disable @typescript-eslint/no-explicit-any */
35
23
  const react_1 = require("react");
36
24
  const is_object_1 = __importDefault(require("is-object"));
37
25
  const mobx_state_tree_1 = require("mobx-state-tree");
38
26
  const mobx_1 = require("mobx");
39
- const simpleFeature_1 = __importStar(require("./simpleFeature"));
40
- exports.SimpleFeature = simpleFeature_1.default;
41
- Object.defineProperty(exports, "isFeature", { enumerable: true, get: function () { return simpleFeature_1.isFeature; } });
42
27
  const types_1 = require("./types");
43
28
  const aborting_1 = require("./aborting");
44
29
  const types_2 = require("./types");
@@ -278,12 +263,12 @@ function parseLocStringOneBased(locString, isValidRefName) {
278
263
  let reversed = false;
279
264
  if (locString.endsWith('[rev]')) {
280
265
  reversed = true;
281
- locString = locString.replace(/\[rev\]$/, '');
266
+ locString = locString.replace(/\[rev]$/, '');
282
267
  }
283
268
  // remove any whitespace
284
269
  locString = locString.replace(/\s/, '');
285
270
  // refNames can have colons, ref https://samtools.github.io/hts-specs/SAMv1.pdf Appendix A
286
- const assemblyMatch = locString.match(/(\{(.+)\})?(.+)/);
271
+ const assemblyMatch = locString.match(/({(.+)})?(.+)/);
287
272
  if (!assemblyMatch) {
288
273
  throw new Error(`invalid location string: "${locString}"`);
289
274
  }
@@ -465,8 +450,8 @@ function bpToPx(bp, { reversed, end = 0, start = 0, }, bpPerPx) {
465
450
  return roundToNearestPointOne((reversed ? end - bp : bp - start) / bpPerPx);
466
451
  }
467
452
  exports.bpToPx = bpToPx;
468
- const oneEightyOverPi = 180.0 / Math.PI;
469
- const piOverOneEighty = Math.PI / 180.0;
453
+ const oneEightyOverPi = 180 / Math.PI;
454
+ const piOverOneEighty = Math.PI / 180;
470
455
  function radToDeg(radians) {
471
456
  return (radians * oneEightyOverPi) % 360;
472
457
  }
@@ -505,7 +490,7 @@ function bpSpanPx(leftBp, rightBp, region, bpPerPx) {
505
490
  exports.bpSpanPx = bpSpanPx;
506
491
  // do an array map of an iterable
507
492
  function iterMap(iter, func, sizeHint) {
508
- const results = sizeHint ? new Array(sizeHint) : [];
493
+ const results = Array.from({ length: sizeHint || 0 });
509
494
  let counter = 0;
510
495
  for (const item of iter) {
511
496
  results[counter] = func(item);
@@ -552,7 +537,7 @@ exports.findLastIndex = findLastIndex;
552
537
  * @param errorFunction -
553
538
  */
554
539
  function makeAbortableReaction(self, dataFunction, asyncReactionFunction,
555
- // @ts-ignore
540
+ // @ts-expect-error
556
541
  reactionOptions, startedFunction, successFunction, errorFunction) {
557
542
  let inProgress;
558
543
  function handleError(error) {
@@ -585,7 +570,7 @@ reactionOptions, startedFunction, successFunction, errorFunction) {
585
570
  startedFunction(thisInProgress);
586
571
  try {
587
572
  const result = await asyncReactionFunction(data, thisInProgress.signal, self,
588
- // @ts-ignore
573
+ // @ts-expect-error
589
574
  mobxReactionHandle);
590
575
  (0, aborting_1.checkAbortSignal)(thisInProgress.signal);
591
576
  if ((0, mobx_state_tree_1.isAlive)(self)) {
@@ -610,15 +595,12 @@ function renameRegionIfNeeded(refNameMap, region) {
610
595
  if ((0, mobx_state_tree_1.isStateTreeNode)(region) && !(0, mobx_state_tree_1.isAlive)(region)) {
611
596
  return region;
612
597
  }
613
- if (region && refNameMap && refNameMap[region.refName]) {
598
+ if (region && (refNameMap === null || refNameMap === void 0 ? void 0 : refNameMap[region.refName])) {
614
599
  // clone the region so we don't modify it
615
- if ((0, mobx_state_tree_1.isStateTreeNode)(region)) {
616
- // @ts-ignore
617
- region = { ...(0, mobx_state_tree_1.getSnapshot)(region) };
618
- }
619
- else {
620
- region = { ...region };
621
- }
600
+ region = (0, mobx_state_tree_1.isStateTreeNode)(region)
601
+ ? // @ts-expect-error
602
+ { ...(0, mobx_state_tree_1.getSnapshot)(region) }
603
+ : { ...region };
622
604
  // modify it directly in the container
623
605
  const newRef = refNameMap[region.refName];
624
606
  if (newRef) {
@@ -741,11 +723,9 @@ exports.blobToDataURL = blobToDataURL;
741
723
  // otherwise listens for prerendered_canvas but reads empty pixels, and doesn't
742
724
  // get the contents of the canvas
743
725
  exports.rIC = typeof jest === 'undefined'
744
- ? // @ts-ignore
745
- typeof window !== 'undefined' && window.requestIdleCallback
746
- ? // @ts-ignore
747
- window.requestIdleCallback
748
- : (cb) => setTimeout(() => cb(), 1)
726
+ ? typeof window !== 'undefined' && window.requestIdleCallback
727
+ ? window.requestIdleCallback
728
+ : (cb) => setTimeout(() => cb(), 1)
749
729
  : (cb) => cb();
750
730
  // prettier-ignore
751
731
  const widths = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2796875, 0.2765625, 0.3546875, 0.5546875, 0.5546875, 0.8890625, 0.665625, 0.190625, 0.3328125, 0.3328125, 0.3890625, 0.5828125, 0.2765625, 0.3328125, 0.2765625, 0.3015625, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.2765625, 0.2765625, 0.584375, 0.5828125, 0.584375, 0.5546875, 1.0140625, 0.665625, 0.665625, 0.721875, 0.721875, 0.665625, 0.609375, 0.7765625, 0.721875, 0.2765625, 0.5, 0.665625, 0.5546875, 0.8328125, 0.721875, 0.7765625, 0.665625, 0.7765625, 0.721875, 0.665625, 0.609375, 0.721875, 0.665625, 0.94375, 0.665625, 0.665625, 0.609375, 0.2765625, 0.3546875, 0.2765625, 0.4765625, 0.5546875, 0.3328125, 0.5546875, 0.5546875, 0.5, 0.5546875, 0.5546875, 0.2765625, 0.5546875, 0.5546875, 0.221875, 0.240625, 0.5, 0.221875, 0.8328125, 0.5546875, 0.5546875, 0.5546875, 0.5546875, 0.3328125, 0.5, 0.2765625, 0.5546875, 0.5, 0.721875, 0.5, 0.5, 0.5, 0.3546875, 0.259375, 0.353125, 0.5890625];
@@ -910,10 +890,10 @@ exports.supportedIndexingAdapters = supportedIndexingAdapters;
910
890
  function getBpDisplayStr(totalBp) {
911
891
  let str;
912
892
  if (Math.floor(totalBp / 1000000) > 0) {
913
- str = `${parseFloat((totalBp / 1000000).toPrecision(3))}Mbp`;
893
+ str = `${Number.parseFloat((totalBp / 1000000).toPrecision(3))}Mbp`;
914
894
  }
915
895
  else if (Math.floor(totalBp / 1000) > 0) {
916
- str = `${parseFloat((totalBp / 1000).toPrecision(3))}Kbp`;
896
+ str = `${Number.parseFloat((totalBp / 1000).toPrecision(3))}Kbp`;
917
897
  }
918
898
  else {
919
899
  str = `${toLocale(Math.floor(totalBp))}bp`;
@@ -926,18 +906,12 @@ function toLocale(n) {
926
906
  }
927
907
  exports.toLocale = toLocale;
928
908
  function getTickDisplayStr(totalBp, bpPerPx) {
929
- let str;
930
- if (Math.floor(bpPerPx / 1000) > 0) {
931
- str = `${toLocale(parseFloat((totalBp / 1000000).toFixed(2)))}M`;
932
- }
933
- else {
934
- str = `${toLocale(Math.floor(totalBp))}`;
935
- }
936
- return str;
909
+ return Math.floor(bpPerPx / 1000) > 0
910
+ ? `${toLocale(Number.parseFloat((totalBp / 1000000).toFixed(2)))}M`
911
+ : `${toLocale(Math.floor(totalBp))}`;
937
912
  }
938
913
  exports.getTickDisplayStr = getTickDisplayStr;
939
914
  function getViewParams(model, exportSVG) {
940
- // @ts-ignore
941
915
  const { dynamicBlocks, staticBlocks, offsetPx } = getContainingView(model);
942
916
  const b = (dynamicBlocks === null || dynamicBlocks === void 0 ? void 0 : dynamicBlocks.contentBlocks[0]) || {};
943
917
  const staticblock = (staticBlocks === null || staticBlocks === void 0 ? void 0 : staticBlocks.contentBlocks[0]) || {};
@@ -1028,16 +1002,22 @@ function localStorageGetItem(item) {
1028
1002
  : undefined;
1029
1003
  }
1030
1004
  exports.localStorageGetItem = localStorageGetItem;
1031
- function max(arr) {
1032
- let max = -Infinity;
1005
+ function localStorageSetItem(str, item) {
1006
+ return typeof localStorage !== 'undefined'
1007
+ ? localStorage.setItem(str, item)
1008
+ : undefined;
1009
+ }
1010
+ exports.localStorageSetItem = localStorageSetItem;
1011
+ function max(arr, init = -Infinity) {
1012
+ let max = init;
1033
1013
  for (let i = 0; i < arr.length; i++) {
1034
1014
  max = arr[i] > max ? arr[i] : max;
1035
1015
  }
1036
1016
  return max;
1037
1017
  }
1038
1018
  exports.max = max;
1039
- function min(arr) {
1040
- let min = Infinity;
1019
+ function min(arr, init = Infinity) {
1020
+ let min = init;
1041
1021
  for (let i = 0; i < arr.length; i++) {
1042
1022
  min = arr[i] < min ? arr[i] : min;
1043
1023
  }
@@ -1056,3 +1036,6 @@ function avg(arr) {
1056
1036
  return sum(arr) / arr.length;
1057
1037
  }
1058
1038
  exports.avg = avg;
1039
+ var simpleFeature_1 = require("./simpleFeature");
1040
+ Object.defineProperty(exports, "SimpleFeature", { enumerable: true, get: function () { return __importDefault(simpleFeature_1).default; } });
1041
+ Object.defineProperty(exports, "isFeature", { enumerable: true, get: function () { return simpleFeature_1.isFeature; } });
@@ -50,8 +50,8 @@ class RemoteFileWithRangeCache extends generic_filehandle_1.RemoteFile {
50
50
  const rangeParse = /bytes=(\d+)-(\d+)/.exec(range);
51
51
  if (rangeParse) {
52
52
  const [, start, end] = rangeParse;
53
- const s = parseInt(start, 10);
54
- const e = parseInt(end, 10);
53
+ const s = Number.parseInt(start, 10);
54
+ const e = Number.parseInt(end, 10);
55
55
  const response = (await globalRangeCache.getRange(url, s, e - s + 1, {
56
56
  signal: init && init.signal,
57
57
  }));
@@ -1,7 +1,6 @@
1
1
  import { GenericFilehandle, Fetcher } from 'generic-filehandle';
2
- import { RemoteFileWithRangeCache } from './RemoteFileWithRangeCache';
3
2
  import { FileLocation } from '../types';
4
3
  import PluginManager from '../../PluginManager';
5
- export { RemoteFileWithRangeCache };
6
4
  export declare function openLocation(location: FileLocation, pluginManager?: PluginManager): GenericFilehandle;
7
5
  export declare function getFetcher(location: FileLocation, pluginManager?: PluginManager): Fetcher;
6
+ export { RemoteFileWithRangeCache } from './RemoteFileWithRangeCache';
package/util/io/index.js CHANGED
@@ -3,12 +3,11 @@ 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
- exports.getFetcher = exports.openLocation = exports.RemoteFileWithRangeCache = void 0;
6
+ exports.RemoteFileWithRangeCache = exports.getFetcher = exports.openLocation = void 0;
7
7
  const generic_filehandle_1 = require("generic-filehandle");
8
8
  const detect_node_1 = __importDefault(require("detect-node"));
9
9
  // locals
10
10
  const RemoteFileWithRangeCache_1 = require("./RemoteFileWithRangeCache");
11
- Object.defineProperty(exports, "RemoteFileWithRangeCache", { enumerable: true, get: function () { return RemoteFileWithRangeCache_1.RemoteFileWithRangeCache; } });
12
11
  const types_1 = require("../types");
13
12
  const tracks_1 = require("../tracks");
14
13
  const __1 = require("../");
@@ -105,10 +104,11 @@ function getInternetAccount(location, pluginManager) {
105
104
  async function checkAuthNeededFetch(url, opts) {
106
105
  var _a;
107
106
  const response = await fetch(url, opts);
108
- if (response.status === 401) {
109
- if ((_a = response.headers.get('WWW-Authenticate')) === null || _a === void 0 ? void 0 : _a.includes('Basic')) {
110
- throw new types_1.AuthNeededError('Accessing HTTPBasic resource without authentication', url.toString());
111
- }
107
+ if (response.status === 401 &&
108
+ ((_a = response.headers.get('WWW-Authenticate')) === null || _a === void 0 ? void 0 : _a.includes('Basic'))) {
109
+ throw new types_1.AuthNeededError('Accessing HTTPBasic resource without authentication', url.toString());
112
110
  }
113
111
  return response;
114
112
  }
113
+ var RemoteFileWithRangeCache_2 = require("./RemoteFileWithRangeCache");
114
+ Object.defineProperty(exports, "RemoteFileWithRangeCache", { enumerable: true, get: function () { return RemoteFileWithRangeCache_2.RemoteFileWithRangeCache; } });
package/util/jexl.js CHANGED
@@ -45,7 +45,9 @@ function default_1( /* config?: any*/) {
45
45
  j.addFunction('replaceAll', (s, match, sub) => s.replaceAll(match, sub));
46
46
  j.addFunction('slice', (s, start, end) => s.slice(start, end));
47
47
  j.addFunction('startsWith', (s, search, pos) => s.startsWith(search, pos));
48
- j.addFunction('substring', (s, start, end) => s.substring(start, end));
48
+ j.addFunction('substring', (s, start, end) =>
49
+ // eslint-disable-next-line unicorn/prefer-string-slice
50
+ s.substring(start, end));
49
51
  j.addFunction('toLowerCase', (s) => s.toLowerCase());
50
52
  j.addFunction('toUpperCase', (s) => s.toUpperCase());
51
53
  j.addFunction('trim', (s) => s.trim());
@@ -64,7 +64,7 @@ class LayoutRow {
64
64
  offset: left - rectWidth,
65
65
  min: left,
66
66
  max: right,
67
- bits: new Array(3 * rectWidth),
67
+ bits: Array.from({ length: 3 * rectWidth }),
68
68
  };
69
69
  }
70
70
  addRect(rect, data) {
@@ -85,7 +85,10 @@ class LayoutRow {
85
85
  this.rowState = this.initialize(left, right);
86
86
  }
87
87
  else if (additionalLength > 0) {
88
- this.rowState.bits = this.rowState.bits.concat(new Array(additionalLength));
88
+ this.rowState.bits = [
89
+ ...this.rowState.bits,
90
+ ...Array.from({ length: additionalLength }),
91
+ ];
89
92
  }
90
93
  }
91
94
  // expand leftward if necessary
@@ -97,7 +100,10 @@ class LayoutRow {
97
100
  this.rowState = this.initialize(left, right);
98
101
  }
99
102
  else {
100
- this.rowState.bits = new Array(additionalLength).concat(this.rowState.bits);
103
+ this.rowState.bits = [
104
+ ...Array.from({ length: additionalLength }),
105
+ ...this.rowState.bits,
106
+ ];
101
107
  this.rowState.offset -= additionalLength;
102
108
  }
103
109
  }
@@ -370,7 +376,7 @@ class GranularRectLayout {
370
376
  return this.getTotalHeight();
371
377
  }
372
378
  getRectangles() {
373
- return new Map(Array.from(this.rectangles.entries()).map(([id, rect]) => {
379
+ return new Map([...this.rectangles.entries()].map(([id, rect]) => {
374
380
  const { l, r, originalHeight, top } = rect;
375
381
  const t = (top || 0) * this.pitchY;
376
382
  const b = t + originalHeight;
@@ -13,7 +13,7 @@ class MultiLayout {
13
13
  }
14
14
  getDataByID(id) {
15
15
  for (const layout of this.subLayouts.values()) {
16
- // @ts-ignore
16
+ // @ts-expect-error
17
17
  const r = layout.getDataByID(id);
18
18
  if (r) {
19
19
  return r;
@@ -32,13 +32,9 @@ class SceneGraph {
32
32
  addChild(nameOrSceneGraph, left, top, width, height,
33
33
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
34
  data) {
35
- let child;
36
- if (nameOrSceneGraph instanceof SceneGraph) {
37
- child = nameOrSceneGraph;
38
- }
39
- else {
40
- child = new SceneGraph(nameOrSceneGraph, left, top, width, height, data);
41
- }
35
+ const child = nameOrSceneGraph instanceof SceneGraph
36
+ ? nameOrSceneGraph
37
+ : new SceneGraph(nameOrSceneGraph, left, top, width, height, data);
42
38
  if (!(child instanceof SceneGraph)) {
43
39
  throw new TypeError('argument to addChild must be an array or a SceneGraph');
44
40
  }
@@ -0,0 +1,3 @@
1
+ type Obj = Record<string, unknown>;
2
+ export default function map(object: Obj, mapper: (val: unknown) => void, isSeen?: WeakSet<object>): void;
3
+ export {};