@jbrowse/core 2.17.0 → 2.18.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.
Files changed (308) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +1 -2
  2. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +4 -8
  3. package/BaseFeatureWidget/BaseFeatureDetail/BaseCard.d.ts +1 -1
  4. package/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -2
  5. package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +2 -3
  6. package/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  7. package/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +2 -3
  8. package/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +22 -25
  9. package/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +2 -2
  10. package/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +6 -8
  11. package/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +1 -1
  12. package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +1 -1
  13. package/BaseFeatureWidget/BaseFeatureDetail/UriField.js +1 -1
  14. package/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +1 -1
  15. package/BaseFeatureWidget/BaseFeatureDetail/index.js +1 -7
  16. package/BaseFeatureWidget/BaseFeatureDetail/util.js +0 -5
  17. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +2 -2
  18. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +0 -7
  19. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  20. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.js +1 -7
  21. package/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.d.ts +3 -3
  22. package/BaseFeatureWidget/SequenceFeatureDetails/SequencePanel.js +24 -33
  23. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/HelpDialog.js +1 -2
  24. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.d.ts +2 -2
  25. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceDialog.js +3 -4
  26. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.d.ts +2 -2
  27. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceFeatureMenu.js +3 -6
  28. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SequenceTypeSelector.d.ts +1 -1
  29. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SettingsDialog.d.ts +1 -1
  30. package/BaseFeatureWidget/SequenceFeatureDetails/dialogs/SettingsDialog.js +2 -2
  31. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.d.ts +2 -2
  32. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.js +1 -2
  33. package/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +2 -56
  34. package/BaseFeatureWidget/SequenceFeatureDetails/model.js +1 -56
  35. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDNASequence.d.ts +3 -3
  36. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.d.ts +2 -2
  37. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/CDSSequence.js +5 -6
  38. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.d.ts +2 -2
  39. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/GenomicSequence.js +0 -1
  40. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.d.ts +2 -2
  41. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/ProteinSequence.js +0 -2
  42. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.d.ts +1 -1
  43. package/BaseFeatureWidget/SequenceFeatureDetails/seqtypes/SequenceDisplay.js +1 -3
  44. package/BaseFeatureWidget/SequenceFeatureDetails/util.js +1 -5
  45. package/BaseFeatureWidget/stateModelFactory.d.ts +2 -93
  46. package/BaseFeatureWidget/stateModelFactory.js +3 -73
  47. package/BaseFeatureWidget/types.d.ts +3 -3
  48. package/BaseFeatureWidget/util.js +0 -4
  49. package/CorePlugin.d.ts +1 -1
  50. package/CorePlugin.js +2 -5
  51. package/Plugin.d.ts +2 -5
  52. package/Plugin.js +0 -3
  53. package/PluginLoader.d.ts +1 -1
  54. package/PluginLoader.js +2 -19
  55. package/PluginManager.d.ts +15 -31
  56. package/PluginManager.js +11 -39
  57. package/ReExports/DataGrid.js +0 -1
  58. package/ReExports/list.d.ts +0 -5
  59. package/ReExports/list.js +0 -5
  60. package/ReExports/modules.d.ts +22 -20
  61. package/ReExports/modules.js +16 -25
  62. package/TextSearch/BaseResults.d.ts +3 -3
  63. package/TextSearch/TextSearchManager.d.ts +4 -16
  64. package/TextSearch/TextSearchManager.js +1 -13
  65. package/assemblyManager/assembly.d.ts +5 -100
  66. package/assemblyManager/assembly.js +27 -143
  67. package/assemblyManager/assemblyConfigSchema.d.ts +1 -34
  68. package/assemblyManager/assemblyConfigSchema.js +12 -46
  69. package/assemblyManager/assemblyManager.d.ts +7 -57
  70. package/assemblyManager/assemblyManager.js +2 -57
  71. package/configuration/configurationSchema.d.ts +4 -4
  72. package/configuration/configurationSchema.js +2 -14
  73. package/configuration/configurationSlot.d.ts +1 -12
  74. package/configuration/configurationSlot.js +2 -32
  75. package/configuration/index.d.ts +2 -2
  76. package/configuration/index.js +2 -2
  77. package/configuration/types.d.ts +2 -3
  78. package/configuration/util.d.ts +1 -25
  79. package/configuration/util.js +19 -56
  80. package/data_adapters/BaseAdapter/BaseAdapter.d.ts +4 -14
  81. package/data_adapters/BaseAdapter/BaseAdapter.js +1 -10
  82. package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +5 -114
  83. package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +3 -79
  84. package/data_adapters/BaseAdapter/BaseOptions.d.ts +2 -2
  85. package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.d.ts +2 -2
  86. package/data_adapters/BaseAdapter/BaseSequenceAdapter.d.ts +3 -6
  87. package/data_adapters/BaseAdapter/BaseTextSearchAdapter.d.ts +3 -3
  88. package/data_adapters/BaseAdapter/RegionsAdapter.d.ts +3 -3
  89. package/data_adapters/BaseAdapter/index.d.ts +4 -4
  90. package/data_adapters/BaseAdapter/types.d.ts +2 -2
  91. package/data_adapters/BaseAdapter/util.d.ts +6 -6
  92. package/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +1 -1
  93. package/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -2
  94. package/data_adapters/CytobandAdapter/configSchema.d.ts +0 -3
  95. package/data_adapters/CytobandAdapter/configSchema.js +1 -7
  96. package/data_adapters/CytobandAdapter/index.d.ts +1 -1
  97. package/data_adapters/CytobandAdapter/index.js +1 -1
  98. package/data_adapters/dataAdapterCache.d.ts +4 -21
  99. package/data_adapters/dataAdapterCache.js +0 -19
  100. package/package.json +3 -4
  101. package/pluggableElementTypes/AdapterType.d.ts +2 -2
  102. package/pluggableElementTypes/AddTrackWorkflowType.d.ts +2 -2
  103. package/pluggableElementTypes/ConnectionType.d.ts +3 -3
  104. package/pluggableElementTypes/DisplayType.d.ts +3 -9
  105. package/pluggableElementTypes/InternetAccountType.d.ts +2 -2
  106. package/pluggableElementTypes/PluggableElementBase.d.ts +1 -1
  107. package/pluggableElementTypes/PluggableElementBase.js +2 -2
  108. package/pluggableElementTypes/RpcMethodType.d.ts +5 -11
  109. package/pluggableElementTypes/RpcMethodType.js +7 -19
  110. package/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +9 -0
  111. package/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.js +35 -0
  112. package/pluggableElementTypes/TextSearchAdapterType.d.ts +2 -2
  113. package/pluggableElementTypes/TrackType.d.ts +3 -3
  114. package/pluggableElementTypes/ViewType.d.ts +3 -3
  115. package/pluggableElementTypes/WidgetType.d.ts +4 -3
  116. package/pluggableElementTypes/index.d.ts +11 -11
  117. package/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +2 -29
  118. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +1 -28
  119. package/pluggableElementTypes/models/BaseDisplayModel.d.ts +3 -83
  120. package/pluggableElementTypes/models/BaseDisplayModel.js +2 -69
  121. package/pluggableElementTypes/models/BaseTrackModel.d.ts +4 -46
  122. package/pluggableElementTypes/models/BaseTrackModel.js +0 -58
  123. package/pluggableElementTypes/models/BaseViewModel.d.ts +2 -42
  124. package/pluggableElementTypes/models/BaseViewModel.js +2 -38
  125. package/pluggableElementTypes/models/InternetAccountModel.d.ts +3 -119
  126. package/pluggableElementTypes/models/InternetAccountModel.js +3 -123
  127. package/pluggableElementTypes/models/baseConnectionConfig.d.ts +0 -6
  128. package/pluggableElementTypes/models/baseConnectionConfig.js +1 -13
  129. package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +0 -15
  130. package/pluggableElementTypes/models/baseInternetAccountConfig.js +1 -23
  131. package/pluggableElementTypes/models/baseTrackConfig.d.ts +2 -53
  132. package/pluggableElementTypes/models/baseTrackConfig.js +1 -58
  133. package/pluggableElementTypes/renderers/BoxRendererType.d.ts +7 -15
  134. package/pluggableElementTypes/renderers/BoxRendererType.js +3 -14
  135. package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +3 -2
  136. package/pluggableElementTypes/renderers/CircularChordRendererType.js +1 -6
  137. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +6 -21
  138. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +2 -25
  139. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +5 -47
  140. package/pluggableElementTypes/renderers/FeatureRendererType.js +15 -68
  141. package/pluggableElementTypes/renderers/RendererType.d.ts +4 -8
  142. package/pluggableElementTypes/renderers/RendererType.js +1 -5
  143. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +2 -2
  144. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.js +3 -12
  145. package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +1 -1
  146. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +6 -14
  147. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +9 -49
  148. package/pluggableElementTypes/renderers/ServerSideRendererType.js +7 -57
  149. package/pluggableElementTypes/renderers/index.d.ts +1 -1
  150. package/pluggableElementTypes/renderers/util/serializableFilterChain.js +1 -3
  151. package/rpc/BaseRpcDriver.d.ts +3 -4
  152. package/rpc/BaseRpcDriver.js +20 -80
  153. package/rpc/MainThreadRpcDriver.d.ts +3 -7
  154. package/rpc/MainThreadRpcDriver.js +0 -5
  155. package/rpc/RpcManager.d.ts +3 -3
  156. package/rpc/RpcManager.js +2 -4
  157. package/rpc/WebWorkerRpcDriver.d.ts +3 -2
  158. package/rpc/WebWorkerRpcDriver.js +2 -13
  159. package/rpc/baseRpcConfig.d.ts +0 -3
  160. package/rpc/baseRpcConfig.js +1 -7
  161. package/rpc/configSchema.d.ts +0 -6
  162. package/rpc/configSchema.js +2 -11
  163. package/rpc/mainThreadRpcConfig.js +1 -7
  164. package/rpc/methods/CoreFreeResources.d.ts +0 -6
  165. package/rpc/methods/CoreFreeResources.js +2 -9
  166. package/rpc/methods/CoreGetFeatureDensityStats.d.ts +4 -5
  167. package/rpc/methods/CoreGetFeatureDensityStats.js +1 -1
  168. package/rpc/methods/CoreGetFeatureDetails.d.ts +2 -7
  169. package/rpc/methods/CoreGetFeatureDetails.js +0 -5
  170. package/rpc/methods/CoreGetFeatures.d.ts +5 -5
  171. package/rpc/methods/CoreGetFeatures.js +4 -5
  172. package/rpc/methods/CoreGetFileInfo.d.ts +1 -2
  173. package/rpc/methods/CoreGetFileInfo.js +1 -1
  174. package/rpc/methods/CoreGetMetadata.d.ts +1 -2
  175. package/rpc/methods/CoreGetMetadata.js +1 -1
  176. package/rpc/methods/CoreGetRefNames.d.ts +1 -2
  177. package/rpc/methods/CoreGetRefNames.js +1 -1
  178. package/rpc/methods/CoreRender.d.ts +2 -6
  179. package/rpc/methods/CoreRender.js +5 -7
  180. package/rpc/methods/util.d.ts +3 -3
  181. package/rpc/methods/util.js +0 -1
  182. package/rpc/webWorkerRpcConfig.js +1 -7
  183. package/stories/JBrowseCore.stories.d.ts +1 -1
  184. package/stories/JBrowseCore.stories.js +3 -3
  185. package/stories/examples/WithSequencePanel.d.ts +1 -1
  186. package/stories/examples/WithSequencePanel.js +3 -3
  187. package/tsconfig.build.tsbuildinfo +1 -1
  188. package/ui/AppLogo.d.ts +1 -1
  189. package/ui/AppLogo.js +0 -2
  190. package/ui/AssemblySelector.d.ts +2 -2
  191. package/ui/AssemblySelector.js +0 -3
  192. package/ui/BaseTooltip.js +2 -6
  193. package/ui/CascadingMenu.d.ts +2 -2
  194. package/ui/CascadingMenu.js +3 -4
  195. package/ui/CascadingMenuButton.d.ts +1 -1
  196. package/ui/CascadingMenuButton.js +1 -1
  197. package/ui/ColorPicker.js +1 -7
  198. package/ui/Dialog.d.ts +1 -1
  199. package/ui/Dialog.js +2 -6
  200. package/ui/DropDownMenu.d.ts +1 -1
  201. package/ui/DropDownMenu.js +2 -2
  202. package/ui/EditableTypography.d.ts +1 -1
  203. package/ui/EditableTypography.js +1 -5
  204. package/ui/ErrorBoundary.d.ts +2 -1
  205. package/ui/ErrorMessage.js +2 -9
  206. package/ui/ErrorMessageStackTraceDialog.js +2 -10
  207. package/ui/FactoryResetDialog.js +1 -1
  208. package/ui/FatalErrorDialog.js +1 -1
  209. package/ui/FileSelector/FileSelector.d.ts +4 -3
  210. package/ui/FileSelector/FileSelector.js +40 -40
  211. package/ui/FileSelector/LocalFileChooser.d.ts +1 -1
  212. package/ui/FileSelector/LocalFileChooser.js +0 -1
  213. package/ui/FileSelector/UrlChooser.d.ts +4 -3
  214. package/ui/FileSelector/UrlChooser.js +5 -3
  215. package/ui/Icons.d.ts +1 -1
  216. package/ui/Icons.js +1 -7
  217. package/ui/LoadingEllipses.d.ts +1 -1
  218. package/ui/LoadingEllipses.js +3 -3
  219. package/ui/Menu.d.ts +1 -1
  220. package/ui/Menu.js +3 -10
  221. package/ui/MenuButton.d.ts +1 -1
  222. package/ui/ResizeHandle.js +2 -2
  223. package/ui/ReturnToImportFormDialog.js +1 -1
  224. package/ui/SanitizedHTML.js +1 -21
  225. package/ui/Snackbar.d.ts +2 -2
  226. package/ui/Snackbar.js +1 -2
  227. package/ui/SnackbarModel.d.ts +1 -26
  228. package/ui/SnackbarModel.js +2 -30
  229. package/ui/colors.d.ts +1 -1
  230. package/ui/colors.js +1 -1
  231. package/ui/react-colorful.js +0 -3
  232. package/ui/theme.d.ts +1 -1
  233. package/ui/theme.js +0 -40
  234. package/util/Base1DUtils.d.ts +1 -1
  235. package/util/Base1DUtils.js +0 -12
  236. package/util/Base1DViewModel.d.ts +4 -81
  237. package/util/Base1DViewModel.js +4 -108
  238. package/util/QuickLRU.js +0 -9
  239. package/util/TimeTraveller.js +0 -4
  240. package/util/aborting.d.ts +0 -20
  241. package/util/aborting.js +0 -31
  242. package/util/analytics.js +1 -12
  243. package/util/blockTypes.d.ts +0 -11
  244. package/util/blockTypes.js +0 -13
  245. package/util/calculateDynamicBlocks.d.ts +1 -20
  246. package/util/calculateDynamicBlocks.js +1 -22
  247. package/util/calculateStaticBlocks.d.ts +2 -2
  248. package/util/calculateStaticBlocks.js +0 -2
  249. package/util/color/cssColorsLevel4.js +0 -1
  250. package/util/color/index.d.ts +0 -19
  251. package/util/color/index.js +0 -30
  252. package/util/compositeMap.js +0 -2
  253. package/util/dedupe.js +0 -1
  254. package/util/formatFastaStrings.d.ts +0 -13
  255. package/util/formatFastaStrings.js +0 -13
  256. package/util/idMaker.d.ts +1 -1
  257. package/util/idMaker.js +16 -12
  258. package/util/index.d.ts +16 -164
  259. package/util/index.js +22 -282
  260. package/util/io/RemoteFileWithRangeCache.d.ts +3 -2
  261. package/util/io/RemoteFileWithRangeCache.js +6 -10
  262. package/util/io/index.d.ts +3 -4
  263. package/util/io/index.js +3 -17
  264. package/util/jexl.js +3 -13
  265. package/util/jexlStrings.d.ts +0 -6
  266. package/util/jexlStrings.js +0 -8
  267. package/util/layouts/BaseLayout.d.ts +1 -1
  268. package/util/layouts/GranularRectLayout.d.ts +1 -17
  269. package/util/layouts/GranularRectLayout.js +4 -81
  270. package/util/layouts/MultiLayout.d.ts +1 -6
  271. package/util/layouts/MultiLayout.js +0 -6
  272. package/util/layouts/PrecomputedLayout.d.ts +1 -4
  273. package/util/layouts/PrecomputedLayout.js +0 -5
  274. package/util/layouts/PrecomputedMultiLayout.js +0 -2
  275. package/util/layouts/SceneGraph.d.ts +0 -12
  276. package/util/layouts/SceneGraph.js +0 -13
  277. package/util/makeAbortableReaction.d.ts +2 -0
  278. package/util/makeAbortableReaction.js +50 -0
  279. package/util/map-obj.js +0 -4
  280. package/util/mst-reflection.d.ts +1 -14
  281. package/util/mst-reflection.js +1 -28
  282. package/util/nanoid.js +0 -31
  283. package/util/nextTick.d.ts +1 -0
  284. package/util/nextTick.js +6 -0
  285. package/util/offscreenCanvasPonyfill.d.ts +0 -1
  286. package/util/offscreenCanvasPonyfill.js +1 -9
  287. package/util/offscreenCanvasUtils.js +1 -8
  288. package/util/range.d.ts +0 -25
  289. package/util/range.js +0 -34
  290. package/util/rxjs.d.ts +3 -7
  291. package/util/rxjs.js +2 -9
  292. package/util/simpleFeature.d.ts +0 -50
  293. package/util/simpleFeature.js +0 -35
  294. package/util/stats.d.ts +3 -26
  295. package/util/stats.js +0 -25
  296. package/util/stopToken.d.ts +3 -0
  297. package/util/stopToken.js +29 -0
  298. package/util/tracks.d.ts +3 -25
  299. package/util/tracks.js +0 -30
  300. package/util/types/index.d.ts +14 -30
  301. package/util/types/index.js +5 -14
  302. package/util/types/mst.js +0 -9
  303. package/util/types/util.d.ts +2 -9
  304. package/util/useMeasure.js +0 -1
  305. package/util/when.d.ts +1 -15
  306. package/util/when.js +3 -70
  307. package/rpc/remoteAbortSignals.d.ts +0 -36
  308. package/rpc/remoteAbortSignals.js +0 -79
@@ -24,18 +24,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const react_1 = __importStar(require("react"));
27
- const mobx_react_1 = require("mobx-react");
28
- // locals
29
- const util_1 = require("../../util");
30
27
  const material_1 = require("@mui/material");
31
- const ui_1 = require("../../ui");
28
+ const mobx_react_1 = require("mobx-react");
32
29
  const mobx_state_tree_1 = require("mobx-state-tree");
33
- // eslint-disable-next-line react/no-deprecated
34
30
  const react_dom_1 = require("react-dom");
31
+ const ui_1 = require("../../ui");
32
+ const util_1 = require("../../util");
35
33
  const NewHydrate = (0, mobx_react_1.observer)(function RpcRenderedSvgGroup(props) {
36
34
  const { html, theme, RenderingComponent, ...rest } = props;
37
35
  const ref = (0, react_1.useRef)(null);
38
- // this `any` is a react-dom/client::Root
39
36
  const rootRef = (0, react_1.useRef)();
40
37
  const root = (0, mobx_state_tree_1.getRoot)(props.displayModel);
41
38
  const hydrateRoot = root.hydrateFn;
@@ -60,7 +57,6 @@ const NewHydrate = (0, mobx_react_1.observer)(function RpcRenderedSvgGroup(props
60
57
  root === null || root === void 0 ? void 0 : root.unmount();
61
58
  });
62
59
  };
63
- // biome-ignore lint/correctness/useExhaustiveDependencies:
64
60
  }, [RenderingComponent, hydrateRoot, theme, rest]);
65
61
  return react_1.default.createElement("g", { ref: ref, dangerouslySetInnerHTML: { __html: html } });
66
62
  });
@@ -74,13 +70,8 @@ const OldHydrate = (0, mobx_react_1.observer)(function OldHydrate(props) {
74
70
  if (domNode.innerHTML) {
75
71
  (0, react_dom_1.unmountComponentAtNode)(domNode);
76
72
  }
77
- // setting outline:none fixes react "focusable" element issue. see
78
- // https://github.com/GMOD/jbrowse-components/issues/2160
79
73
  domNode.style.outline = 'none';
80
74
  domNode.innerHTML = html;
81
- // use requestIdleCallback to defer main-thread rendering and
82
- // hydration for when we have some free time. helps keep the
83
- // framerate up.
84
75
  (0, util_1.rIC)(() => {
85
76
  (0, react_dom_1.hydrate)(react_1.default.createElement(RenderingComponent, { ...props }), domNode);
86
77
  });
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ResultsSerialized, RenderArgs } from './ServerSideRendererType';
2
+ import type { RenderArgs, ResultsSerialized } from './ServerSideRendererType';
3
3
  interface Props extends ResultsSerialized, RenderArgs {
4
4
  RenderingComponent: React.ComponentType<any>;
5
5
  }
@@ -25,31 +25,25 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const react_1 = __importStar(require("react"));
27
27
  const styles_1 = require("@mui/material/styles");
28
- // locals
29
- const ui_1 = require("../../ui");
30
28
  const mobx_react_1 = require("mobx-react");
31
29
  const mobx_state_tree_1 = require("mobx-state-tree");
32
- // eslint-disable-next-line react/no-deprecated
33
30
  const react_dom_1 = require("react-dom");
31
+ const ui_1 = require("../../ui");
34
32
  const util_1 = require("../../util");
35
33
  const NewHydrate = (0, mobx_react_1.observer)(function ServerSideRenderedContent({ theme, html, RenderingComponent, ...rest }) {
36
34
  const ref = (0, react_1.useRef)(null);
37
35
  const rootRef = (0, react_1.useRef)();
38
36
  const { hydrateFn } = (0, mobx_state_tree_1.getRoot)(rest.displayModel);
39
37
  (0, react_1.useEffect)(() => {
40
- // requestIdleCallback here helps to avoid hydration mismatch because it
41
- // provides time for dangerouslySetInnerHTML to set the innerHTML contents
42
- // of the node, otherwise ref.current.innerHTML can be empty
38
+ if (ref.current) {
39
+ ref.current.innerHTML = html;
40
+ }
43
41
  const renderTimeout = (0, util_1.rIC)(() => {
44
42
  var _a;
45
43
  if (!ref.current) {
46
44
  return;
47
45
  }
48
46
  const jbrowseTheme = (0, ui_1.createJBrowseTheme)(theme);
49
- // if there is a hydration mismatch, investigate value of
50
- // - value of ref.current.innerHTML
51
- // - value of `html` variable
52
- // - renderToString of the below React element
53
47
  rootRef.current =
54
48
  (_a = rootRef.current) !== null && _a !== void 0 ? _a : hydrateFn(ref.current, react_1.default.createElement(styles_1.ThemeProvider, { theme: jbrowseTheme },
55
49
  react_1.default.createElement(RenderingComponent, { ...rest })));
@@ -64,9 +58,8 @@ const NewHydrate = (0, mobx_react_1.observer)(function ServerSideRenderedContent
64
58
  root === null || root === void 0 ? void 0 : root.unmount();
65
59
  });
66
60
  };
67
- /* biome-ignore lint/correctness/useExhaustiveDependencies: */
68
- }, [theme, rest, hydrateFn, RenderingComponent]);
69
- return (react_1.default.createElement("div", { "data-testid": "hydrationContainer", ref: ref, dangerouslySetInnerHTML: { __html: html } }));
61
+ }, [theme, rest, html, hydrateFn, RenderingComponent]);
62
+ return react_1.default.createElement("div", { "data-testid": "hydrationContainer", ref: ref });
70
63
  });
71
64
  const OldHydrate = (0, mobx_react_1.observer)(function ({ theme, html, RenderingComponent, ...rest }) {
72
65
  const ref = (0, react_1.useRef)(null);
@@ -89,7 +82,6 @@ const OldHydrate = (0, mobx_react_1.observer)(function ({ theme, html, Rendering
89
82
  (0, react_dom_1.unmountComponentAtNode)(domNode);
90
83
  }
91
84
  };
92
- /* biome-ignore lint/correctness/useExhaustiveDependencies: */
93
85
  }, [html, jbrowseTheme, rest, RenderingComponent]);
94
86
  return react_1.default.createElement("div", { ref: ref });
95
87
  });
@@ -1,12 +1,14 @@
1
- import { ThemeOptions } from '@mui/material';
2
- import { SnapshotOrInstance, SnapshotIn } from 'mobx-state-tree';
3
- import SerializableFilterChain, { SerializedFilterChain } from './util/serializableFilterChain';
4
- import { AnyConfigurationModel } from '../../configuration';
5
- import RpcManager from '../../rpc/RpcManager';
6
- import RendererType, { RenderProps, RenderResults } from './RendererType';
1
+ import RendererType from './RendererType';
2
+ import SerializableFilterChain from './util/serializableFilterChain';
3
+ import type { RenderProps, RenderResults } from './RendererType';
4
+ import type { AnyConfigurationModel } from '../../configuration';
5
+ import type { SerializedFilterChain } from './util/serializableFilterChain';
6
+ import type RpcManager from '../../rpc/RpcManager';
7
+ import type { ThemeOptions } from '@mui/material';
8
+ import type { SnapshotIn, SnapshotOrInstance } from 'mobx-state-tree';
7
9
  interface BaseRenderArgs extends RenderProps {
8
10
  sessionId: string;
9
- signal?: AbortSignal;
11
+ stopToken?: string;
10
12
  theme: ThemeOptions;
11
13
  exportSVG?: {
12
14
  rasterizeLayers?: boolean;
@@ -36,53 +38,11 @@ export interface ResultsSerializedSvgExport extends ResultsSerialized {
36
38
  }
37
39
  export type ResultsDeserialized = RenderResults;
38
40
  export default class ServerSideRenderer extends RendererType {
39
- /**
40
- * directly modifies the render arguments to prepare them to be serialized and
41
- * sent to the worker.
42
- *
43
- * @param args - the arguments passed to render
44
- * @returns the same object
45
- */
46
41
  serializeArgsInClient(args: RenderArgs): RenderArgsSerialized;
47
- /**
48
- * Deserialize the render results from the worker in the client. Includes
49
- * hydrating of the React HTML string, and not hydrating the result if SVG is
50
- * being rendered
51
- *
52
- * @param results - the results of the render
53
- * @param args - the arguments passed to render
54
- */
55
42
  deserializeResultsInClient(res: ResultsSerialized, args: RenderArgs): ResultsDeserialized;
56
- /**
57
- * modifies the passed arguments object to inflate arguments as necessary.
58
- * called in the worker process.
59
- *
60
- * @param args - the converted arguments to modify
61
- */
62
43
  deserializeArgsInWorker(args: RenderArgsSerialized): RenderArgsDeserialized;
63
- /**
64
- * Serialize results of the render to send them to the client. Includes
65
- * rendering React to an HTML string.
66
- *
67
- * @param results - object containing the results of calling the `render`
68
- * method
69
- * @param args - deserialized render args
70
- */
71
44
  serializeResultsInWorker(results: RenderResults, args: RenderArgsDeserialized): ResultsSerialized;
72
- /**
73
- * Render method called on the client. Serializes args, then calls
74
- * "CoreRender" with the RPC manager.
75
- *
76
- * @param rpcManager - RPC manager
77
- * @param args - render args
78
- */
79
45
  renderInClient(rpcManager: RpcManager, args: RenderArgs): Promise<ResultsSerialized>;
80
- /**
81
- * Render method called on the worker. `render` is called here in server-side
82
- * rendering
83
- *
84
- * @param args - serialized render args
85
- */
86
46
  renderInWorker(args: RenderArgsSerialized): Promise<ResultsSerialized>;
87
47
  freeResourcesInClient(rpcManager: RpcManager, args: RenderArgs): Promise<number>;
88
48
  }
@@ -5,25 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const react_1 = __importDefault(require("react"));
7
7
  const styles_1 = require("@mui/material/styles");
8
- const server_1 = require("react-dom/server");
9
8
  const mobx_state_tree_1 = require("mobx-state-tree");
10
- // locals
11
- const util_1 = require("../../util");
12
- const serializableFilterChain_1 = __importDefault(require("./util/serializableFilterChain"));
13
- const ui_1 = require("../../ui");
9
+ const server_1 = require("react-dom/server");
14
10
  const RendererType_1 = __importDefault(require("./RendererType"));
15
11
  const ServerSideRenderedContent_1 = __importDefault(require("./ServerSideRenderedContent"));
12
+ const ui_1 = require("../../ui");
13
+ const serializableFilterChain_1 = __importDefault(require("./util/serializableFilterChain"));
14
+ const util_1 = require("../../util");
15
+ const stopToken_1 = require("../../util/stopToken");
16
16
  function isSvgExport(e) {
17
17
  return 'canvasRecordedData' in e;
18
18
  }
19
19
  class ServerSideRenderer extends RendererType_1.default {
20
- /**
21
- * directly modifies the render arguments to prepare them to be serialized and
22
- * sent to the worker.
23
- *
24
- * @param args - the arguments passed to render
25
- * @returns the same object
26
- */
27
20
  serializeArgsInClient(args) {
28
21
  var _a;
29
22
  return {
@@ -34,20 +27,8 @@ class ServerSideRenderer extends RendererType_1.default {
34
27
  filters: (_a = args.filters) === null || _a === void 0 ? void 0 : _a.toJSON().filters,
35
28
  };
36
29
  }
37
- /**
38
- * Deserialize the render results from the worker in the client. Includes
39
- * hydrating of the React HTML string, and not hydrating the result if SVG is
40
- * being rendered
41
- *
42
- * @param results - the results of the render
43
- * @param args - the arguments passed to render
44
- */
45
30
  deserializeResultsInClient(res, args) {
46
- // if we are rendering svg, we skip hydration
47
31
  if (args.exportSVG) {
48
- // only return the res if the renderer explicitly has
49
- // this.supportsSVG support to avoid garbage being rendered in SVG
50
- // document
51
32
  return {
52
33
  ...res,
53
34
  html: this.supportsSVG
@@ -55,18 +36,11 @@ class ServerSideRenderer extends RendererType_1.default {
55
36
  : '<text y="12" fill="black">SVG export not supported for this track</text>',
56
37
  };
57
38
  }
58
- // get res using ServerSideRenderedContent
59
39
  return {
60
40
  ...res,
61
41
  reactElement: (react_1.default.createElement(ServerSideRenderedContent_1.default, { ...args, ...res, RenderingComponent: this.ReactComponent })),
62
42
  };
63
43
  }
64
- /**
65
- * modifies the passed arguments object to inflate arguments as necessary.
66
- * called in the worker process.
67
- *
68
- * @param args - the converted arguments to modify
69
- */
70
44
  deserializeArgsInWorker(args) {
71
45
  const deserialized = { ...args };
72
46
  deserialized.config = this.configSchema.create(args.config || {}, {
@@ -79,26 +53,11 @@ class ServerSideRenderer extends RendererType_1.default {
79
53
  : undefined;
80
54
  return deserialized;
81
55
  }
82
- /**
83
- * Serialize results of the render to send them to the client. Includes
84
- * rendering React to an HTML string.
85
- *
86
- * @param results - object containing the results of calling the `render`
87
- * method
88
- * @param args - deserialized render args
89
- */
90
56
  serializeResultsInWorker(results, args) {
91
57
  const html = (0, server_1.renderToString)(react_1.default.createElement(styles_1.ThemeProvider, { theme: (0, ui_1.createJBrowseTheme)(args.theme) }, results.reactElement));
92
58
  results.reactElement = undefined;
93
59
  return { ...results, html };
94
60
  }
95
- /**
96
- * Render method called on the client. Serializes args, then calls
97
- * "CoreRender" with the RPC manager.
98
- *
99
- * @param rpcManager - RPC manager
100
- * @param args - render args
101
- */
102
61
  async renderInClient(rpcManager, args) {
103
62
  const results = (await rpcManager.call(args.sessionId, 'CoreRender', args));
104
63
  if (isSvgExport(results)) {
@@ -107,20 +66,11 @@ class ServerSideRenderer extends RendererType_1.default {
107
66
  }
108
67
  return results;
109
68
  }
110
- /**
111
- * Render method called on the worker. `render` is called here in server-side
112
- * rendering
113
- *
114
- * @param args - serialized render args
115
- */
116
69
  async renderInWorker(args) {
117
- const { signal, statusCallback = () => { } } = args;
70
+ const { stopToken, statusCallback = () => { } } = args;
118
71
  const deserializedArgs = this.deserializeArgsInWorker(args);
119
72
  const results = await (0, util_1.updateStatus)('Rendering plot', statusCallback, () => this.render(deserializedArgs));
120
- (0, util_1.checkAbortSignal)(signal);
121
- // serialize the results for passing back to the main thread.
122
- // these will be transmitted to the main process, and will come out
123
- // as the result of renderRegionWithWorker.
73
+ (0, stopToken_1.checkStopToken)(stopToken);
124
74
  return (0, util_1.updateStatus)('Serializing results', statusCallback, () => this.serializeResultsInWorker(results, deserializedArgs));
125
75
  }
126
76
  async freeResourcesInClient(rpcManager, args) {
@@ -1,7 +1,7 @@
1
1
  export { default as BoxRendererType } from './BoxRendererType';
2
2
  export { default as ComparativeServerSideRendererType } from './ComparativeServerSideRendererType';
3
3
  export { default as CircularChordRendererType } from './CircularChordRendererType';
4
- export { default as RendererType, type RenderProps } from './RendererType';
4
+ export { type RenderProps, default as RendererType } from './RendererType';
5
5
  export { default as FeatureRendererType } from './FeatureRendererType';
6
6
  export { default as ServerSideRenderedContent } from './ServerSideRenderedContent';
7
7
  export { default as ServerSideRendererType } from './ServerSideRendererType';
@@ -16,9 +16,7 @@ class SerializableFilterChain {
16
16
  }
17
17
  passes(...args) {
18
18
  for (const entry of this.filterChain) {
19
- if (
20
- // @ts-expect-error
21
- !entry.expr.evalSync({ feature: args[0] })) {
19
+ if (!entry.expr.evalSync({ feature: args[0] })) {
22
20
  return false;
23
21
  }
24
22
  }
@@ -1,5 +1,5 @@
1
- import PluginManager from '../PluginManager';
2
- import { AnyConfigurationModel } from '../configuration';
1
+ import type PluginManager from '../PluginManager';
2
+ import type { AnyConfigurationModel } from '../configuration';
3
3
  export interface WorkerHandle {
4
4
  status?: string;
5
5
  error?: unknown;
@@ -15,7 +15,6 @@ export interface WorkerHandle {
15
15
  export interface RpcDriverConstructorArgs {
16
16
  config: AnyConfigurationModel;
17
17
  }
18
- export declare function watchWorker(worker: WorkerHandle, pingTime: number, rpcDriverClassName: string): Promise<void>;
19
18
  declare class LazyWorker {
20
19
  driver: BaseRpcDriver;
21
20
  workerP?: Promise<WorkerHandle> | undefined;
@@ -33,7 +32,7 @@ export default abstract class BaseRpcDriver {
33
32
  config: AnyConfigurationModel;
34
33
  constructor(args: RpcDriverConstructorArgs);
35
34
  filterArgs<THING_TYPE>(thing: THING_TYPE, sessionId: string): THING_TYPE;
36
- remoteAbort(sessionId: string, functionName: string, signalId: number): Promise<void>;
35
+ remoteAbort(sessionId: string, functionName: string, stopTokenId: number): Promise<void>;
37
36
  createWorkerPool(): LazyWorker[];
38
37
  getWorkerPool(): LazyWorker[];
39
38
  getWorker(sessionId: string): Promise<WorkerHandle>;
@@ -1,33 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.watchWorker = watchWorker;
4
3
  const mobx_state_tree_1 = require("mobx-state-tree");
5
- const util_1 = require("../util");
6
- const remoteAbortSignals_1 = require("./remoteAbortSignals");
7
4
  const configuration_1 = require("../configuration");
5
+ const util_1 = require("../util");
8
6
  function isCloneable(thing) {
9
7
  return !(typeof thing === 'function') && !(thing instanceof Error);
10
8
  }
11
- // watches the given worker object, returns a promise that will be rejected if
12
- // the worker times out
13
- async function watchWorker(worker, pingTime, rpcDriverClassName) {
14
- // after first ping succeeds, apply wait for timeout
15
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
16
- while (true) {
17
- await worker.call('ping', [], {
18
- timeout: pingTime * 2,
19
- rpcDriverClassName,
20
- });
21
- await new Promise(resolve => setTimeout(resolve, pingTime));
22
- }
23
- }
24
9
  function detectHardwareConcurrency() {
25
10
  const mainThread = typeof window !== 'undefined';
26
11
  const canDetect = mainThread && 'hardwareConcurrency' in window.navigator;
27
- if (mainThread && canDetect) {
28
- return window.navigator.hardwareConcurrency;
29
- }
30
- return 1;
12
+ return mainThread && canDetect ? window.navigator.hardwareConcurrency : 1;
31
13
  }
32
14
  class LazyWorker {
33
15
  constructor(driver) {
@@ -35,20 +17,7 @@ class LazyWorker {
35
17
  }
36
18
  async getWorker() {
37
19
  if (!this.workerP) {
38
- this.workerP = this.driver
39
- .makeWorker()
40
- .then(worker => {
41
- watchWorker(worker, this.driver.maxPingTime, this.driver.name).catch((error) => {
42
- console.error('worker did not respond, killing and generating new one');
43
- console.error(error);
44
- worker.destroy();
45
- worker.status = 'killed';
46
- worker.error = error;
47
- this.workerP = undefined;
48
- });
49
- return worker;
50
- })
51
- .catch((e) => {
20
+ this.workerP = this.driver.makeWorker().catch((e) => {
52
21
  this.workerP = undefined;
53
22
  throw e;
54
23
  });
@@ -59,40 +28,37 @@ class LazyWorker {
59
28
  class BaseRpcDriver {
60
29
  constructor(args) {
61
30
  this.lastWorkerAssignment = -1;
62
- this.workerAssignments = new Map(); // sessionId -> worker number
31
+ this.workerAssignments = new Map();
63
32
  this.maxPingTime = 30000;
64
33
  this.workerCheckFrequency = 5000;
65
34
  this.config = args.config;
66
35
  }
67
- // filter the given object and just remove any non-cloneable things from it
68
36
  filterArgs(thing, sessionId) {
69
37
  if (Array.isArray(thing)) {
70
38
  return thing
71
39
  .filter(thing => isCloneable(thing))
72
40
  .map(t => this.filterArgs(t, sessionId));
73
41
  }
74
- if (typeof thing === 'object' && thing !== null) {
75
- // AbortSignals are specially handled
76
- if (thing instanceof AbortSignal) {
77
- return (0, remoteAbortSignals_1.serializeAbortSignal)(thing, this.remoteAbort.bind(this, sessionId));
78
- }
42
+ else if (typeof thing === 'object' && thing !== null) {
79
43
  if ((0, mobx_state_tree_1.isStateTreeNode)(thing) && !(0, mobx_state_tree_1.isAlive)(thing)) {
80
44
  throw new Error('dead state tree node passed to RPC call');
81
45
  }
82
- // special case, don't try to iterate the file's subelements as the
83
- // object entries below would
84
- if (thing instanceof File) {
46
+ else if (thing instanceof File) {
85
47
  return thing;
86
48
  }
87
- return Object.fromEntries(Object.entries(thing)
88
- .filter(e => isCloneable(e[1]))
89
- .map(([k, v]) => [k, this.filterArgs(v, sessionId)]));
49
+ else {
50
+ return Object.fromEntries(Object.entries(thing)
51
+ .filter(e => isCloneable(e[1]))
52
+ .map(([k, v]) => [k, this.filterArgs(v, sessionId)]));
53
+ }
54
+ }
55
+ else {
56
+ return thing;
90
57
  }
91
- return thing;
92
58
  }
93
- async remoteAbort(sessionId, functionName, signalId) {
59
+ async remoteAbort(sessionId, functionName, stopTokenId) {
94
60
  const worker = await this.getWorker(sessionId);
95
- await worker.call(functionName, { signalId }, { timeout: 1000000, rpcDriverClassName: this.name });
61
+ await worker.call(functionName, { stopTokenId }, { timeout: 1000000, rpcDriverClassName: this.name });
96
62
  }
97
63
  createWorkerPool() {
98
64
  const hardwareConcurrency = detectHardwareConcurrency();
@@ -108,7 +74,7 @@ class BaseRpcDriver {
108
74
  if (!this.workerPool) {
109
75
  const res = this.createWorkerPool();
110
76
  this.workerPool = res;
111
- return res; // making this several steps makes TS happy
77
+ return res;
112
78
  }
113
79
  return this.workerPool;
114
80
  }
@@ -127,7 +93,6 @@ class BaseRpcDriver {
127
93
  if (!sessionId) {
128
94
  throw new TypeError('sessionId is required');
129
95
  }
130
- let done = false;
131
96
  const unextendedWorker = await this.getWorker(sessionId);
132
97
  const worker = pluginManager.evaluateExtensionPoint('Core-extendWorker', unextendedWorker);
133
98
  const rpcMethod = pluginManager.getRpcMethodType(functionName);
@@ -136,38 +101,13 @@ class BaseRpcDriver {
136
101
  }
137
102
  const serializedArgs = await rpcMethod.serializeArguments(args, this.name);
138
103
  const filteredAndSerializedArgs = this.filterArgs(serializedArgs, sessionId);
139
- // now actually call the worker
140
- const callP = worker
141
- .call(functionName, filteredAndSerializedArgs, {
142
- timeout: 5 * 60 * 1000, // 5 minutes
104
+ const call = await worker.call(functionName, filteredAndSerializedArgs, {
105
+ timeout: 5 * 60 * 1000,
143
106
  statusCallback: args.statusCallback,
144
107
  rpcDriverClassName: this.name,
145
108
  ...options,
146
- })
147
- .finally(() => {
148
- done = true;
149
- });
150
- // check every 5 seconds to see if the worker has been killed, and
151
- // reject the killedP promise if it has
152
- let killedCheckInterval;
153
- const killedP = new Promise((resolve, reject) => {
154
- killedCheckInterval = setInterval(() => {
155
- // must've been killed
156
- if (worker.status === 'killed') {
157
- reject(new Error(`operation timed out, worker process stopped responding, ${worker.error}`));
158
- }
159
- else if (done) {
160
- resolve(true);
161
- }
162
- }, this.workerCheckFrequency);
163
- }).finally(() => {
164
- clearInterval(killedCheckInterval);
165
109
  });
166
- // the result is a race between the actual result promise, and the "killed"
167
- // promise. the killed promise will only actually win if the worker was
168
- // killed before the call could return
169
- const resultP = Promise.race([callP, killedP]);
170
- return rpcMethod.deserializeReturn(resultP, args, this.name);
110
+ return rpcMethod.deserializeReturn(call, args, this.name);
171
111
  }
172
112
  }
173
113
  exports.default = BaseRpcDriver;
@@ -1,14 +1,10 @@
1
- import BaseRpcDriver, { RpcDriverConstructorArgs } from './BaseRpcDriver';
2
- import PluginManager from '../PluginManager';
1
+ import BaseRpcDriver from './BaseRpcDriver';
2
+ import type { RpcDriverConstructorArgs } from './BaseRpcDriver';
3
+ import type PluginManager from '../PluginManager';
3
4
  declare class DummyHandle {
4
5
  destroy(): void;
5
6
  call(_functionName: string, _filteredArgs?: Record<string, unknown>, _options?: {}): Promise<unknown>;
6
7
  }
7
- /**
8
- * Stub RPC driver class that runs RPC functions in-band in the main thread.
9
- *
10
- * @param rpcFuncs - object containing runnable rpc functions
11
- */
12
8
  export default class MainThreadRpcDriver extends BaseRpcDriver {
13
9
  name: string;
14
10
  makeWorker: () => Promise<DummyHandle>;
@@ -10,11 +10,6 @@ class DummyHandle {
10
10
  return undefined;
11
11
  }
12
12
  }
13
- /**
14
- * Stub RPC driver class that runs RPC functions in-band in the main thread.
15
- *
16
- * @param rpcFuncs - object containing runnable rpc functions
17
- */
18
13
  class MainThreadRpcDriver extends BaseRpcDriver_1.default {
19
14
  constructor(args) {
20
15
  super(args);
@@ -1,7 +1,7 @@
1
- import PluginManager from '../PluginManager';
2
- import { AnyConfigurationModel } from '../configuration';
3
- import WebWorkerRpcDriver from './WebWorkerRpcDriver';
4
1
  import MainThreadRpcDriver from './MainThreadRpcDriver';
2
+ import WebWorkerRpcDriver from './WebWorkerRpcDriver';
3
+ import type PluginManager from '../PluginManager';
4
+ import type { AnyConfigurationModel } from '../configuration';
5
5
  type DriverClass = WebWorkerRpcDriver | MainThreadRpcDriver;
6
6
  interface BackendConfigurations {
7
7
  WebWorkerRpcDriver?: Omit<ConstructorParameters<typeof WebWorkerRpcDriver>[0], 'config'>;
package/rpc/RpcManager.js CHANGED
@@ -4,10 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const configuration_1 = require("../configuration");
7
- const configSchema_1 = __importDefault(require("./configSchema"));
8
- const WebWorkerRpcDriver_1 = __importDefault(require("./WebWorkerRpcDriver"));
9
7
  const MainThreadRpcDriver_1 = __importDefault(require("./MainThreadRpcDriver"));
10
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
8
+ const WebWorkerRpcDriver_1 = __importDefault(require("./WebWorkerRpcDriver"));
9
+ const configSchema_1 = __importDefault(require("./configSchema"));
11
10
  const DriverClasses = {
12
11
  WebWorkerRpcDriver: WebWorkerRpcDriver_1.default,
13
12
  MainThreadRpcDriver: MainThreadRpcDriver_1.default,
@@ -37,7 +36,6 @@ class RpcManager {
37
36
  this.driverObjects.set(backendName, newDriver);
38
37
  return newDriver;
39
38
  }
40
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
41
39
  else if (backendName === 'WebWorkerRpcDriver') {
42
40
  const backendConfiguration = this.backendConfigurations.WebWorkerRpcDriver;
43
41
  if (!backendConfiguration) {
@@ -1,6 +1,7 @@
1
1
  import Rpc from 'librpc-web-mod';
2
- import BaseRpcDriver, { RpcDriverConstructorArgs } from './BaseRpcDriver';
3
- import { PluginDefinition } from '../PluginLoader';
2
+ import BaseRpcDriver from './BaseRpcDriver';
3
+ import type { RpcDriverConstructorArgs } from './BaseRpcDriver';
4
+ import type { PluginDefinition } from '../PluginLoader';
4
5
  interface WebWorkerRpcDriverConstructorArgs extends RpcDriverConstructorArgs {
5
6
  makeWorkerInstance: () => Worker;
6
7
  }
@@ -3,11 +3,10 @@ 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 serialize_error_1 = require("serialize-error");
7
6
  const librpc_web_mod_1 = __importDefault(require("librpc-web-mod"));
8
- // locals
9
- const nanoid_1 = require("../util/nanoid");
7
+ const serialize_error_1 = require("serialize-error");
10
8
  const BaseRpcDriver_1 = __importDefault(require("./BaseRpcDriver"));
9
+ const nanoid_1 = require("../util/nanoid");
11
10
  class WebWorkerHandle extends librpc_web_mod_1.default.Client {
12
11
  destroy() {
13
12
  this.workers[0].terminate();
@@ -32,21 +31,12 @@ class WebWorkerRpcDriver extends BaseRpcDriver_1.default {
32
31
  this.makeWorkerInstance = args.makeWorkerInstance;
33
32
  }
34
33
  async makeWorker() {
35
- // note that we are making a Rpc.Client connection with a worker pool of
36
- // one for each worker, because we want to do our own state-group-aware
37
- // load balancing rather than using librpc's builtin round-robin
38
34
  const instance = this.makeWorkerInstance();
39
- // @ts-ignore this is used to avoid warning in jbrowse-web startup
40
- // (because this file is referred to via src, declare.d.ts file is in
41
- // e.g. products/jbrowse-web)
42
35
  const worker = new WebWorkerHandle({ workers: [instance] });
43
36
  const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
44
37
  if (isSafari) {
45
- // xref https://github.com/GMOD/jbrowse-components/issues/3245
46
- // eslint-disable-next-line no-console
47
38
  console.log('console logging the webworker handle avoids the track going into an infinite loading state, this is a hacky workaround for safari', instance);
48
39
  }
49
- // send the worker its boot configuration using info from the pluginManager
50
40
  return new Promise((resolve, reject) => {
51
41
  const listener = (e) => {
52
42
  switch (e.data.message) {
@@ -66,7 +56,6 @@ class WebWorkerRpcDriver extends BaseRpcDriver_1.default {
66
56
  reject((0, serialize_error_1.deserializeError)(e.data.error));
67
57
  break;
68
58
  }
69
- // No default
70
59
  }
71
60
  };
72
61
  worker.workers[0].addEventListener('message', listener);
@@ -1,7 +1,4 @@
1
1
  declare const BaseRpcDriverConfigSchema: import("../configuration/configurationSchema").ConfigurationSchemaType<{
2
- /**
3
- * #slot
4
- */
5
2
  workerCount: {
6
3
  type: string;
7
4
  description: string;