@jbrowse/core 5.0.0-beta.7 → 5.0.0-beta.9

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 (379) hide show
  1. package/README.md +427 -130
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
  4. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
  5. package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +8 -9
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +8 -13
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +2 -1
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +3 -3
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +1 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +1 -4
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +53 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +0 -16
  19. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  20. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  21. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  22. package/esm/BaseFeatureWidget/formatDetails.js +46 -79
  23. package/esm/BaseFeatureWidget/index.d.ts +1 -0
  24. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +35 -28
  25. package/esm/BaseFeatureWidget/stateModelFactory.js +94 -102
  26. package/esm/BaseFeatureWidget/types.d.ts +3 -0
  27. package/esm/BaseFeatureWidget/util.d.ts +0 -3
  28. package/esm/BaseFeatureWidget/util.js +0 -17
  29. package/esm/PluginLoader.d.ts +14 -9
  30. package/esm/PluginLoader.js +34 -26
  31. package/esm/PluginManager.d.ts +4 -4
  32. package/esm/PluginManager.js +1 -1
  33. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  34. package/esm/ReExports/coreModules.generated.js +492 -0
  35. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  36. package/esm/ReExports/coreWorkerModules.generated.js +453 -0
  37. package/esm/ReExports/frameworkModules.d.ts +2 -0
  38. package/esm/ReExports/frameworkModules.js +67 -0
  39. package/esm/ReExports/frameworkShared.d.ts +12 -0
  40. package/esm/ReExports/frameworkShared.js +16 -0
  41. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  42. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  43. package/esm/ReExports/list.js +493 -79
  44. package/esm/ReExports/modules.d.ts +1 -1
  45. package/esm/ReExports/modules.js +10 -87
  46. package/esm/ReExports/registry.d.ts +1 -0
  47. package/esm/ReExports/registry.js +23 -5
  48. package/esm/ReExports/uiStub.d.ts +2 -1
  49. package/esm/ReExports/uiStub.js +24 -2
  50. package/esm/ReExports/workerModules.js +8 -12
  51. package/esm/TextSearch/TextSearchManager.d.ts +3 -12
  52. package/esm/TextSearch/TextSearchManager.js +22 -10
  53. package/esm/assemblyManager/assembly.d.ts +10 -14
  54. package/esm/assemblyManager/assembly.js +10 -14
  55. package/esm/assemblyManager/assemblyConfigSchema.d.ts +23 -81
  56. package/esm/assemblyManager/assemblyManager.d.ts +10 -16
  57. package/esm/assemblyManager/assemblyManager.js +7 -10
  58. package/esm/assemblyManager/loadRefNameMap.js +3 -3
  59. package/esm/configuration/configurationSchema.d.ts +75 -31
  60. package/esm/configuration/configurationSchema.js +74 -40
  61. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  62. package/esm/configuration/configurationSchemaUnion.js +59 -0
  63. package/esm/configuration/configurationSlot.d.ts +37 -12
  64. package/esm/configuration/configurationSlot.js +83 -22
  65. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  66. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  67. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  68. package/esm/configuration/getConf.d.ts +17 -9
  69. package/esm/configuration/getConf.js +52 -7
  70. package/esm/configuration/index.d.ts +11 -4
  71. package/esm/configuration/index.js +7 -4
  72. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  73. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  74. package/esm/configuration/readConfObject.d.ts +2 -22
  75. package/esm/configuration/readConfObject.js +15 -49
  76. package/esm/configuration/requirements.d.ts +37 -0
  77. package/esm/configuration/requirements.js +88 -0
  78. package/esm/configuration/schemaRegistry.d.ts +21 -1
  79. package/esm/configuration/schemaRegistry.js +11 -0
  80. package/esm/configuration/schemaTypes.d.ts +3 -0
  81. package/esm/configuration/schemaTypes.js +10 -0
  82. package/esm/configuration/slotFacade.d.ts +35 -4
  83. package/esm/configuration/slotFacade.js +96 -9
  84. package/esm/configuration/snapshotPreprocess.d.ts +27 -0
  85. package/esm/configuration/snapshotPreprocess.js +102 -0
  86. package/esm/configuration/types.d.ts +161 -22
  87. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +2 -2
  88. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +11 -2
  89. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +12 -1
  90. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +2 -3
  91. package/esm/data_adapters/BaseAdapter/featureDensity.js +2 -3
  92. package/esm/data_adapters/BaseAdapter/index.d.ts +22 -3
  93. package/esm/data_adapters/BaseAdapter/types.d.ts +3 -4
  94. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  95. package/esm/data_adapters/BaseAdapter/zoomRange.js +1 -0
  96. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +9 -11
  97. package/esm/data_adapters/getSequenceSubAdapter.d.ts +1 -3
  98. package/esm/data_adapters/getSequenceSubAdapter.js +1 -3
  99. package/esm/pluggableElementTypes/AdapterType.d.ts +7 -7
  100. package/esm/pluggableElementTypes/RpcMethodType.d.ts +1 -1
  101. package/esm/pluggableElementTypes/RpcMethodType.js +3 -8
  102. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  103. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  104. package/esm/pluggableElementTypes/index.d.ts +1 -1
  105. package/esm/pluggableElementTypes/index.js +1 -1
  106. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +17 -7
  107. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +45 -48
  108. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +40 -36
  109. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +10 -13
  110. package/esm/pluggableElementTypes/models/BaseTrackModel.js +6 -6
  111. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +37 -17
  112. package/esm/pluggableElementTypes/models/BaseViewModel.js +25 -10
  113. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  114. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +1 -1
  115. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  116. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  117. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  118. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +57 -141
  119. package/esm/pluggableElementTypes/models/baseTrackConfig.js +22 -26
  120. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +2 -2
  121. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  122. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  123. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +15 -7
  124. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +38 -29
  125. package/esm/pluggableElementTypes/models/index.d.ts +1 -2
  126. package/esm/pluggableElementTypes/models/index.js +1 -2
  127. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +3 -3
  128. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +4 -4
  129. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  130. package/esm/rpc/BaseRpcDriver.d.ts +1 -2
  131. package/esm/rpc/BaseRpcDriver.js +23 -30
  132. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  133. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  134. package/esm/rpc/RpcClient.d.ts +17 -6
  135. package/esm/rpc/RpcClient.js +42 -12
  136. package/esm/rpc/RpcManager.d.ts +8 -10
  137. package/esm/rpc/RpcManager.js +1 -1
  138. package/esm/rpc/RpcRegistry.d.ts +8 -2
  139. package/esm/rpc/RpcServer.d.ts +3 -1
  140. package/esm/rpc/RpcServer.js +19 -12
  141. package/esm/rpc/WebWorkerRpcDriver.d.ts +3 -3
  142. package/esm/rpc/WebWorkerRpcDriver.js +9 -47
  143. package/esm/rpc/byteBudget.d.ts +3 -5
  144. package/esm/rpc/byteBudget.js +4 -4
  145. package/esm/rpc/configSchema.d.ts +7 -21
  146. package/esm/rpc/coreRpcMethods.d.ts +1 -0
  147. package/esm/rpc/coreRpcMethods.js +1 -0
  148. package/esm/rpc/methods/CoreEncodeFeatures.d.ts +6 -5
  149. package/esm/rpc/methods/CoreEncodeFeatures.js +26 -31
  150. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  151. package/esm/rpc/methods/CoreGetEncodedFeature.js +31 -0
  152. package/esm/rpc/methods/CoreGetExportData.js +2 -2
  153. package/esm/rpc/methods/CoreGetFeatureDensity.js +2 -2
  154. package/esm/rpc/methods/CoreGetFeatures.js +2 -2
  155. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  156. package/esm/rpc/methods/layerFeatures.d.ts +26 -0
  157. package/esm/rpc/methods/layerFeatures.js +40 -0
  158. package/esm/svg/SvgExport.js +3 -4
  159. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  160. package/esm/svg/SvgThemeProviders.js +15 -0
  161. package/esm/svg/exportViewSvg.d.ts +32 -0
  162. package/esm/svg/exportViewSvg.js +13 -0
  163. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  164. package/esm/svg/normalizeSvgMarkup.js +99 -0
  165. package/esm/svg/serializeSvg.d.ts +7 -0
  166. package/esm/svg/serializeSvg.js +11 -0
  167. package/esm/svg/svgReady.d.ts +8 -7
  168. package/esm/svg/svgReady.js +8 -7
  169. package/esm/svg/trackNames.d.ts +5 -5
  170. package/esm/svg/trackNames.js +6 -6
  171. package/esm/svg/wrapSvgExport.js +6 -74
  172. package/esm/ui/CascadingMenu.js +83 -86
  173. package/esm/ui/ErrorMessageStackTraceDialog.js +0 -5
  174. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  175. package/esm/ui/HoverMenu.d.ts +1 -2
  176. package/esm/ui/HoverMenu.js +6 -3
  177. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  178. package/esm/ui/JexlFilterDialog.js +122 -49
  179. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  180. package/esm/ui/JexlFilterRowEditors.js +90 -0
  181. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  182. package/esm/ui/LazyBaseTooltip.js +9 -0
  183. package/esm/ui/LoadingOverlay.js +3 -1
  184. package/esm/ui/MonospaceTextField.d.ts +2 -1
  185. package/esm/ui/MonospaceTextField.js +21 -19
  186. package/esm/ui/PaletteContext.d.ts +7 -9
  187. package/esm/ui/PaletteContext.js +24 -10
  188. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  189. package/esm/ui/RefNameAutocomplete/index.js +1 -1
  190. package/esm/ui/ScrollChrome.d.ts +6 -9
  191. package/esm/ui/ScrollChrome.js +5 -6
  192. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  193. package/esm/ui/ScrollEdgeShadow.js +9 -24
  194. package/esm/ui/SettingsChangesTable.js +3 -3
  195. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  196. package/esm/ui/VerticalScrollbar.js +29 -83
  197. package/esm/ui/ViewLoadingScreen.d.ts +2 -2
  198. package/esm/ui/ViewLoadingScreen.js +3 -3
  199. package/esm/ui/colorScale.d.ts +26 -1
  200. package/esm/ui/colorScale.js +28 -5
  201. package/esm/ui/colors.d.ts +49 -1
  202. package/esm/ui/colors.js +139 -4
  203. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  204. package/esm/ui/hoverBoxStyle.js +17 -2
  205. package/esm/ui/index.d.ts +5 -3
  206. package/esm/ui/index.js +9 -7
  207. package/esm/ui/launchViewMenu.js +3 -3
  208. package/esm/ui/legendSpec.d.ts +2 -0
  209. package/esm/ui/legendSpec.js +3 -0
  210. package/esm/ui/palette.d.ts +0 -1
  211. package/esm/ui/palette.js +3 -27
  212. package/esm/ui/replaceViewAction.d.ts +1 -1
  213. package/esm/ui/replaceViewAction.js +1 -1
  214. package/esm/ui/theme.d.ts +1 -1
  215. package/esm/ui/theme.js +6 -40
  216. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  217. package/esm/ui/viewHeaderHeight.js +1 -0
  218. package/esm/util/Base1DUtils.d.ts +1 -1
  219. package/esm/util/Base1DUtils.js +2 -2
  220. package/esm/util/SvgCanvas.d.ts +15 -13
  221. package/esm/util/SvgCanvas.js +72 -53
  222. package/esm/util/aborting.d.ts +39 -0
  223. package/esm/util/aborting.js +84 -0
  224. package/esm/util/adapterMetadata.d.ts +1 -1
  225. package/esm/util/adapterMetadata.js +6 -6
  226. package/esm/util/addAndShowTrack.d.ts +1 -4
  227. package/esm/util/addRelativeUris.d.ts +10 -2
  228. package/esm/util/addRelativeUris.js +22 -7
  229. package/esm/util/addTrackFromWidget.d.ts +2 -5
  230. package/esm/util/animationAllowed.d.ts +9 -0
  231. package/esm/util/animationAllowed.js +13 -0
  232. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  233. package/esm/util/applyRowResizeWheel.js +10 -21
  234. package/esm/util/bandLayout.d.ts +4 -4
  235. package/esm/util/bandLayout.js +4 -4
  236. package/esm/util/bezierConnector.js +5 -4
  237. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  238. package/esm/util/bgzfWorkerPool.js +20 -74
  239. package/esm/util/cachedSetup.d.ts +1 -1
  240. package/esm/util/cachedSetup.js +2 -2
  241. package/esm/util/categoricalField.d.ts +37 -0
  242. package/esm/util/categoricalField.js +52 -0
  243. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  244. package/esm/util/color/cssColorsLevel4.js +1 -0
  245. package/esm/util/color/index.d.ts +5 -3
  246. package/esm/util/color/index.js +7 -4
  247. package/esm/util/colorBits.d.ts +1 -2
  248. package/esm/util/colorBits.js +17 -39
  249. package/esm/util/colorRamp.d.ts +27 -1
  250. package/esm/util/colorRamp.js +56 -2
  251. package/esm/util/colorSchemes.d.ts +9 -0
  252. package/esm/util/colorSchemes.js +7 -0
  253. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +11 -14
  254. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +14 -26
  255. package/esm/util/cssColorParse.d.ts +15 -0
  256. package/esm/util/cssColorParse.js +53 -0
  257. package/esm/util/diagonalizeRegions.d.ts +2 -3
  258. package/esm/util/diagonalizeRegions.js +7 -12
  259. package/esm/util/expandLooseSearchIndex.d.ts +7 -0
  260. package/esm/util/expandLooseSearchIndex.js +25 -0
  261. package/esm/util/featureTransforms.d.ts +30 -3
  262. package/esm/util/featureTransforms.js +233 -36
  263. package/esm/util/fetchAndMaybeUnzip.js +5 -6
  264. package/esm/util/fetchContext.d.ts +5 -6
  265. package/esm/util/fetchContext.js +1 -1
  266. package/esm/util/fetchHub.d.ts +3 -1
  267. package/esm/util/fetchHub.js +2 -2
  268. package/esm/util/fetchSeq.d.ts +2 -3
  269. package/esm/util/fetchSeq.js +2 -2
  270. package/esm/util/fieldReader.d.ts +17 -0
  271. package/esm/util/fieldReader.js +62 -0
  272. package/esm/util/groupKeys.d.ts +75 -0
  273. package/esm/util/groupKeys.js +152 -0
  274. package/esm/util/highlights.d.ts +6 -4
  275. package/esm/util/highlights.js +12 -25
  276. package/esm/util/hooks.d.ts +1 -2
  277. package/esm/util/hooks.js +1 -2
  278. package/esm/util/index.d.ts +3 -3
  279. package/esm/util/index.js +4 -3
  280. package/esm/util/indexCandidates.js +1 -1
  281. package/esm/util/installFetch.d.ts +13 -10
  282. package/esm/util/installFetch.js +11 -10
  283. package/esm/util/installPrerequisiteFetch.d.ts +5 -3
  284. package/esm/util/installPrerequisiteFetch.js +3 -4
  285. package/esm/util/io/index.js +12 -12
  286. package/esm/util/isDataCurrent.d.ts +7 -5
  287. package/esm/util/isDataCurrent.js +9 -6
  288. package/esm/util/jexl.js +24 -21
  289. package/esm/util/jexlFilterRows.d.ts +89 -0
  290. package/esm/util/jexlFilterRows.js +252 -0
  291. package/esm/util/jexlFilters.d.ts +7 -5
  292. package/esm/util/jexlStrings.d.ts +3 -4
  293. package/esm/util/jexlStrings.js +2 -3
  294. package/esm/util/legendCandidates.d.ts +31 -27
  295. package/esm/util/legendCandidates.js +79 -53
  296. package/esm/util/localStorage.js +4 -4
  297. package/esm/util/markEncoding.d.ts +32 -16
  298. package/esm/util/markEncoding.js +177 -150
  299. package/esm/util/markEncodingTypes.d.ts +137 -66
  300. package/esm/util/mstUtils.d.ts +19 -22
  301. package/esm/util/mstUtils.js +19 -22
  302. package/esm/util/numericUtils.d.ts +7 -0
  303. package/esm/util/numericUtils.js +16 -0
  304. package/esm/util/numericValue.d.ts +14 -0
  305. package/esm/util/numericValue.js +34 -0
  306. package/esm/util/openFeatureWidget.js +1 -2
  307. package/esm/util/openViews.d.ts +1 -0
  308. package/esm/util/openViews.js +3 -3
  309. package/esm/util/parseLineByLine.d.ts +3 -4
  310. package/esm/util/parseLineByLine.js +7 -13
  311. package/esm/util/progress.d.ts +21 -21
  312. package/esm/util/progress.js +27 -26
  313. package/esm/util/renameRegions.d.ts +1 -2
  314. package/esm/util/renderToStaticMarkup.js +16 -16
  315. package/esm/util/rxjs.d.ts +7 -8
  316. package/esm/util/rxjs.js +12 -15
  317. package/esm/util/simpleFeature.d.ts +0 -1
  318. package/esm/util/svgColorProps.d.ts +11 -0
  319. package/esm/util/svgColorProps.js +28 -1
  320. package/esm/util/tabix.d.ts +3 -4
  321. package/esm/util/tabix.js +6 -7
  322. package/esm/util/thresholdScale.d.ts +54 -0
  323. package/esm/util/thresholdScale.js +112 -0
  324. package/esm/util/timeGate.d.ts +4 -5
  325. package/esm/util/timeGate.js +4 -5
  326. package/esm/util/trackConfigDelta.d.ts +22 -18
  327. package/esm/util/trackConfigDelta.js +40 -38
  328. package/esm/util/tracks.d.ts +27 -4
  329. package/esm/util/tracks.js +116 -43
  330. package/esm/util/translateTranscript.d.ts +44 -0
  331. package/esm/util/translateTranscript.js +102 -0
  332. package/esm/util/types/index.d.ts +19 -7
  333. package/esm/util/types/services.d.ts +1 -1
  334. package/esm/util/unknownSnapshotKeys.d.ts +15 -0
  335. package/esm/util/unknownSnapshotKeys.js +13 -0
  336. package/esm/util/useFeatureSequence.js +4 -4
  337. package/esm/util/useFetch.d.ts +3 -4
  338. package/esm/util/useFetch.js +5 -6
  339. package/esm/util/usePanelVirtualScroll.d.ts +7 -39
  340. package/esm/util/usePanelVirtualScroll.js +9 -40
  341. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  342. package/esm/util/useRowVirtualScroll.js +8 -49
  343. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  344. package/esm/util/useVirtualScrollWheel.js +40 -84
  345. package/esm/util/viewHighlights.d.ts +3 -0
  346. package/esm/util/viewHighlights.js +5 -0
  347. package/esm/util/viewStatus.d.ts +24 -15
  348. package/esm/util/viewStatus.js +17 -0
  349. package/esm/util/withLaunchInput.d.ts +1 -1
  350. package/esm/util/withLaunchInput.js +0 -4
  351. package/package.json +26 -12
  352. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  353. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  354. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  355. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  356. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  357. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  358. package/esm/ReExports/barrelOnlyNames.d.ts +0 -5
  359. package/esm/ReExports/barrelOnlyNames.js +0 -63
  360. package/esm/ReExports/index.d.ts +0 -1
  361. package/esm/ReExports/index.js +0 -1
  362. package/esm/ReExports/publicTracks.d.ts +0 -1
  363. package/esm/ReExports/publicTracks.js +0 -14
  364. package/esm/ReExports/publicUi.d.ts +0 -4
  365. package/esm/ReExports/publicUi.js +0 -33
  366. package/esm/ReExports/publicUtil.d.ts +0 -1
  367. package/esm/ReExports/publicUtil.js +0 -32
  368. package/esm/ReExports/sharedModules.d.ts +0 -96
  369. package/esm/ReExports/sharedModules.js +0 -66
  370. package/esm/ReExports/workerNamespaceNames.d.ts +0 -11
  371. package/esm/ReExports/workerNamespaceNames.js +0 -275
  372. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  373. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  374. package/esm/ui/highlightChipReveal.d.ts +0 -32
  375. package/esm/ui/highlightChipReveal.js +0 -39
  376. package/esm/util/adapterConfigKey.d.ts +0 -12
  377. package/esm/util/adapterConfigKey.js +0 -14
  378. package/esm/util/stopToken.d.ts +0 -212
  379. package/esm/util/stopToken.js +0 -438
@@ -1,90 +1,13 @@
1
- import { alpha, createTheme, useTheme } from '@mui/material';
2
- import SvgIcon, { createSvgIcon } from '@mui/material/SvgIcon';
3
- import * as MUIUtils from '@mui/material/utils';
4
- import * as mxreact from 'mobx-react';
5
- import * as ReactDom from 'react-dom';
6
- import * as ReactDomClient from 'react-dom/client';
7
- import { cx, keyframes, makeStyles } from '../util/tss-react/index.js';
8
- import { BaseFeatureDetail } from './BaseFeatureDetails.js';
9
- import { DataGridEntries } from './MuiDataGridReExports.js';
10
- import { Entries } from './MuiReExports.js';
11
- import { MUIStyles } from './MuiStylesReExports.js';
12
- import { lazyMap } from './lazify.js';
13
- import * as coreUi from './publicUi.js';
14
- import { sharedModules } from './sharedModules.js';
15
- function makeLegacyMakeStyles() {
16
- return (args) => {
17
- const useStyles = makeStyles()(args);
18
- return () => useStyles().classes;
19
- };
20
- }
21
- const tssReact = { cx, keyframes, makeStyles };
22
- const legacyMakeStyles = makeLegacyMakeStyles();
23
- const materialUiCoreLib = {
24
- ...lazyMap(Entries),
25
- useTheme,
26
- alpha,
27
- makeStyles: legacyMakeStyles,
28
- };
29
- const muiMaterialLib = {
30
- ...lazyMap(Entries),
31
- alpha,
32
- useTheme,
33
- createTheme,
34
- };
35
- const materialUiLabLib = {
36
- Alert: Entries.Alert,
37
- Autocomplete: Entries.Autocomplete,
38
- ToggleButton: Entries.ToggleButton,
39
- ToggleButtonGroup: Entries.ToggleButtonGroup,
40
- };
41
- const muiStylesLib = { ...MUIStyles, makeStyles: legacyMakeStyles };
1
+ // The runtime plugin ABI @jbrowse/core alone can serve, on the main thread: the
2
+ // framework singletons and Material UI from frameworkModules.ts, and every
3
+ // subpath core's exports map publishes from the generated half. A product
4
+ // spreads this under the packages it bundles beyond core — see each
5
+ // product's reExports.generated.ts, and scripts/generateReExports.ts for how
6
+ // both halves and list.ts are derived.
7
+ import coreModules from './coreModules.generated.js';
8
+ import frameworkModules from './frameworkModules.js';
42
9
  const libs = {
43
- ...sharedModules,
44
- 'mobx-react': mxreact,
45
- 'react-dom': ReactDom,
46
- 'react-dom/client': ReactDomClient,
47
- // Only lazy component entries are re-exported. The grid *hooks*
48
- // (useGridApiContext/useGridApiRef/useGridRootProps) are intentionally left
49
- // out: statically importing them here pulled the entire ~1.2 MB
50
- // @mui/x-data-grid package into the eager first-paint graph, defeating the
51
- // lazy import('@mui/x-data-grid') in MuiDataGridReExports. First-party code
52
- // that needs the hooks imports them directly from '@mui/x-data-grid'.
53
- '@mui/x-data-grid': {
54
- ...lazyMap(DataGridEntries),
55
- },
56
- '@mui/material/utils': MUIUtils,
57
- '@material-ui/core/utils': MUIUtils,
58
- 'tss-react': tssReact,
59
- 'tss-react/mui': tssReact,
60
- '@material-ui/core': materialUiCoreLib,
61
- '@mui/material': muiMaterialLib,
62
- ...lazyMap(Entries, '@mui/material/'),
63
- ...lazyMap(Entries, '@material-ui/core/'),
64
- // @mui/icons-material — bundled into external plugins — reads the
65
- // `createSvgIcon` *named* export from @mui/material/SvgIcon, but lazyMap
66
- // exposes only the component (its default). SvgIcon is a primitive that's
67
- // eagerly loaded in practice, so expose it directly with createSvgIcon
68
- // attached: a default import still lands on a usable component (rollup-plugin-
69
- // external-globals substitutes the value itself, esbuild's globalExternals
70
- // reads `.default`), while the named import and icons-material's CJS
71
- // `require(...).createSvgIcon` both find the util. A shallow copy carries the
72
- // forwardRef's $$typeof/render so the shared SvgIcon export isn't mutated.
73
- // Overrides the lazy entry above; verified against both bundlers.
74
- // GMOD/jbrowse-components#5606.
75
- '@mui/material/SvgIcon': Object.assign({}, SvgIcon, { createSvgIcon }),
76
- '@mui/material/styles': muiStylesLib,
77
- '@material-ui/core/styles': muiStylesLib,
78
- // these are core in @mui/material, but used to be in @material-ui/lab
79
- '@material-ui/lab/ToggleButton': Entries.ToggleButton,
80
- '@material-ui/lab/ToggleButtonGroup': Entries.ToggleButtonGroup,
81
- '@material-ui/lab/Autocomplete': Entries.Autocomplete,
82
- '@material-ui/lab/Alert': Entries.Alert,
83
- '@material-ui/lab': materialUiLabLib,
84
- '@jbrowse/core/ui': coreUi,
85
- // the same lazy component publicUi.tsx puts on the namespace; published
86
- // react-msaview deep-imports this path, apollo reads the namespace
87
- '@jbrowse/core/ui/BaseTooltip': coreUi.BaseTooltip,
88
- '@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail': BaseFeatureDetail,
10
+ ...frameworkModules,
11
+ ...coreModules,
89
12
  };
90
13
  export default libs;
@@ -1,2 +1,3 @@
1
1
  export declare function setReExportRegistry(libs: Record<string, unknown>): void;
2
2
  export declare function getReExportRegistry(): Record<string, unknown>;
3
+ export declare function loudOnMissingModule(libs: Record<string, unknown>): Record<string, unknown>;
@@ -3,11 +3,11 @@
3
3
  * a runtime plugin.
4
4
  *
5
5
  * `ReExports/modules.ts` is the ABI external plugins link against, and it
6
- * reaches it by spreading `import * as` namespaces of `@jbrowse/core/ui`,
7
- * `configuration`, `util` and a dozen more into one object. A namespace spread
8
- * *names every export*, so nothing downstream of those barrels can be
9
- * tree-shaken — and the module also throws at top level if `libs` and `list.ts`
10
- * disagree, so it cannot be dropped either. `PluginManager` used to import it
6
+ * reaches it by spreading `import * as` namespaces of every subpath core
7
+ * publishes into one object, as each product's `reExports.generated.ts` does
8
+ * for every package it bundles. A namespace spread *names every export*, so
9
+ * nothing downstream of those modules can be tree-shaken. `PluginManager` used
10
+ * to import it
11
11
  * statically for `jbrequire`, which put the whole surface — most of
12
12
  * `@jbrowse/core/ui` and, behind it, ~400 KB of Material UI — into the eager
13
13
  * first-paint graph of **every** host, including embedded ones that load no
@@ -26,3 +26,21 @@ export function setReExportRegistry(libs) {
26
26
  export function getReExportRegistry() {
27
27
  return registry;
28
28
  }
29
+ // A bundle built against another @jbrowse/core, or against a package this host
30
+ // does not bundle, reads a key the map lacks — at module scope, so what it then
31
+ // throws is `Cannot read properties of undefined` with no module named. A
32
+ // plugin's own build tool only ever externalizes a key `ReExports/list.ts`
33
+ // names, so every scoped-or-slashed read that misses is that case, and this
34
+ // names it. Anything else missing reads `undefined` as it always did.
35
+ export function loudOnMissingModule(libs) {
36
+ return new Proxy(libs, {
37
+ get(target, key, receiver) {
38
+ if (typeof key === 'string' &&
39
+ !(key in target) &&
40
+ (key.startsWith('@') || key.includes('/'))) {
41
+ throw new Error(`This JBrowse does not serve '${key}' to plugins: the plugin was built against an older or newer @jbrowse/core, or against a package this host does not bundle`);
42
+ }
43
+ return Reflect.get(target, key, receiver);
44
+ },
45
+ });
46
+ }
@@ -1,2 +1,3 @@
1
1
  export declare const uiStub: unknown;
2
- export declare function uiNamespace(names: readonly string[]): Record<string, unknown>;
2
+ export declare function uiNamespace(names: readonly string[], esModule?: boolean): Record<string, unknown>;
3
+ export declare const REACT_INTERNAL_KEYS: Set<string>;
@@ -6,6 +6,28 @@ export const uiStub = new Proxy(function stubTarget() { }, {
6
6
  apply: () => uiStub,
7
7
  construct: () => uiStub,
8
8
  });
9
- export function uiNamespace(names) {
10
- return Object.fromEntries(names.map(name => [name, uiStub]));
9
+ // `esModule` mirrors the `__esModule` the main thread sets on a namespace that
10
+ // carries a default export beside named ones, so a bundler's interop reads the
11
+ // stub's `default` the same way in both realms.
12
+ export function uiNamespace(names, esModule = false) {
13
+ return {
14
+ ...(esModule ? { __esModule: true } : {}),
15
+ ...Object.fromEntries(names.map(name => [name, uiStub])),
16
+ };
11
17
  }
18
+ // Own keys React puts on a component object, which are not export names and
19
+ // so do not survive into a stub or the manifest.
20
+ export const REACT_INTERNAL_KEYS = new Set([
21
+ '$$typeof',
22
+ '_debugInfo',
23
+ '_init',
24
+ '_payload',
25
+ 'compare',
26
+ 'contextTypes',
27
+ 'defaultProps',
28
+ 'displayName',
29
+ 'muiName',
30
+ 'propTypes',
31
+ 'render',
32
+ 'type',
33
+ ]);
@@ -1,15 +1,11 @@
1
- import reExportsList from './list.js';
2
- import { sharedModules } from './sharedModules.js';
3
- import { uiNamespace, uiStub } from './uiStub.js';
4
- import { WORKER_NAMESPACE_NAMES } from './workerNamespaceNames.js';
5
- // Same keys as modules.ts; UI entries stubbed. agent-docs/reference/EAGER_BUNDLE.md
1
+ // Same keys as modules.ts, as the RPC worker serves them: a module a plugin
2
+ // reads only to render is a stub carrying the main thread's export names, so
3
+ // the one bundle a plugin ships evaluates in both realms without the worker
4
+ // fetching the UI graph. agent-docs/reference/EAGER_BUNDLE.md
5
+ import coreWorkerModules from './coreWorkerModules.generated.js';
6
+ import frameworkWorkerModules from './frameworkWorkerModules.generated.js';
6
7
  const libs = {
7
- ...Object.fromEntries(reExportsList.map(name => [
8
- name,
9
- name in WORKER_NAMESPACE_NAMES
10
- ? uiNamespace(WORKER_NAMESPACE_NAMES[name])
11
- : uiStub,
12
- ])),
13
- ...sharedModules,
8
+ ...frameworkWorkerModules,
9
+ ...coreWorkerModules,
14
10
  };
15
11
  export default libs;
@@ -9,18 +9,9 @@ export default class TextSearchManager {
9
9
  constructor(pluginManager: PluginManager);
10
10
  clearCache(): void;
11
11
  loadTextSearchAdapters(assemblyName: string): Promise<BaseTextSearchAdapter[]>;
12
- relevantAdapters(assemblyName: string): (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
13
- setSubschema(slotName: string, data: Record<string, unknown>): any;
14
- setSlot(slotName: string, value: unknown): void;
15
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("../configuration/types.ts").AnyConfigurationSchemaType>)[];
16
- getAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
17
- setSubschema(slotName: string, data: Record<string, unknown>): any;
18
- setSlot(slotName: string, value: unknown): void;
19
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("../configuration/types.ts").AnyConfigurationSchemaType>)[];
20
- getTrackAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
21
- setSubschema(slotName: string, data: Record<string, unknown>): any;
22
- setSlot(slotName: string, value: unknown): void;
23
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("../configuration/types.ts").AnyConfigurationSchemaType>)[];
12
+ relevantAdapters(assemblyName: string): AnyConfigurationModel[];
13
+ getAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): AnyConfigurationModel[];
14
+ getTrackAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): AnyConfigurationModel[];
24
15
  search(args: BaseTextSearchArgs, assemblyName: string): Promise<BaseResult[]>;
25
16
  sortResults({ results, args, }: {
26
17
  results: BaseResult[];
@@ -1,7 +1,7 @@
1
- import { readConfObject } from '../configuration/index.js';
1
+ import { isStateTreeNode } from '@jbrowse/mobx-state-tree';
2
+ import { hydrateTrackConfig, readConfObject } from '../configuration/index.js';
2
3
  import QuickLRU from '../util/QuickLRU/index.js';
3
- import { isAbortException } from '../util/aborting.js';
4
- import { checkStopToken } from '../util/stopToken.js';
4
+ import { checkAbortSignal, isAbortException } from '../util/aborting.js';
5
5
  import { canonicalAssemblyNames } from '../util/tracks.js';
6
6
  // A misconfigured or unreachable index (a 404 .ix, a config missing
7
7
  // ixFilePath) must not take down search as a whole: the remaining indexes, and
@@ -75,12 +75,24 @@ export default class TextSearchManager {
75
75
  }
76
76
  getTrackAdaptersWithAssembly(matches, confs) {
77
77
  return confs
78
- .filter(conf => matches(readConfObject(conf, [
79
- 'textSearching',
80
- 'textSearchAdapter',
81
- 'assemblyNames',
82
- ])))
83
- .map(conf => conf.textSearching.textSearchAdapter);
78
+ .filter(conf => {
79
+ const indexNames = readConfObject(conf, [
80
+ 'textSearching',
81
+ 'textSearchAdapter',
82
+ 'assemblyNames',
83
+ ]);
84
+ return (!!readConfObject(conf, ['textSearching', 'textSearchAdapter']) &&
85
+ matches(indexNames?.length
86
+ ? indexNames
87
+ : readConfObject(conf, 'assemblyNames')));
88
+ })
89
+ .map(conf => {
90
+ const live = isStateTreeNode(conf)
91
+ ? conf
92
+ : hydrateTrackConfig(this.pluginManager, conf);
93
+ return live?.textSearching.textSearchAdapter;
94
+ })
95
+ .filter(conf => conf !== undefined);
84
96
  }
85
97
  async search(args, assemblyName) {
86
98
  const adapters = await this.loadTextSearchAdapters(assemblyName);
@@ -91,7 +103,7 @@ export default class TextSearchManager {
91
103
  // deliberately drops a failing adapter and carries on, so an abort thrown
92
104
  // by one of them would otherwise still land here as "no results from that
93
105
  // index" and rank the rest
94
- checkStopToken(args.stopToken);
106
+ checkAbortSignal(args.signal);
95
107
  return await this.sortResults({ args, results: results.flat() });
96
108
  }
97
109
  // Ranks, never filters: the adapters have already decided what matches, and
@@ -316,21 +316,17 @@ export default function assemblyFactory(assemblyConfigType: IAnyType, pluginMana
316
316
  *
317
317
  * The load reports progress (the adapter's index download, or for an
318
318
  * in-memory adapter the whole file) through the `statusCallback` of
319
- * whichever caller started it. The others await it silently, and that is
320
- * deliberate rather than a gap worth plumbing around: the callers sharing
321
- * an entry are almost always the N displayed regions of ONE display, so
322
- * their callbacks all write into that display's aggregated status bar and
323
- * the first one is already reporting on behalf of the rest. The costs of
324
- * getting this "right" — a listener set per key, registration, and
325
- * deregistration on settle — buy visibility only for a second display on
326
- * the same file, and for a first caller torn down mid-load, which is a
327
- * no-op rather than a hazard because the callbacks are `isAlive`-guarded
328
- * at the display end.
319
+ * whichever caller started it. The other callers get no progress
320
+ * updates. The callers sharing an entry are almost always the N
321
+ * displayed regions of one display, so their callbacks all write into
322
+ * that display's aggregated status bar, where the first caller already
323
+ * reports for the rest. A listener set per key, with registration and
324
+ * deregistration on settle, would add progress only for a second display
325
+ * on the same file and for a first caller torn down mid-load. The latter
326
+ * is a no-op because the display guards its callbacks with `isAlive`.
329
327
  *
330
- * If that ever stops being enough, the fix is not a subscription list
331
- * bolted on here: it is for the assembly to hold the in-flight status as
332
- * observable state that consumers read, which is what this model is
333
- * already made of.
328
+ * If per-caller progress is ever needed, the assembly should hold the
329
+ * in-flight status as observable state that consumers read.
334
330
  */
335
331
  getRefNameMapForAdapter(adapterConf: AdapterConf, options: BaseOptions): Promise<RefNameAliases>;
336
332
  /**
@@ -569,21 +569,17 @@ export default function assemblyFactory(assemblyConfigType, pluginManager) {
569
569
  *
570
570
  * The load reports progress (the adapter's index download, or for an
571
571
  * in-memory adapter the whole file) through the `statusCallback` of
572
- * whichever caller started it. The others await it silently, and that is
573
- * deliberate rather than a gap worth plumbing around: the callers sharing
574
- * an entry are almost always the N displayed regions of ONE display, so
575
- * their callbacks all write into that display's aggregated status bar and
576
- * the first one is already reporting on behalf of the rest. The costs of
577
- * getting this "right" — a listener set per key, registration, and
578
- * deregistration on settle — buy visibility only for a second display on
579
- * the same file, and for a first caller torn down mid-load, which is a
580
- * no-op rather than a hazard because the callbacks are `isAlive`-guarded
581
- * at the display end.
572
+ * whichever caller started it. The other callers get no progress
573
+ * updates. The callers sharing an entry are almost always the N
574
+ * displayed regions of one display, so their callbacks all write into
575
+ * that display's aggregated status bar, where the first caller already
576
+ * reports for the rest. A listener set per key, with registration and
577
+ * deregistration on settle, would add progress only for a second display
578
+ * on the same file and for a first caller torn down mid-load. The latter
579
+ * is a no-op because the display guards its callbacks with `isAlive`.
582
580
  *
583
- * If that ever stops being enough, the fix is not a subscription list
584
- * bolted on here: it is for the assembly to hold the in-flight status as
585
- * observable state that consumers read, which is what this model is
586
- * already made of.
581
+ * If per-caller progress is ever needed, the assembly should hold the
582
+ * in-flight status as observable state that consumers read.
587
583
  */
588
584
  getRefNameMapForAdapter(adapterConf, options) {
589
585
  if (!options.sessionId) {
@@ -100,102 +100,44 @@ export { expandAssemblySequenceAdapter, expandAssemblyShorthand, } from './expan
100
100
  * ```
101
101
  */
102
102
  declare function assemblyConfigSchema(pluginManager: PluginManager): import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
103
- /**
104
- * #slot
105
- * aliases are "reference name aliases" e.g. aliases for hg38 might be
106
- * "GRCh38"
107
- */
108
103
  readonly aliases: {
109
- readonly type: "stringArray";
110
- readonly defaultValue: readonly [];
111
- readonly description: "Other possible names for the assembly";
104
+ type: "stringArray";
105
+ } & {
106
+ defaultValue: unknown;
112
107
  };
113
- /**
114
- * #slot
115
- * sequence refers to a reference sequence track that has an adapter
116
- * containing, importantly, a sequence adapter such as
117
- * IndexedFastaAdapter
118
- */
119
108
  readonly sequence: import("../configuration/types.ts").AnyConfigurationSchemaType;
120
- /**
121
- * #slot
122
- */
123
109
  readonly refNameColors: {
124
- readonly type: "stringArray";
125
- readonly defaultValue: readonly [];
126
- readonly description: "Define custom colors for each reference sequence. Will cycle through this list if there are not enough colors for every sequence.";
110
+ type: "stringArray";
111
+ } & {
112
+ defaultValue: unknown;
127
113
  };
128
- /**
129
- * #slot
130
- * Maps a reference sequence name to an NCBI genetic-code (translation
131
- * table) id for sequences that don't use the standard code, e.g.
132
- * `{ "chrM": 2 }` for the vertebrate mitochondrial code or
133
- * `{ "chrPltd": 11 }` for a plastid. Drives the reference sequence track's
134
- * translation rows; unlisted refNames use the standard code (1). CDS-level
135
- * translation reads the GFF `transl_table` attribute directly and ignores
136
- * this.
137
- *
138
- * #example
139
- * Mitochondrial contig translated with the vertebrate mitochondrial code
140
- * (NCBI table 2), a plastid contig with table 11; keys are matched through
141
- * refName aliasing:
142
- * ```js
143
- * { chrM: 2, chrPltd: 11 }
144
- * ```
145
- */
146
114
  readonly geneticCodes: {
147
- readonly type: "frozen";
148
- readonly defaultValue: {};
149
- readonly description: "Map of reference sequence name to NCBI genetic-code (translation table) id for sequences not using the standard code, e.g. { \"chrM\": 2 }";
115
+ type: "frozen";
116
+ } & {
117
+ defaultValue: unknown;
150
118
  };
151
- /**
152
- * #slot
153
- * Optional file (tab-separated `refName<TAB>geneticCodeId`, `#` comments
154
- * allowed) to load the same refName-to-genetic-code mapping from, instead
155
- * of inlining it — useful when a config generator emits a sidecar rather
156
- * than inlining per assembly. Entries in the inline `geneticCodes` slot
157
- * take precedence over the file.
158
- *
159
- * #example
160
- * The TSV is `refName<TAB>geneticCodeId` with optional `#` comment lines:
161
- * ```js
162
- * { uri: 'https://example.com/hg38.genetic_codes.tsv' }
163
- * ```
164
- */
165
119
  readonly geneticCodesLocation: {
166
- readonly type: "fileLocation";
167
- readonly defaultValue: {
168
- readonly uri: "";
169
- readonly locationType: "UriLocation";
170
- };
171
- readonly description: "Optional TSV file of refName<TAB>geneticCodeId, an alternative to inlining the geneticCodes map";
120
+ type: "fileLocation";
121
+ } & {
122
+ defaultValue: unknown;
172
123
  };
173
124
  readonly refNameAliases: import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
174
- /**
175
- * #slot refNameAliases.adapter
176
- * refNameAliases help resolve e.g. chr1 and 1 as the same entity the
177
- * data for refNameAliases are fetched from an adapter, that is
178
- * commonly a tsv like chromAliases.txt from UCSC or similar
179
- */
180
125
  readonly adapter: import("@jbrowse/mobx-state-tree").IAnyType;
181
- }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined>>;
126
+ }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, undefined, import("../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
182
127
  readonly cytobands: import("../configuration/configurationSchema.ts").ConfigurationSchemaType<{
183
- /**
184
- * #slot cytobands.adapter
185
- * cytoband data is fetched from an adapter, and can be displayed by
186
- * a view type as ideograms
187
- */
188
128
  readonly adapter: import("@jbrowse/mobx-state-tree").IAnyType;
189
- }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined>>;
190
- /**
191
- * #slot
192
- */
129
+ }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, undefined, import("../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
193
130
  readonly displayName: {
194
- readonly type: "string";
195
- readonly defaultValue: "";
196
- readonly description: "A human readable display name for the assembly e.g. \"Homo sapiens (hg38)\" while the assembly name may just be \"hg38\"";
131
+ type: "string";
132
+ } & {
133
+ defaultValue: string;
197
134
  };
198
- }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "name">>;
135
+ name: {
136
+ type: "string";
137
+ } & {
138
+ defaultValue: string;
139
+ };
140
+ }, import("../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, "name", undefined, import("../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>>>;
199
141
  export default assemblyConfigSchema;
200
142
  /** the assembly config schema IType (use with `getConf`, `ConfigurationReference`, etc.) */
201
143
  export type BaseAssemblyConfigSchema = ReturnType<typeof assemblyConfigSchema>;
@@ -1,12 +1,12 @@
1
1
  import type PluginManager from '../PluginManager.ts';
2
+ import type { AnyConfigurationModel } from '../configuration/index.ts';
2
3
  import type RpcManager from '../rpc/RpcManager.ts';
3
4
  import type { StatusCallback } from '../util/progress.ts';
4
- import type { StopToken } from '../util/stopToken.ts';
5
5
  import type { Assembly } from './assembly.ts';
6
6
  import type { IAnyType } from '@jbrowse/mobx-state-tree';
7
7
  type AdapterConf = Record<string, unknown>;
8
8
  export interface AssemblyBaseOpts {
9
- stopToken?: StopToken;
9
+ signal?: AbortSignal;
10
10
  sessionId: string;
11
11
  statusCallback?: StatusCallback;
12
12
  }
@@ -578,10 +578,7 @@ declare function assemblyManagerFactory(conf: IAnyType, pm: PluginManager): impo
578
578
  * combined jbrowse.assemblies, session.sessionAssemblies, and
579
579
  * session.temporaryAssemblies
580
580
  */
581
- readonly assemblyList: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
582
- setSubschema(slotName: string, data: Record<string, unknown>): any;
583
- setSlot(slotName: string, value: unknown): void;
584
- } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("../configuration/types.ts").AnyConfigurationSchemaType>)[];
581
+ readonly assemblyList: AnyConfigurationModel[];
585
582
  readonly rpcManager: RpcManager;
586
583
  } & {
587
584
  /**
@@ -753,18 +750,15 @@ declare function assemblyManagerFactory(conf: IAnyType, pm: PluginManager): impo
753
750
  * {@link waitForAssembly}, but a name that cannot be resolved is an error
754
751
  * rather than an `undefined` for the caller to interpret.
755
752
  *
756
- * For callers whose result is silently *wrong* without the assembly, not
757
- * merely absent: a refName map is the obvious one, since an empty map
758
- * means an adapter gets queried with un-renamed refNames, finds nothing,
759
- * and the track draws blank with nothing to say why. Failing here instead
760
- * puts the name in front of the user, who is the only one who can add the
753
+ * Use it where a missing assembly produces a wrong result with no error.
754
+ * A refName map is one case: an empty map means an adapter gets queried
755
+ * with un-renamed refNames, finds nothing, and the track draws blank.
756
+ * Throwing here shows the assembly name to the user, who can add the
761
757
  * assembly or fix the track.
762
758
  *
763
- * Worth using only because the wait is causal now. It used to give up
764
- * after a fixed ten seconds, where "not resolved" could equally mean "not
765
- * resolved yet" and throwing would have been a race; today it returns
766
- * only once every handler and connection that could supply the name has
767
- * finished, so there is a real answer to report.
759
+ * `waitForAssembly` returns only once every handler and connection that
760
+ * could supply the name has finished, so an unresolved name here is
761
+ * final and throwing does not race a late load.
768
762
  */
769
763
  requireAssembly(assemblyName: string): Promise<import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<{
770
764
  configuration: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IReferenceType<IAnyType>>;
@@ -343,18 +343,15 @@ function assemblyManagerFactory(conf, pm) {
343
343
  * {@link waitForAssembly}, but a name that cannot be resolved is an error
344
344
  * rather than an `undefined` for the caller to interpret.
345
345
  *
346
- * For callers whose result is silently *wrong* without the assembly, not
347
- * merely absent: a refName map is the obvious one, since an empty map
348
- * means an adapter gets queried with un-renamed refNames, finds nothing,
349
- * and the track draws blank with nothing to say why. Failing here instead
350
- * puts the name in front of the user, who is the only one who can add the
346
+ * Use it where a missing assembly produces a wrong result with no error.
347
+ * A refName map is one case: an empty map means an adapter gets queried
348
+ * with un-renamed refNames, finds nothing, and the track draws blank.
349
+ * Throwing here shows the assembly name to the user, who can add the
351
350
  * assembly or fix the track.
352
351
  *
353
- * Worth using only because the wait is causal now. It used to give up
354
- * after a fixed ten seconds, where "not resolved" could equally mean "not
355
- * resolved yet" and throwing would have been a race; today it returns
356
- * only once every handler and connection that could supply the name has
357
- * finished, so there is a real answer to report.
352
+ * `waitForAssembly` returns only once every handler and connection that
353
+ * could supply the name has finished, so an unresolved name here is
354
+ * final and throwing does not race a late load.
358
355
  */
359
356
  async requireAssembly(assemblyName) {
360
357
  const assembly = await this.waitForAssembly(assemblyName);
@@ -27,10 +27,10 @@ export async function loadRefNameMap(assembly, adapterConfig, options) {
27
27
  adapterConfig: adapterConfig,
28
28
  assemblyName: assembly.name,
29
29
  sequenceAdapter,
30
- // stopToken intentionally not passed, fixes issues like #2221.
30
+ // signal intentionally not passed, fixes issues like #2221.
31
31
  // alternative fix #2540 was proposed but non-working currently
32
- stopToken: undefined,
33
- // Forwarded rather than dropped (unlike stopToken above), because the
32
+ signal: undefined,
33
+ // Forwarded rather than dropped (unlike signal above), because the
34
34
  // adapter's index download happens here during refname mapping
35
35
  // (getRefNames -> setup) and this is the only place its "Downloading
36
36
  // index" progress can surface. For an in-memory adapter it is not an