@jbrowse/core 1.5.9 → 1.6.3

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 (155) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.js +91 -78
  2. package/BaseFeatureWidget/SequenceFeatureDetails.js +64 -56
  3. package/BaseFeatureWidget/SequenceFeatureDetails.test.js +9 -9
  4. package/BaseFeatureWidget/index.js +1 -1
  5. package/BaseFeatureWidget/index.test.js +4 -4
  6. package/BaseFeatureWidget/util.js +13 -9
  7. package/CorePlugin.js +32 -20
  8. package/Plugin.js +13 -11
  9. package/PluginLoader.js +37 -32
  10. package/PluginManager.d.ts +8 -5
  11. package/PluginManager.js +142 -53
  12. package/ReExports/index.js +4 -4
  13. package/ReExports/list.js +2 -2
  14. package/ReExports/material-ui-colors.js +20 -20
  15. package/ReExports/modules.d.ts +7 -5
  16. package/ReExports/modules.js +51 -47
  17. package/TextSearch/BaseResults.js +34 -24
  18. package/TextSearch/BaseResults.test.js +7 -3
  19. package/TextSearch/TextSearchManager.js +16 -14
  20. package/assemblyManager/assembly.js +38 -33
  21. package/assemblyManager/assemblyConfigSchema.js +2 -2
  22. package/assemblyManager/assemblyManager.js +19 -15
  23. package/assemblyManager/index.js +3 -3
  24. package/babel.config.d.ts +15 -0
  25. package/babel.config.js +19 -0
  26. package/configuration/configurationSchema.js +19 -17
  27. package/configuration/configurationSlot.js +11 -11
  28. package/configuration/configurationSlot.test.js +5 -5
  29. package/configuration/index.d.ts +1 -0
  30. package/configuration/util.js +5 -5
  31. package/data_adapters/BaseAdapter.d.ts +15 -3
  32. package/data_adapters/BaseAdapter.js +215 -61
  33. package/data_adapters/BaseAdapter.test.js +29 -23
  34. package/data_adapters/CytobandAdapter.d.ts +1 -1
  35. package/data_adapters/CytobandAdapter.js +24 -18
  36. package/data_adapters/dataAdapterCache.js +8 -8
  37. package/package.json +3 -3
  38. package/pluggableElementTypes/AdapterType.js +30 -21
  39. package/pluggableElementTypes/ConnectionType.js +28 -18
  40. package/pluggableElementTypes/DisplayType.js +27 -17
  41. package/pluggableElementTypes/InternetAccountType.js +24 -14
  42. package/pluggableElementTypes/PluggableElementBase.js +10 -8
  43. package/pluggableElementTypes/RpcMethodType.d.ts +1 -1
  44. package/pluggableElementTypes/RpcMethodType.js +140 -117
  45. package/pluggableElementTypes/RpcMethodType.test.js +22 -16
  46. package/pluggableElementTypes/TextSearchAdapterType.js +25 -15
  47. package/pluggableElementTypes/TrackType.js +25 -15
  48. package/pluggableElementTypes/ViewType.js +25 -15
  49. package/pluggableElementTypes/WidgetType.js +27 -17
  50. package/pluggableElementTypes/index.js +11 -11
  51. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +5 -5
  52. package/pluggableElementTypes/models/BaseDisplayModel.js +8 -5
  53. package/pluggableElementTypes/models/BaseTrackModel.js +11 -8
  54. package/pluggableElementTypes/models/BaseViewModel.js +3 -3
  55. package/pluggableElementTypes/models/InternetAccountModel.d.ts +1 -1
  56. package/pluggableElementTypes/models/InternetAccountModel.js +4 -4
  57. package/pluggableElementTypes/models/baseConnectionConfig.js +2 -2
  58. package/pluggableElementTypes/models/baseTrackConfig.js +7 -4
  59. package/pluggableElementTypes/models/index.js +4 -4
  60. package/pluggableElementTypes/renderers/BoxRendererType.js +48 -38
  61. package/pluggableElementTypes/renderers/CircularChordRendererType.js +18 -12
  62. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +34 -26
  63. package/pluggableElementTypes/renderers/FeatureRendererType.js +45 -35
  64. package/pluggableElementTypes/renderers/RendererType.js +30 -20
  65. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +12 -8
  66. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
  67. package/pluggableElementTypes/renderers/ServerSideRendererType.js +44 -32
  68. package/pluggableElementTypes/renderers/index.js +8 -8
  69. package/pluggableElementTypes/renderers/util/serializableFilterChain.js +10 -8
  70. package/pluggableElementTypes/renderers/util/serializableFilterChain.test.js +2 -2
  71. package/rpc/BaseRpcDriver.js +42 -37
  72. package/rpc/BaseRpcDriver.test.js +62 -48
  73. package/rpc/MainThreadRpcDriver.js +31 -21
  74. package/rpc/RpcManager.js +18 -16
  75. package/rpc/WebWorkerRpcDriver.js +37 -27
  76. package/rpc/configSchema.js +2 -2
  77. package/rpc/coreRpcMethods.d.ts +16 -0
  78. package/rpc/coreRpcMethods.js +247 -120
  79. package/rpc/remoteAbortSignals.js +3 -3
  80. package/ui/AboutDialog.js +20 -16
  81. package/ui/App.js +42 -38
  82. package/ui/AssemblySelector.d.ts +1 -1
  83. package/ui/AssemblySelector.js +6 -6
  84. package/ui/Drawer.js +7 -7
  85. package/ui/DrawerWidget.d.ts +1 -1
  86. package/ui/DrawerWidget.js +37 -33
  87. package/ui/DropDownMenu.js +21 -9
  88. package/ui/EditableTypography.js +30 -19
  89. package/ui/ErrorMessage.js +5 -5
  90. package/ui/FactoryResetDialog.js +8 -8
  91. package/ui/FatalErrorDialog.js +29 -12
  92. package/ui/FatalErrorDialog.test.js +10 -10
  93. package/ui/FileSelector/FileSelector.js +42 -32
  94. package/ui/FileSelector/LocalFileChooser.js +9 -9
  95. package/ui/FileSelector/UrlChooser.js +4 -4
  96. package/ui/FileSelector/index.js +4 -4
  97. package/ui/Icons.js +9 -9
  98. package/ui/Logo.js +19 -19
  99. package/ui/Menu.js +46 -35
  100. package/ui/NewSessionCards.js +29 -19
  101. package/ui/PrerenderedCanvas.js +27 -10
  102. package/ui/ResizeHandle.js +17 -10
  103. package/ui/SanitizedHTML.js +5 -5
  104. package/ui/SanitizedHTML.test.js +4 -4
  105. package/ui/Snackbar.js +16 -12
  106. package/ui/SnackbarModel.js +1 -1
  107. package/ui/Tooltip.js +11 -7
  108. package/ui/ViewContainer.d.ts +2 -5
  109. package/ui/ViewContainer.js +44 -49
  110. package/ui/index.d.ts +1 -0
  111. package/ui/index.js +26 -13
  112. package/ui/theme.js +15 -11
  113. package/util/Base1DViewModel.d.ts +14 -12
  114. package/util/Base1DViewModel.js +51 -55
  115. package/util/Base1DViewModel.test.js +5 -5
  116. package/util/QuickLRU.js +30 -26
  117. package/util/aborting.js +25 -15
  118. package/util/analytics.d.ts +1 -0
  119. package/util/analytics.js +14 -6
  120. package/util/blockTypes.js +48 -36
  121. package/util/calculateDynamicBlocks.js +4 -4
  122. package/util/calculateDynamicBlocks.test.js +14 -10
  123. package/util/calculateStaticBlocks.js +1 -1
  124. package/util/calculateStaticBlocks.test.js +15 -15
  125. package/util/compositeMap.js +30 -26
  126. package/util/idMaker.js +4 -4
  127. package/util/index.d.ts +23 -1
  128. package/util/index.js +135 -41
  129. package/util/index.test.js +11 -7
  130. package/util/io/RemoteFileWithRangeCache.js +40 -28
  131. package/util/io/index.js +5 -5
  132. package/util/jexl.js +5 -5
  133. package/util/jexlStrings.js +2 -2
  134. package/util/jexlStrings.test.js +2 -2
  135. package/util/layouts/GranularRectLayout.js +33 -27
  136. package/util/layouts/GranularRectLayout.test.js +10 -10
  137. package/util/layouts/MultiLayout.js +19 -13
  138. package/util/layouts/PrecomputedLayout.js +16 -14
  139. package/util/layouts/PrecomputedMultiLayout.js +23 -17
  140. package/util/layouts/SceneGraph.js +18 -12
  141. package/util/layouts/index.js +6 -6
  142. package/util/offscreenCanvasPonyfill.js +30 -28
  143. package/util/offscreenCanvasUtils.js +5 -5
  144. package/util/range.test.js +20 -20
  145. package/util/rxjs.js +2 -2
  146. package/util/simpleFeature.js +23 -18
  147. package/util/simpleFeature.test.js +3 -3
  148. package/util/stats.d.ts +1 -1
  149. package/util/stats.js +10 -6
  150. package/util/stats.test.js +15 -15
  151. package/util/tracks.js +1 -3
  152. package/util/types/index.d.ts +1 -1
  153. package/util/types/index.js +36 -31
  154. package/util/types/mst.js +19 -15
  155. package/util/when.js +5 -5
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
@@ -13,9 +13,9 @@ exports.isConfigurationSchemaType = isConfigurationSchemaType;
13
13
  exports.isConfigurationSlotType = isConfigurationSlotType;
14
14
  exports.readConfObject = readConfObject;
15
15
 
16
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/typeof"));
16
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
17
17
 
18
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
18
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
19
19
 
20
20
  var _mobxStateTree = require("mobx-state-tree");
21
21
 
@@ -154,7 +154,7 @@ function getTypeNamesFromExplicitlyTypedUnion(maybeUnionType) {
154
154
  throw new Error("invalid config schema type ".concat(type));
155
155
  }
156
156
 
157
- typeNames.push.apply(typeNames, (0, _toConsumableArray2["default"])(typeName));
157
+ typeNames.push.apply(typeNames, (0, _toConsumableArray2.default)(typeName));
158
158
  });
159
159
  return typeNames;
160
160
  }
@@ -217,5 +217,5 @@ function isConfigurationModel(thing) {
217
217
  }
218
218
 
219
219
  function isConfigurationSlotType(thing) {
220
- return (0, _typeof2["default"])(thing) === 'object' && thing !== null && 'isJBrowseConfigurationSlot' in thing;
220
+ return (0, _typeof2.default)(thing) === 'object' && thing !== null && 'isJBrowseConfigurationSlot' in thing;
221
221
  }
@@ -24,7 +24,9 @@ export interface BaseArgs {
24
24
  export interface AnyAdapter {
25
25
  new (config: AnyConfigurationModel, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager | undefined): AnyDataAdapter;
26
26
  }
27
- export declare type AnyDataAdapter = BaseAdapter | BaseFeatureDataAdapter | BaseRefNameAliasAdapter | BaseTextSearchAdapter | RegionsAdapter | SequenceAdapter;
27
+ export declare type AnyDataAdapter = BaseAdapter | BaseFeatureDataAdapter | BaseRefNameAliasAdapter | BaseTextSearchAdapter | RegionsAdapter | BaseSequenceAdapter;
28
+ export interface SequenceAdapter extends BaseFeatureDataAdapter, RegionsAdapter {
29
+ }
28
30
  export declare abstract class BaseAdapter {
29
31
  config: AnyConfigurationModel;
30
32
  getSubAdapter?: getSubAdapterType | undefined;
@@ -39,6 +41,11 @@ export declare abstract class BaseAdapter {
39
41
  */
40
42
  abstract freeResources(region: Region): void;
41
43
  }
44
+ export interface Stats {
45
+ featureDensity?: number;
46
+ fetchSizeLimit?: number;
47
+ bytes?: number;
48
+ }
42
49
  /**
43
50
  * Base class for feature adapters to extend. Defines some methods that
44
51
  * subclasses must implement.
@@ -101,13 +108,18 @@ export declare abstract class BaseFeatureDataAdapter extends BaseAdapter {
101
108
  hasDataForRefName(refName: string, opts?: BaseOptions): Promise<boolean>;
102
109
  getRegionStats(region: Region, opts?: BaseOptions): Promise<import("../util/stats").FeatureStats>;
103
110
  getMultiRegionStats(regions?: Region[], opts?: BaseOptions): Promise<import("../util/stats").FeatureStats>;
111
+ estimateRegionsStats(regions: Region[], opts?: BaseOptions): Promise<Stats>;
104
112
  }
105
113
  export interface RegionsAdapter extends BaseAdapter {
106
114
  getRegions(opts: BaseOptions): Promise<NoAssemblyRegion[]>;
107
115
  }
108
- export interface SequenceAdapter extends BaseFeatureDataAdapter, RegionsAdapter {
116
+ export declare abstract class BaseSequenceAdapter extends BaseFeatureDataAdapter implements RegionsAdapter {
117
+ estimateRegionsStats(): Promise<{
118
+ featureDensity: number;
119
+ }>;
120
+ abstract getRegions(opts: BaseOptions): Promise<NoAssemblyRegion[]>;
109
121
  }
110
- export declare function isSequenceAdapter(thing: AnyDataAdapter): thing is SequenceAdapter;
122
+ export declare function isSequenceAdapter(thing: AnyDataAdapter): thing is BaseSequenceAdapter;
111
123
  export declare function isRegionsAdapter(thing: AnyDataAdapter): thing is RegionsAdapter;
112
124
  export declare function isFeatureAdapter(thing: AnyDataAdapter): thing is BaseFeatureDataAdapter;
113
125
  export interface Alias {
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.BaseFeatureDataAdapter = exports.BaseAdapter = void 0;
8
+ exports.BaseSequenceAdapter = exports.BaseFeatureDataAdapter = exports.BaseAdapter = void 0;
9
9
  exports.isFeatureAdapter = isFeatureAdapter;
10
10
  exports.isRefNameAliasAdapter = isRefNameAliasAdapter;
11
11
  exports.isRegionsAdapter = isRegionsAdapter;
@@ -14,17 +14,21 @@ exports.isTextSearchAdapter = isTextSearchAdapter;
14
14
 
15
15
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
16
16
 
17
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
17
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
18
 
19
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
19
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
20
20
 
21
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits"));
21
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
22
22
 
23
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createSuper"));
23
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
24
24
 
25
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
25
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
26
26
 
27
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
27
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
28
+
29
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
30
+
31
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
28
32
 
29
33
  var _rxjs = require("rxjs");
30
34
 
@@ -42,21 +46,29 @@ var _stats = require("../util/stats");
42
46
 
43
47
  var _idMaker = _interopRequireDefault(require("../util/idMaker"));
44
48
 
45
- var BaseAdapter = /*#__PURE__*/(0, _createClass2["default"])(function BaseAdapter() {
49
+ 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; }
50
+
51
+ 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; }
52
+
53
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
54
+
55
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
56
+
57
+ var BaseAdapter = /*#__PURE__*/(0, _createClass2.default)(function BaseAdapter() {
46
58
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _configurationSchema.ConfigurationSchema)('empty', {}).create();
47
59
  var getSubAdapter = arguments.length > 1 ? arguments[1] : undefined;
48
60
  var pluginManager = arguments.length > 2 ? arguments[2] : undefined;
49
- (0, _classCallCheck2["default"])(this, BaseAdapter);
61
+ (0, _classCallCheck2.default)(this, BaseAdapter);
50
62
  this.config = config;
51
63
  this.getSubAdapter = getSubAdapter;
52
64
  this.pluginManager = pluginManager;
53
- this.id = void 0;
65
+ (0, _defineProperty2.default)(this, "id", void 0);
54
66
 
55
67
  // note: we use switch on jest here for more simple feature IDs
56
68
  // in test environment
57
69
  if (typeof jest === 'undefined') {
58
70
  var data = (0, _mobxStateTree.isStateTreeNode)(config) ? (0, _mobxStateTree.getSnapshot)(config) : config;
59
- this.id = "".concat((0, _idMaker["default"])(data));
71
+ this.id = "".concat((0, _idMaker.default)(data));
60
72
  } else {
61
73
  this.id = 'test';
62
74
  }
@@ -67,25 +79,24 @@ var BaseAdapter = /*#__PURE__*/(0, _createClass2["default"])(function BaseAdapte
67
79
  * @param region - Region
68
80
  */
69
81
  );
82
+ exports.BaseAdapter = BaseAdapter;
83
+ (0, _defineProperty2.default)(BaseAdapter, "capabilities", []);
84
+
70
85
  /**
71
86
  * Base class for feature adapters to extend. Defines some methods that
72
87
  * subclasses must implement.
73
88
  */
74
-
75
- exports.BaseAdapter = BaseAdapter;
76
- BaseAdapter.capabilities = [];
77
-
78
89
  var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
79
- (0, _inherits2["default"])(BaseFeatureDataAdapter, _BaseAdapter);
90
+ (0, _inherits2.default)(BaseFeatureDataAdapter, _BaseAdapter);
80
91
 
81
- var _super = (0, _createSuper2["default"])(BaseFeatureDataAdapter);
92
+ var _super = _createSuper(BaseFeatureDataAdapter);
82
93
 
83
94
  function BaseFeatureDataAdapter() {
84
- (0, _classCallCheck2["default"])(this, BaseFeatureDataAdapter);
95
+ (0, _classCallCheck2.default)(this, BaseFeatureDataAdapter);
85
96
  return _super.apply(this, arguments);
86
97
  }
87
98
 
88
- (0, _createClass2["default"])(BaseFeatureDataAdapter, [{
99
+ (0, _createClass2.default)(BaseFeatureDataAdapter, [{
89
100
  key: "getHeader",
90
101
  value: // public abstract getFeatures(
91
102
  // region: Region,
@@ -108,8 +119,8 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
108
119
  * object
109
120
  */
110
121
  function () {
111
- var _getHeader = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_opts) {
112
- return _regenerator["default"].wrap(function _callee$(_context) {
122
+ var _getHeader = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_opts) {
123
+ return _regenerator.default.wrap(function _callee$(_context) {
113
124
  while (1) {
114
125
  switch (_context.prev = _context.next) {
115
126
  case 0:
@@ -137,8 +148,8 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
137
148
  }, {
138
149
  key: "getMetadata",
139
150
  value: function () {
140
- var _getMetadata = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_opts) {
141
- return _regenerator["default"].wrap(function _callee2$(_context2) {
151
+ var _getMetadata = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(_opts) {
152
+ return _regenerator.default.wrap(function _callee2$(_context2) {
142
153
  while (1) {
143
154
  switch (_context2.prev = _context2.next) {
144
155
  case 0:
@@ -170,9 +181,9 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
170
181
 
171
182
  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
172
183
  return (0, _rxjs2.ObservableCreate)( /*#__PURE__*/function () {
173
- var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(observer) {
184
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(observer) {
174
185
  var hasData;
175
- return _regenerator["default"].wrap(function _callee3$(_context3) {
186
+ return _regenerator.default.wrap(function _callee3$(_context3) {
176
187
  while (1) {
177
188
  switch (_context3.prev = _context3.next) {
178
189
  case 0:
@@ -184,7 +195,6 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
184
195
  (0, _util.checkAbortSignal)(opts.signal);
185
196
 
186
197
  if (!hasData) {
187
- // console.warn(`no data for ${region.refName}`)
188
198
  observer.complete();
189
199
  } else {
190
200
  _this.getFeatures(region, opts).pipe((0, _operators.takeUntil)((0, _util.observeAbortSignal)(opts.signal))).subscribe(observer);
@@ -226,11 +236,11 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
226
236
 
227
237
  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
228
238
 
229
- var obs = _rxjs.merge.apply(void 0, (0, _toConsumableArray2["default"])(regions.map(function (region) {
239
+ var obs = _rxjs.merge.apply(void 0, (0, _toConsumableArray2.default)(regions.map(function (region) {
230
240
  return (0, _rxjs2.ObservableCreate)( /*#__PURE__*/function () {
231
- var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(observer) {
241
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(observer) {
232
242
  var hasData;
233
- return _regenerator["default"].wrap(function _callee4$(_context4) {
243
+ return _regenerator.default.wrap(function _callee4$(_context4) {
234
244
  while (1) {
235
245
  switch (_context4.prev = _context4.next) {
236
246
  case 0:
@@ -242,7 +252,6 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
242
252
  (0, _util.checkAbortSignal)(opts.signal);
243
253
 
244
254
  if (!hasData) {
245
- // console.warn(`no data for ${region.refName}`)
246
255
  observer.complete();
247
256
  } else {
248
257
  _this2.getFeatures(region, opts).subscribe(observer);
@@ -277,11 +286,11 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
277
286
  }, {
278
287
  key: "hasDataForRefName",
279
288
  value: function () {
280
- var _hasDataForRefName = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(refName) {
289
+ var _hasDataForRefName = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(refName) {
281
290
  var opts,
282
291
  refNames,
283
292
  _args5 = arguments;
284
- return _regenerator["default"].wrap(function _callee5$(_context5) {
293
+ return _regenerator.default.wrap(function _callee5$(_context5) {
285
294
  while (1) {
286
295
  switch (_context5.prev = _context5.next) {
287
296
  case 0:
@@ -310,9 +319,9 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
310
319
  }, {
311
320
  key: "getRegionStats",
312
321
  value: function () {
313
- var _getRegionStats = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(region, opts) {
322
+ var _getRegionStats = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(region, opts) {
314
323
  var feats;
315
- return _regenerator["default"].wrap(function _callee6$(_context6) {
324
+ return _regenerator.default.wrap(function _callee6$(_context6) {
316
325
  while (1) {
317
326
  switch (_context6.prev = _context6.next) {
318
327
  case 0:
@@ -336,7 +345,7 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
336
345
  }, {
337
346
  key: "getMultiRegionStats",
338
347
  value: function () {
339
- var _getMultiRegionStats = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
348
+ var _getMultiRegionStats = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
340
349
  var _this3 = this;
341
350
 
342
351
  var regions,
@@ -349,7 +358,7 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
349
358
  featureCount,
350
359
  basesCovered,
351
360
  _args7 = arguments;
352
- return _regenerator["default"].wrap(function _callee7$(_context7) {
361
+ return _regenerator.default.wrap(function _callee7$(_context7) {
353
362
  while (1) {
354
363
  switch (_context7.prev = _context7.next) {
355
364
  case 0:
@@ -371,35 +380,27 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
371
380
 
372
381
  case 6:
373
382
  feats = _context7.sent;
374
- scoreMax = feats.map(function (s) {
375
- return s.scoreMax;
376
- }).reduce(function (acc, curr) {
377
- return Math.max(acc, curr);
378
- });
379
- scoreMin = feats.map(function (s) {
380
- return s.scoreMin;
381
- }).reduce(function (acc, curr) {
382
- return Math.min(acc, curr);
383
+ scoreMax = feats.map(function (a) {
384
+ return a.scoreMax;
385
+ }).reduce(function (a, b) {
386
+ return Math.max(a, b);
383
387
  });
384
- scoreSum = feats.map(function (s) {
385
- return s.scoreSum;
388
+ scoreMin = feats.map(function (a) {
389
+ return a.scoreMin;
386
390
  }).reduce(function (a, b) {
387
- return a + b;
391
+ return Math.min(a, b);
392
+ });
393
+ scoreSum = feats.reduce(function (a, b) {
394
+ return a + b.scoreSum;
388
395
  }, 0);
389
- scoreSumSquares = feats.map(function (s) {
390
- return s.scoreSumSquares;
391
- }).reduce(function (a, b) {
392
- return a + b;
396
+ scoreSumSquares = feats.reduce(function (a, b) {
397
+ return a + b.scoreSumSquares;
393
398
  }, 0);
394
- featureCount = feats.map(function (s) {
395
- return s.featureCount;
396
- }).reduce(function (a, b) {
397
- return a + b;
399
+ featureCount = feats.reduce(function (a, b) {
400
+ return a + b.featureCount;
398
401
  }, 0);
399
- basesCovered = feats.map(function (s) {
400
- return s.basesCovered;
401
- }).reduce(function (a, b) {
402
- return a + b;
402
+ basesCovered = feats.reduce(function (a, b) {
403
+ return a + b.basesCovered;
403
404
  }, 0);
404
405
  return _context7.abrupt("return", (0, _stats.rectifyStats)({
405
406
  scoreMin: scoreMin,
@@ -424,12 +425,165 @@ var BaseFeatureDataAdapter = /*#__PURE__*/function (_BaseAdapter) {
424
425
 
425
426
  return getMultiRegionStats;
426
427
  }()
428
+ }, {
429
+ key: "estimateRegionsStats",
430
+ value: function () {
431
+ var _estimateRegionsStats = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(regions, opts) {
432
+ var _this4 = this;
433
+
434
+ var region, lastTime, statsFromInterval, maybeRecordStats;
435
+ return _regenerator.default.wrap(function _callee10$(_context10) {
436
+ while (1) {
437
+ switch (_context10.prev = _context10.next) {
438
+ case 0:
439
+ region = regions[0];
440
+ lastTime = +Date.now();
441
+
442
+ statsFromInterval = /*#__PURE__*/function () {
443
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(length, expansionTime) {
444
+ var start, end, sampleCenter, query, features;
445
+ return _regenerator.default.wrap(function _callee8$(_context8) {
446
+ while (1) {
447
+ switch (_context8.prev = _context8.next) {
448
+ case 0:
449
+ start = region.start, end = region.end;
450
+ sampleCenter = start * 0.75 + end * 0.25;
451
+ query = _objectSpread(_objectSpread({}, region), {}, {
452
+ start: Math.max(0, Math.round(sampleCenter - length / 2)),
453
+ end: Math.min(Math.round(sampleCenter + length / 2), end)
454
+ });
455
+ _context8.next = 5;
456
+ return _this4.getFeatures(query, opts).pipe((0, _operators.toArray)()).toPromise();
457
+
458
+ case 5:
459
+ features = _context8.sent;
460
+ return _context8.abrupt("return", maybeRecordStats(length, {
461
+ featureDensity: features.length / length
462
+ }, features.length, expansionTime));
463
+
464
+ case 7:
465
+ case "end":
466
+ return _context8.stop();
467
+ }
468
+ }
469
+ }, _callee8);
470
+ }));
471
+
472
+ return function statsFromInterval(_x10, _x11) {
473
+ return _ref3.apply(this, arguments);
474
+ };
475
+ }();
476
+
477
+ maybeRecordStats = /*#__PURE__*/function () {
478
+ var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(interval, stats, statsSampleFeatures, expansionTime) {
479
+ var refLen, currTime;
480
+ return _regenerator.default.wrap(function _callee9$(_context9) {
481
+ while (1) {
482
+ switch (_context9.prev = _context9.next) {
483
+ case 0:
484
+ refLen = region.end - region.start;
485
+
486
+ if (!(statsSampleFeatures >= 70 || interval * 2 > refLen)) {
487
+ _context9.next = 5;
488
+ break;
489
+ }
490
+
491
+ return _context9.abrupt("return", stats);
492
+
493
+ case 5:
494
+ if (!(expansionTime <= 5000)) {
495
+ _context9.next = 12;
496
+ break;
497
+ }
498
+
499
+ currTime = +Date.now();
500
+ expansionTime += currTime - lastTime;
501
+ lastTime = currTime;
502
+ return _context9.abrupt("return", statsFromInterval(interval * 2, expansionTime));
503
+
504
+ case 12:
505
+ console.warn("Stats estimation reached timeout, or didn't get enough features");
506
+ return _context9.abrupt("return", {
507
+ featureDensity: Infinity
508
+ });
509
+
510
+ case 14:
511
+ case "end":
512
+ return _context9.stop();
513
+ }
514
+ }
515
+ }, _callee9);
516
+ }));
517
+
518
+ return function maybeRecordStats(_x12, _x13, _x14, _x15) {
519
+ return _ref4.apply(this, arguments);
520
+ };
521
+ }();
522
+
523
+ return _context10.abrupt("return", statsFromInterval(1000, 0));
524
+
525
+ case 5:
526
+ case "end":
527
+ return _context10.stop();
528
+ }
529
+ }
530
+ }, _callee10);
531
+ }));
532
+
533
+ function estimateRegionsStats(_x8, _x9) {
534
+ return _estimateRegionsStats.apply(this, arguments);
535
+ }
536
+
537
+ return estimateRegionsStats;
538
+ }()
427
539
  }]);
428
540
  return BaseFeatureDataAdapter;
429
541
  }(BaseAdapter);
430
542
 
431
543
  exports.BaseFeatureDataAdapter = BaseFeatureDataAdapter;
432
544
 
545
+ var BaseSequenceAdapter = /*#__PURE__*/function (_BaseFeatureDataAdapt) {
546
+ (0, _inherits2.default)(BaseSequenceAdapter, _BaseFeatureDataAdapt);
547
+
548
+ var _super2 = _createSuper(BaseSequenceAdapter);
549
+
550
+ function BaseSequenceAdapter() {
551
+ (0, _classCallCheck2.default)(this, BaseSequenceAdapter);
552
+ return _super2.apply(this, arguments);
553
+ }
554
+
555
+ (0, _createClass2.default)(BaseSequenceAdapter, [{
556
+ key: "estimateRegionsStats",
557
+ value: function () {
558
+ var _estimateRegionsStats2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {
559
+ return _regenerator.default.wrap(function _callee11$(_context11) {
560
+ while (1) {
561
+ switch (_context11.prev = _context11.next) {
562
+ case 0:
563
+ return _context11.abrupt("return", {
564
+ featureDensity: 0
565
+ });
566
+
567
+ case 1:
568
+ case "end":
569
+ return _context11.stop();
570
+ }
571
+ }
572
+ }, _callee11);
573
+ }));
574
+
575
+ function estimateRegionsStats() {
576
+ return _estimateRegionsStats2.apply(this, arguments);
577
+ }
578
+
579
+ return estimateRegionsStats;
580
+ }()
581
+ }]);
582
+ return BaseSequenceAdapter;
583
+ }(BaseFeatureDataAdapter);
584
+
585
+ exports.BaseSequenceAdapter = BaseSequenceAdapter;
586
+
433
587
  function isSequenceAdapter(thing) {
434
588
  return 'getRegions' in thing && 'getFeatures' in thing;
435
589
  }
@@ -1,18 +1,20 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
5
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
6
 
7
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
7
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
8
8
 
9
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
 
11
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits"));
11
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
12
12
 
13
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createSuper"));
13
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
14
14
 
15
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
15
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
16
+
17
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
18
 
17
19
  var _operators = require("rxjs/operators");
18
20
 
@@ -24,28 +26,32 @@ var _simpleFeature = _interopRequireDefault(require("../util/simpleFeature"));
24
26
 
25
27
  var _configurationSchema = require("../configuration/configurationSchema");
26
28
 
29
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
30
+
31
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
32
+
27
33
  describe('base data adapter', function () {
28
- it('properly propagates errors in feature fetching', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
34
+ it('properly propagates errors in feature fetching', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
29
35
  var Adapter, adapter, features, featuresArray;
30
- return _regenerator["default"].wrap(function _callee2$(_context2) {
36
+ return _regenerator.default.wrap(function _callee2$(_context2) {
31
37
  while (1) {
32
38
  switch (_context2.prev = _context2.next) {
33
39
  case 0:
34
40
  Adapter = /*#__PURE__*/function (_BaseFeatureDataAdapt) {
35
- (0, _inherits2["default"])(Adapter, _BaseFeatureDataAdapt);
41
+ (0, _inherits2.default)(Adapter, _BaseFeatureDataAdapt);
36
42
 
37
- var _super = (0, _createSuper2["default"])(Adapter);
43
+ var _super = _createSuper(Adapter);
38
44
 
39
45
  function Adapter() {
40
- (0, _classCallCheck2["default"])(this, Adapter);
46
+ (0, _classCallCheck2.default)(this, Adapter);
41
47
  return _super.apply(this, arguments);
42
48
  }
43
49
 
44
- (0, _createClass2["default"])(Adapter, [{
50
+ (0, _createClass2.default)(Adapter, [{
45
51
  key: "getRefNames",
46
52
  value: function () {
47
- var _getRefNames = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
48
- return _regenerator["default"].wrap(function _callee$(_context) {
53
+ var _getRefNames = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
54
+ return _regenerator.default.wrap(function _callee$(_context) {
49
55
  while (1) {
50
56
  switch (_context.prev = _context.next) {
51
57
  case 0:
@@ -96,27 +102,27 @@ describe('base data adapter', function () {
96
102
  }
97
103
  }, _callee2);
98
104
  })));
99
- it('retrieves features', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
105
+ it('retrieves features', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
100
106
  var Adapter, adapter, features, featuresArray, features2, featuresArray2;
101
- return _regenerator["default"].wrap(function _callee4$(_context4) {
107
+ return _regenerator.default.wrap(function _callee4$(_context4) {
102
108
  while (1) {
103
109
  switch (_context4.prev = _context4.next) {
104
110
  case 0:
105
111
  Adapter = /*#__PURE__*/function (_BaseFeatureDataAdapt2) {
106
- (0, _inherits2["default"])(Adapter, _BaseFeatureDataAdapt2);
112
+ (0, _inherits2.default)(Adapter, _BaseFeatureDataAdapt2);
107
113
 
108
- var _super2 = (0, _createSuper2["default"])(Adapter);
114
+ var _super2 = _createSuper(Adapter);
109
115
 
110
116
  function Adapter() {
111
- (0, _classCallCheck2["default"])(this, Adapter);
117
+ (0, _classCallCheck2.default)(this, Adapter);
112
118
  return _super2.apply(this, arguments);
113
119
  }
114
120
 
115
- (0, _createClass2["default"])(Adapter, [{
121
+ (0, _createClass2.default)(Adapter, [{
116
122
  key: "getRefNames",
117
123
  value: function () {
118
- var _getRefNames2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
119
- return _regenerator["default"].wrap(function _callee3$(_context3) {
124
+ var _getRefNames2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
125
+ return _regenerator.default.wrap(function _callee3$(_context3) {
120
126
  while (1) {
121
127
  switch (_context3.prev = _context3.next) {
122
128
  case 0:
@@ -141,7 +147,7 @@ describe('base data adapter', function () {
141
147
  value: function getFeatures(region) {
142
148
  return (0, _rxjs.ObservableCreate)(function (observer) {
143
149
  if (region.refName === 'ctgA') {
144
- observer.next(new _simpleFeature["default"]({
150
+ observer.next(new _simpleFeature.default({
145
151
  uniqueId: 'testFeature',
146
152
  start: 100,
147
153
  end: 200
@@ -1,4 +1,4 @@
1
- import SimpleFeature from '@jbrowse/core/util/simpleFeature';
1
+ import SimpleFeature from '../util/simpleFeature';
2
2
  import { BaseAdapter } from './BaseAdapter';
3
3
  declare const configSchema: import("../configuration/configurationSchema").AnyConfigurationSchemaType;
4
4
  declare class CytobandAdapter extends BaseAdapter {