@jbrowse/core 3.1.0 → 3.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.
@@ -44,7 +44,7 @@ function moveTo(self, start, end) {
44
44
  extraBp = ((newBpPerPx - targetBpPerPx) * self.width) / 2;
45
45
  }
46
46
  let bpToStart = -extraBp;
47
- for (let i = 0; i < self.displayedRegions.length; i += 1) {
47
+ for (let i = 0; i < self.displayedRegions.length; i++) {
48
48
  const region = self.displayedRegions[i];
49
49
  if (start.index === i) {
50
50
  bpToStart += start.offset;
package/util/analytics.js CHANGED
@@ -68,9 +68,9 @@ async function writeGAAnalytics(rootModel, initialTimestamp) {
68
68
  analyticsScript += `ga('create', '${jbrowseUser}', 'auto', 'jbrowseTracker');`;
69
69
  const gaData = {};
70
70
  const googleDimensions = 'tracks-count ver electron loadTime pluginNames';
71
- googleDimensions.split(/\s+/).forEach((key, index) => {
71
+ for (const [index, key] of googleDimensions.split(/\s+/).entries()) {
72
72
  gaData[`dimension${index + 1}`] = stats[key];
73
- });
73
+ }
74
74
  gaData.metric1 = Math.round(stats.loadTime);
75
75
  analyticsScript += `ga('jbrowseTracker.send', 'pageview',${JSON.stringify(gaData)});`;
76
76
  const analyticsScriptNode = document.createElement('script');
package/util/idMaker.d.ts CHANGED
@@ -1 +1 @@
1
- export default function idMaker(args: Record<string, unknown>, id?: string, len?: number): number;
1
+ export default function idMaker(args: Record<string, unknown>, id?: string, len?: number): string | number;
package/util/idMaker.js CHANGED
@@ -20,5 +20,5 @@ function idMaker(args, id = '', len = 5000) {
20
20
  }
21
21
  }
22
22
  }
23
- return (0, _1.hashCode)(id);
23
+ return `adp-${(0, _1.hashCode)(id)}`;
24
24
  }
package/util/index.d.ts CHANGED
@@ -192,7 +192,8 @@ export interface ViewSnap {
192
192
  })[];
193
193
  }
194
194
  export declare function isSupportedIndexingAdapter(type?: string): boolean;
195
- export declare function getBpDisplayStr(totalBp: number): string;
195
+ export declare function getBpDisplayStr(total: number): string;
196
+ export declare function getProgressDisplayStr(current: number, total: number): string;
196
197
  export declare function toLocale(n: number): string;
197
198
  export declare function getTickDisplayStr(totalBp: number, bpPerPx: number): string;
198
199
  export declare function getViewParams(model: IAnyStateTreeNode, exportSVG?: boolean): {
@@ -257,6 +258,7 @@ export declare function fetchAndMaybeUnzipText(loc: GenericFilehandle, opts?: Ba
257
258
  export declare function isObject(x: unknown): x is Record<string | symbol | number, unknown>;
258
259
  export declare function localStorageGetNumber(key: string, defaultVal: number): number;
259
260
  export declare function localStorageGetBoolean(key: string, defaultVal: boolean): boolean;
261
+ export declare function forEachWithStopTokenCheck<T>(iter: Iterable<T>, stopToken: string | undefined, arg: (arg: T) => void, durationMs?: number): void;
260
262
  export declare function testAdapter(fileName: string, regex: RegExp, adapterHint: string | undefined, expected: string): boolean;
261
263
  export { type Feature, type SimpleFeatureSerialized, type SimpleFeatureSerializedNoId, default as SimpleFeature, isFeature, } from './simpleFeature';
262
264
  export { blobToDataURL } from './blobToDataURL';
package/util/index.js CHANGED
@@ -63,6 +63,7 @@ exports.objectHash = objectHash;
63
63
  exports.bytesForRegions = bytesForRegions;
64
64
  exports.isSupportedIndexingAdapter = isSupportedIndexingAdapter;
65
65
  exports.getBpDisplayStr = getBpDisplayStr;
66
+ exports.getProgressDisplayStr = getProgressDisplayStr;
66
67
  exports.toLocale = toLocale;
67
68
  exports.getTickDisplayStr = getTickDisplayStr;
68
69
  exports.getViewParams = getViewParams;
@@ -94,6 +95,7 @@ exports.fetchAndMaybeUnzipText = fetchAndMaybeUnzipText;
94
95
  exports.isObject = isObject;
95
96
  exports.localStorageGetNumber = localStorageGetNumber;
96
97
  exports.localStorageGetBoolean = localStorageGetBoolean;
98
+ exports.forEachWithStopTokenCheck = forEachWithStopTokenCheck;
97
99
  exports.testAdapter = testAdapter;
98
100
  const react_1 = require("react");
99
101
  const bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
@@ -589,8 +591,8 @@ function reverse(str) {
589
591
  function complement(str) {
590
592
  var _a;
591
593
  let comp = '';
592
- for (let i = 0; i < str.length; i++) {
593
- comp += (_a = exports.complementTable[str[i]]) !== null && _a !== void 0 ? _a : str[i];
594
+ for (const element of str) {
595
+ comp += (_a = exports.complementTable[element]) !== null && _a !== void 0 ? _a : element;
594
596
  }
595
597
  return comp;
596
598
  }
@@ -691,7 +693,7 @@ exports.defaultCodonTable = {
691
693
  };
692
694
  function generateCodonTable(table) {
693
695
  const tempCodonTable = {};
694
- Object.keys(table).forEach(codon => {
696
+ for (const codon of Object.keys(table)) {
695
697
  const aa = table[codon];
696
698
  const nucs = [];
697
699
  for (let i = 0; i < 3; i++) {
@@ -711,7 +713,7 @@ function generateCodonTable(table) {
711
713
  }
712
714
  }
713
715
  }
714
- });
716
+ }
715
717
  return tempCodonTable;
716
718
  }
717
719
  async function updateStatus(msg, cb, fn) {
@@ -760,15 +762,29 @@ function isSupportedIndexingAdapter(type = '') {
760
762
  'VcfAdapter',
761
763
  ].includes(type);
762
764
  }
763
- function getBpDisplayStr(totalBp) {
764
- if (Math.floor(totalBp / 1000000) > 0) {
765
- return `${Number.parseFloat((totalBp / 1000000).toPrecision(3))}Mbp`;
765
+ function getBpDisplayStr(total) {
766
+ if (Math.floor(total / 1000000) > 0) {
767
+ return `${r(total / 1000000)}Mbp`;
768
+ }
769
+ else if (Math.floor(total / 1000) > 0) {
770
+ return `${r(total / 1000)}Kbp`;
771
+ }
772
+ else {
773
+ return `${Math.floor(total)}bp`;
774
+ }
775
+ }
776
+ function r(s) {
777
+ return toLocale(Number.parseFloat(s.toPrecision(3)));
778
+ }
779
+ function getProgressDisplayStr(current, total) {
780
+ if (Math.floor(total / 1000000) > 0) {
781
+ return `${r(current / 1000000)}/${r(total / 1000000)}Mb`;
766
782
  }
767
- else if (Math.floor(totalBp / 1000) > 0) {
768
- return `${Number.parseFloat((totalBp / 1000).toPrecision(3))}Kbp`;
783
+ else if (Math.floor(total / 1000) > 0) {
784
+ return `${r(current / 1000)}/${r(total / 1000)}Kb`;
769
785
  }
770
786
  else {
771
- return `${toLocale(Math.floor(totalBp))}bp`;
787
+ return `${r(current)}/${r(total)}}bytes`;
772
788
  }
773
789
  }
774
790
  function toLocale(n) {
@@ -988,6 +1004,16 @@ function localStorageGetNumber(key, defaultVal) {
988
1004
  function localStorageGetBoolean(key, defaultVal) {
989
1005
  return Boolean(JSON.parse(localStorageGetItem(key) || JSON.stringify(defaultVal)));
990
1006
  }
1007
+ function forEachWithStopTokenCheck(iter, stopToken, arg, durationMs = 400) {
1008
+ let start = performance.now();
1009
+ for (const t of iter) {
1010
+ if (performance.now() - start > durationMs) {
1011
+ (0, stopToken_1.checkStopToken)(stopToken);
1012
+ start = performance.now();
1013
+ }
1014
+ arg(t);
1015
+ }
1016
+ }
991
1017
  function testAdapter(fileName, regex, adapterHint, expected) {
992
1018
  return (regex.test(fileName) && !adapterHint) || adapterHint === expected;
993
1019
  }
@@ -13,9 +13,9 @@ class ThrowingLayout {
13
13
  class PrecomputedMultiLayout extends MultiLayout_1.default {
14
14
  constructor(json) {
15
15
  super(ThrowingLayout);
16
- Object.entries(json).forEach(([layoutName, sublayoutJson]) => {
16
+ for (const [layoutName, sublayoutJson] of Object.entries(json)) {
17
17
  this.subLayouts.set(layoutName, new PrecomputedLayout_1.default(sublayoutJson));
18
- });
18
+ }
19
19
  }
20
20
  }
21
21
  exports.default = PrecomputedMultiLayout;
package/util/map-obj.js CHANGED
@@ -13,12 +13,12 @@ function map(object, mapper, isSeen = new WeakSet()) {
13
13
  }
14
14
  isSeen.add(object);
15
15
  const mapArray = (array) => {
16
- array.forEach(element => {
16
+ for (const element of array) {
17
17
  mapper(element);
18
18
  if (isObject(element)) {
19
19
  map(element, mapper, isSeen);
20
20
  }
21
- });
21
+ }
22
22
  };
23
23
  if (Array.isArray(object)) {
24
24
  mapArray(object);
package/util/rxjs.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import type { Observer } from 'rxjs';
3
- export declare function ObservableCreate<T>(func: (arg: Observer<T>) => void | Promise<void>, _stopToken?: string): Observable<T>;
3
+ export declare function ObservableCreate<T>(func: (arg: Observer<T>) => void | Promise<void>, stopToken?: string): Observable<T>;
package/util/rxjs.js CHANGED
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ObservableCreate = ObservableCreate;
4
4
  const rxjs_1 = require("rxjs");
5
- function ObservableCreate(func, _stopToken) {
5
+ const stopToken_1 = require("./stopToken");
6
+ function ObservableCreate(func, stopToken) {
7
+ (0, stopToken_1.checkStopToken)(stopToken);
6
8
  return new rxjs_1.Observable((observer) => {
7
9
  try {
8
10
  const ret = func(observer);
@@ -1,3 +1,3 @@
1
1
  export declare function createStopToken(): string;
2
2
  export declare function stopStopToken(stopToken: string): void;
3
- export declare function checkStopToken(stopToken?: string): void;
3
+ export declare function checkStopToken(stopToken: string | undefined): void;