@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.10

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 (611) hide show
  1. package/README.md +1476 -265
  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 +34 -29
  6. package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
  7. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
  8. package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +16 -9
  9. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
  10. package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
  11. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
  12. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
  13. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
  14. package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
  15. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
  16. package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
  17. package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
  18. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
  19. package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
  20. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
  21. package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
  22. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
  23. package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
  24. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
  25. package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +50 -0
  26. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
  27. package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
  28. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
  29. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
  30. package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
  31. package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
  32. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
  33. package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
  34. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  35. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  36. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  37. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  38. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  39. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  40. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  41. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  42. package/esm/BaseFeatureWidget/util.js +0 -17
  43. package/esm/CorePlugin.js +2 -2
  44. package/esm/PluginLoader.d.ts +24 -13
  45. package/esm/PluginLoader.js +167 -51
  46. package/esm/PluginManager.d.ts +130 -24
  47. package/esm/PluginManager.js +180 -32
  48. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  49. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  50. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  51. package/esm/ReExports/coreModules.generated.js +528 -0
  52. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  53. package/esm/ReExports/coreWorkerModules.generated.js +488 -0
  54. package/esm/ReExports/frameworkModules.d.ts +2 -0
  55. package/esm/ReExports/frameworkModules.js +68 -0
  56. package/esm/ReExports/frameworkShared.d.ts +12 -0
  57. package/esm/ReExports/frameworkShared.js +16 -0
  58. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  60. package/esm/ReExports/list.js +527 -79
  61. package/esm/ReExports/modules.d.ts +1 -1
  62. package/esm/ReExports/modules.js +10 -165
  63. package/esm/ReExports/registry.d.ts +1 -0
  64. package/esm/ReExports/registry.js +23 -5
  65. package/esm/ReExports/uiStub.d.ts +3 -0
  66. package/esm/ReExports/uiStub.js +33 -0
  67. package/esm/ReExports/workerModules.d.ts +2 -0
  68. package/esm/ReExports/workerModules.js +11 -0
  69. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  70. package/esm/TextSearch/TextSearchManager.js +77 -36
  71. package/esm/TextSearch/places.d.ts +12 -0
  72. package/esm/TextSearch/places.js +94 -0
  73. package/esm/assemblyManager/assembly.d.ts +21 -19
  74. package/esm/assemblyManager/assembly.js +28 -26
  75. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  76. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  77. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  78. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  79. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  80. package/esm/assemblyManager/assemblyManager.js +47 -51
  81. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  83. package/esm/assemblyManager/geneticCodes.js +2 -5
  84. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  85. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  86. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  87. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  88. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  89. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  90. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  91. package/esm/assemblyManager/refNameMapKey.js +12 -0
  92. package/esm/checkPlugins.d.ts +2 -0
  93. package/esm/checkPlugins.js +38 -17
  94. package/esm/configuration/bamIndexFields.d.ts +49 -0
  95. package/esm/configuration/bamIndexFields.js +41 -0
  96. package/esm/configuration/configurationSchema.d.ts +101 -71
  97. package/esm/configuration/configurationSchema.js +207 -134
  98. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  99. package/esm/configuration/configurationSchemaUnion.js +56 -0
  100. package/esm/configuration/configurationSlot.d.ts +150 -60
  101. package/esm/configuration/configurationSlot.js +103 -75
  102. package/esm/configuration/fillLocations.d.ts +14 -0
  103. package/esm/configuration/fillLocations.js +14 -0
  104. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  105. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  106. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  107. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  108. package/esm/configuration/fullConfSnapshot.js +30 -52
  109. package/esm/configuration/getConf.d.ts +45 -41
  110. package/esm/configuration/getConf.js +111 -44
  111. package/esm/configuration/index.d.ts +24 -11
  112. package/esm/configuration/index.js +15 -7
  113. package/esm/configuration/indexType.d.ts +26 -0
  114. package/esm/configuration/indexType.js +38 -0
  115. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  116. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  117. package/esm/configuration/readConfObject.d.ts +2 -24
  118. package/esm/configuration/readConfObject.js +20 -63
  119. package/esm/configuration/requirements.d.ts +37 -0
  120. package/esm/configuration/requirements.js +88 -0
  121. package/esm/configuration/schemaRegistry.d.ts +32 -15
  122. package/esm/configuration/schemaRegistry.js +33 -35
  123. package/esm/configuration/schemaTypes.d.ts +21 -5
  124. package/esm/configuration/schemaTypes.js +66 -55
  125. package/esm/configuration/slotFacade.d.ts +12 -29
  126. package/esm/configuration/slotFacade.js +44 -23
  127. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  128. package/esm/configuration/snapshotPreprocess.js +161 -0
  129. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  130. package/esm/configuration/tabixIndexFields.js +21 -4
  131. package/esm/configuration/tabixShorthand.d.ts +34 -17
  132. package/esm/configuration/tabixShorthand.js +49 -22
  133. package/esm/configuration/types.d.ts +182 -43
  134. package/esm/configuration/uriShorthand.d.ts +9 -0
  135. package/esm/configuration/uriShorthand.js +16 -0
  136. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  137. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  138. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  139. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  140. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  141. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  142. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  143. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  144. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  145. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  146. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  147. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  148. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  149. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  150. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  151. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  152. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  153. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  154. package/esm/data_adapters/dataAdapterCache.js +44 -10
  155. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  156. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  157. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  158. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  159. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  160. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  161. package/esm/pluggableElementTypes/DisplayType.d.ts +46 -16
  162. package/esm/pluggableElementTypes/DisplayType.js +22 -12
  163. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  164. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  165. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  166. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  167. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  168. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  169. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  170. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  171. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  172. package/esm/pluggableElementTypes/ViewType.js +32 -4
  173. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  174. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  175. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  176. package/esm/pluggableElementTypes/index.d.ts +2 -1
  177. package/esm/pluggableElementTypes/index.js +1 -1
  178. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  179. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +65 -27
  180. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +72 -10
  181. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  182. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  183. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +85 -16
  184. package/esm/pluggableElementTypes/models/BaseViewModel.js +53 -10
  185. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  186. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  187. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  188. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  189. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  190. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  191. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  192. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  193. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  194. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  195. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  196. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  197. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  198. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  199. package/esm/pluggableElementTypes/models/index.js +2 -3
  200. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  201. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  202. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  203. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  204. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  205. package/esm/pluginDefinitions.d.ts +34 -7
  206. package/esm/pluginDefinitions.js +54 -20
  207. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  208. package/esm/rpc/BaseRpcDriver.js +25 -30
  209. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  210. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  211. package/esm/rpc/RpcClient.d.ts +18 -6
  212. package/esm/rpc/RpcClient.js +51 -16
  213. package/esm/rpc/RpcManager.d.ts +14 -10
  214. package/esm/rpc/RpcManager.js +11 -1
  215. package/esm/rpc/RpcRegistry.d.ts +40 -7
  216. package/esm/rpc/RpcServer.d.ts +3 -1
  217. package/esm/rpc/RpcServer.js +19 -12
  218. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  219. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  220. package/esm/rpc/byteBudget.d.ts +20 -5
  221. package/esm/rpc/byteBudget.js +16 -5
  222. package/esm/rpc/configSchema.d.ts +7 -21
  223. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  224. package/esm/rpc/coreRpcMethods.js +4 -0
  225. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  226. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  227. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  228. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  229. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  230. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  231. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  232. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  233. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  234. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  235. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  236. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  237. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  238. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  239. package/esm/rpc/methods/layerFeatures.js +29 -0
  240. package/esm/svg/SvgExport.js +6 -7
  241. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  242. package/esm/svg/SvgThemeProviders.js +15 -0
  243. package/esm/svg/exportViewSvg.d.ts +28 -0
  244. package/esm/svg/exportViewSvg.js +13 -0
  245. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  246. package/esm/svg/normalizeSvgMarkup.js +99 -0
  247. package/esm/svg/serializeSvg.d.ts +7 -0
  248. package/esm/svg/serializeSvg.js +11 -0
  249. package/esm/svg/svgId.d.ts +1 -1
  250. package/esm/svg/svgId.js +1 -1
  251. package/esm/svg/svgReady.d.ts +9 -7
  252. package/esm/svg/svgReady.js +8 -7
  253. package/esm/svg/trackNames.d.ts +7 -5
  254. package/esm/svg/trackNames.js +12 -9
  255. package/esm/svg/wrapSvgExport.js +6 -74
  256. package/esm/ui/AddCustomPluginDialog.js +3 -8
  257. package/esm/ui/AppReadyMarker.d.ts +45 -0
  258. package/esm/ui/AppReadyMarker.js +89 -0
  259. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  260. package/esm/ui/CascadingMenu.js +181 -104
  261. package/esm/ui/DropDownMenu.js +2 -1
  262. package/esm/ui/ErrorBanner.js +1 -1
  263. package/esm/ui/ErrorBoundary.d.ts +2 -2
  264. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  265. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  266. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  267. package/esm/ui/FileDropZone.js +2 -1
  268. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  269. package/esm/ui/HoverMenu.d.ts +1 -2
  270. package/esm/ui/HoverMenu.js +6 -3
  271. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  272. package/esm/ui/JexlFilterDialog.js +122 -49
  273. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  274. package/esm/ui/JexlFilterRowEditors.js +90 -0
  275. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  276. package/esm/ui/LazyBaseTooltip.js +9 -0
  277. package/esm/ui/LegendSwatchGlyph.js +26 -21
  278. package/esm/ui/LoadingOverlay.d.ts +14 -0
  279. package/esm/ui/LoadingOverlay.js +4 -2
  280. package/esm/ui/MenuTypes.d.ts +23 -53
  281. package/esm/ui/MenuTypes.js +3 -0
  282. package/esm/ui/MonospaceTextField.d.ts +2 -1
  283. package/esm/ui/MonospaceTextField.js +23 -20
  284. package/esm/ui/PaletteContext.d.ts +10 -5
  285. package/esm/ui/PaletteContext.js +44 -6
  286. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  287. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  288. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  289. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  290. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  291. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  292. package/esm/ui/ResizeHandle.d.ts +3 -1
  293. package/esm/ui/ResizeHandle.js +44 -11
  294. package/esm/ui/ScrollChrome.d.ts +13 -0
  295. package/esm/ui/ScrollChrome.js +11 -0
  296. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  297. package/esm/ui/ScrollEdgeShadow.js +14 -35
  298. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  299. package/esm/ui/ScrollZoomToggle.js +34 -51
  300. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  301. package/esm/ui/SessionJsonPanel.js +14 -0
  302. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  303. package/esm/ui/SettingsChangesTable.js +49 -11
  304. package/esm/ui/ShareLinkField.d.ts +1 -3
  305. package/esm/ui/ShareLinkField.js +13 -40
  306. package/esm/ui/SizeSliderRow.d.ts +1 -3
  307. package/esm/ui/SizeSliderRow.js +4 -6
  308. package/esm/ui/SnackbarModel.js +79 -67
  309. package/esm/ui/StatusProgressBar.js +2 -2
  310. package/esm/ui/SvgColorLegend.d.ts +9 -4
  311. package/esm/ui/SvgColorLegend.js +82 -41
  312. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  313. package/esm/ui/VerticalScrollbar.js +29 -83
  314. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  315. package/esm/ui/ViewLoadingScreen.js +8 -32
  316. package/esm/ui/colorScale.d.ts +92 -0
  317. package/esm/ui/colorScale.js +72 -0
  318. package/esm/ui/colors.d.ts +64 -0
  319. package/esm/ui/colors.js +230 -1
  320. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  321. package/esm/ui/hoverBoxStyle.js +17 -2
  322. package/esm/ui/index.d.ts +12 -12
  323. package/esm/ui/index.js +14 -22
  324. package/esm/ui/launchViewMenu.js +15 -5
  325. package/esm/ui/legendMenuItem.d.ts +10 -32
  326. package/esm/ui/legendMenuItem.js +9 -36
  327. package/esm/ui/legendSpec.d.ts +15 -8
  328. package/esm/ui/legendSpec.js +14 -23
  329. package/esm/ui/makeSizeMenu.d.ts +0 -6
  330. package/esm/ui/makeSizeMenu.js +6 -30
  331. package/esm/ui/measureLegendText.js +1 -1
  332. package/esm/ui/menuItemAdornment.d.ts +9 -20
  333. package/esm/ui/menuItemAdornment.js +10 -32
  334. package/esm/ui/menuItems.d.ts +2 -7
  335. package/esm/ui/menuItems.js +1 -6
  336. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  337. package/esm/ui/palette.d.ts +118 -116
  338. package/esm/ui/palette.js +114 -75
  339. package/esm/ui/replaceViewAction.d.ts +1 -1
  340. package/esm/ui/replaceViewAction.js +1 -1
  341. package/esm/ui/theme.d.ts +43 -119
  342. package/esm/ui/theme.js +62 -78
  343. package/esm/ui/toggleMenuItems.d.ts +1 -3
  344. package/esm/ui/toggleMenuItems.js +6 -5
  345. package/esm/ui/useAssemblySelection.d.ts +4 -4
  346. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  347. package/esm/ui/viewHeaderHeight.js +1 -0
  348. package/esm/util/Base1DUtils.d.ts +5 -3
  349. package/esm/util/Base1DUtils.js +14 -6
  350. package/esm/util/Base1DViewModel.d.ts +2 -1
  351. package/esm/util/Base1DViewModel.js +3 -2
  352. package/esm/util/SvgCanvas.d.ts +15 -13
  353. package/esm/util/SvgCanvas.js +76 -56
  354. package/esm/util/aborting.d.ts +39 -0
  355. package/esm/util/aborting.js +88 -6
  356. package/esm/util/adapterMetadata.d.ts +1 -1
  357. package/esm/util/adapterMetadata.js +6 -5
  358. package/esm/util/addAndShowTrack.d.ts +2 -5
  359. package/esm/util/addAndShowTrack.js +5 -1
  360. package/esm/util/addRelativeUris.d.ts +17 -5
  361. package/esm/util/addRelativeUris.js +46 -10
  362. package/esm/util/addTrackFromWidget.d.ts +2 -5
  363. package/esm/util/addTrackFromWidget.js +5 -4
  364. package/esm/util/aggregateFieldName.d.ts +10 -0
  365. package/esm/util/aggregateFieldName.js +8 -0
  366. package/esm/util/analytics.js +46 -13
  367. package/esm/util/animationAllowed.d.ts +9 -0
  368. package/esm/util/animationAllowed.js +13 -0
  369. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  370. package/esm/util/applyRowResizeWheel.js +10 -21
  371. package/esm/util/bandHeight.d.ts +10 -0
  372. package/esm/util/bandHeight.js +29 -0
  373. package/esm/util/bandLayout.d.ts +4 -4
  374. package/esm/util/bandLayout.js +4 -4
  375. package/esm/util/bezierConnector.d.ts +4 -3
  376. package/esm/util/bezierConnector.js +38 -45
  377. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  378. package/esm/util/bgzfWorkerPool.js +20 -74
  379. package/esm/util/binnedAggregate.d.ts +17 -0
  380. package/esm/util/binnedAggregate.js +275 -0
  381. package/esm/util/cacheBudgets.d.ts +22 -19
  382. package/esm/util/cacheBudgets.js +22 -19
  383. package/esm/util/cachedSetup.d.ts +1 -1
  384. package/esm/util/cachedSetup.js +2 -2
  385. package/esm/util/categoricalField.d.ts +56 -0
  386. package/esm/util/categoricalField.js +73 -0
  387. package/esm/util/clampToContig.d.ts +17 -0
  388. package/esm/util/clampToContig.js +19 -0
  389. package/esm/util/coarseStripHTML.js +1 -2
  390. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  391. package/esm/util/color/cssColorsLevel4.js +1 -0
  392. package/esm/util/color/index.d.ts +5 -3
  393. package/esm/util/color/index.js +7 -4
  394. package/esm/util/colorBits.d.ts +3 -3
  395. package/esm/util/colorBits.js +19 -44
  396. package/esm/util/colorRamp.d.ts +49 -5
  397. package/esm/util/colorRamp.js +169 -18
  398. package/esm/util/colorScale.d.ts +156 -0
  399. package/esm/util/colorScale.js +243 -0
  400. package/esm/util/colorSchemes.d.ts +21 -0
  401. package/esm/util/colorSchemes.js +30 -0
  402. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  403. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  404. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  405. package/esm/util/cssColorParse.d.ts +15 -0
  406. package/esm/util/cssColorParse.js +53 -0
  407. package/esm/util/diagonalizeRegions.d.ts +2 -3
  408. package/esm/util/diagonalizeRegions.js +8 -13
  409. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  410. package/esm/util/expandLooseSearchIndex.js +29 -0
  411. package/esm/util/featureTable.d.ts +224 -0
  412. package/esm/util/featureTable.js +366 -0
  413. package/esm/util/featureTransforms.d.ts +80 -0
  414. package/esm/util/featureTransforms.js +1579 -0
  415. package/esm/util/featureTypes.d.ts +24 -0
  416. package/esm/util/featureTypes.js +35 -0
  417. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  418. package/esm/util/fetchContext.d.ts +7 -8
  419. package/esm/util/fetchContext.js +3 -3
  420. package/esm/util/fetchHub.d.ts +4 -2
  421. package/esm/util/fetchHub.js +2 -2
  422. package/esm/util/fetchPhases.d.ts +10 -10
  423. package/esm/util/fetchSeq.d.ts +2 -3
  424. package/esm/util/fetchSeq.js +2 -2
  425. package/esm/util/fieldReader.d.ts +17 -0
  426. package/esm/util/fieldReader.js +62 -0
  427. package/esm/util/freezeDeep.d.ts +8 -10
  428. package/esm/util/freezeDeep.js +8 -10
  429. package/esm/util/groupKeys.d.ts +77 -0
  430. package/esm/util/groupKeys.js +155 -0
  431. package/esm/util/highlights.d.ts +10 -6
  432. package/esm/util/highlights.js +12 -25
  433. package/esm/util/hooks.d.ts +31 -2
  434. package/esm/util/hooks.js +72 -3
  435. package/esm/util/index.d.ts +11 -11
  436. package/esm/util/index.js +11 -10
  437. package/esm/util/indexCandidates.d.ts +1 -31
  438. package/esm/util/indexCandidates.js +5 -63
  439. package/esm/util/installFetch.d.ts +77 -37
  440. package/esm/util/installFetch.js +65 -38
  441. package/esm/util/installInitAutorun.d.ts +14 -13
  442. package/esm/util/installInitAutorun.js +17 -17
  443. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  444. package/esm/util/installPrerequisiteFetch.js +111 -0
  445. package/esm/util/io/index.js +19 -14
  446. package/esm/util/isDataCurrent.d.ts +7 -5
  447. package/esm/util/isDataCurrent.js +9 -6
  448. package/esm/util/isTextEntryFocused.d.ts +7 -0
  449. package/esm/util/isTextEntryFocused.js +16 -0
  450. package/esm/util/jexl.js +24 -21
  451. package/esm/util/jexlFilterRows.d.ts +89 -0
  452. package/esm/util/jexlFilterRows.js +252 -0
  453. package/esm/util/jexlFilters.d.ts +20 -27
  454. package/esm/util/jexlFilters.js +23 -11
  455. package/esm/util/jexlStrings.d.ts +3 -4
  456. package/esm/util/jexlStrings.js +2 -3
  457. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  458. package/esm/util/layouts/GranularRectLayout.js +25 -8
  459. package/esm/util/lazyAfterAttach.d.ts +13 -0
  460. package/esm/util/lazyAfterAttach.js +31 -0
  461. package/esm/util/lazyWithPreload.d.ts +19 -0
  462. package/esm/util/lazyWithPreload.js +27 -0
  463. package/esm/util/legendCandidates.d.ts +72 -0
  464. package/esm/util/legendCandidates.js +138 -0
  465. package/esm/util/localStorage.js +4 -4
  466. package/esm/util/markEncoding.d.ts +150 -0
  467. package/esm/util/markEncoding.js +845 -0
  468. package/esm/util/markEncodingTypes.d.ts +588 -0
  469. package/esm/util/markEncodingTypes.js +8 -0
  470. package/esm/util/mst-reflection.d.ts +2 -20
  471. package/esm/util/mst-reflection.js +3 -53
  472. package/esm/util/mstUtils.d.ts +31 -23
  473. package/esm/util/mstUtils.js +39 -24
  474. package/esm/util/numericUtils.d.ts +7 -0
  475. package/esm/util/numericUtils.js +16 -0
  476. package/esm/util/numericValue.d.ts +14 -0
  477. package/esm/util/numericValue.js +34 -0
  478. package/esm/util/openFeatureWidget.d.ts +5 -0
  479. package/esm/util/openFeatureWidget.js +2 -2
  480. package/esm/util/openViews.d.ts +17 -0
  481. package/esm/util/openViews.js +22 -0
  482. package/esm/util/parentWalk.d.ts +1 -1
  483. package/esm/util/parentWalk.js +1 -1
  484. package/esm/util/parseLineByLine.d.ts +4 -5
  485. package/esm/util/parseLineByLine.js +8 -14
  486. package/esm/util/pluginStore.d.ts +6 -8
  487. package/esm/util/pluginStore.js +17 -16
  488. package/esm/util/preloadComponent.d.ts +5 -0
  489. package/esm/util/preloadComponent.js +11 -0
  490. package/esm/util/progress.d.ts +22 -22
  491. package/esm/util/progress.js +27 -26
  492. package/esm/util/quantileExtent.d.ts +49 -0
  493. package/esm/util/quantileExtent.js +162 -0
  494. package/esm/util/range.d.ts +13 -9
  495. package/esm/util/range.js +17 -8
  496. package/esm/util/renameRegions.d.ts +26 -6
  497. package/esm/util/renameRegions.js +68 -54
  498. package/esm/util/renderToStaticMarkup.js +24 -14
  499. package/esm/util/rxjs.d.ts +23 -8
  500. package/esm/util/rxjs.js +61 -15
  501. package/esm/util/samplesTsv.d.ts +49 -0
  502. package/esm/util/samplesTsv.js +86 -0
  503. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  504. package/esm/util/scheduleDetachedDestroy.js +24 -0
  505. package/esm/util/scrollLatch.d.ts +1 -0
  506. package/esm/util/scrollLatch.js +8 -0
  507. package/esm/util/selectEncodedFeature.d.ts +16 -0
  508. package/esm/util/selectEncodedFeature.js +34 -0
  509. package/esm/util/sessionSharing.d.ts +7 -5
  510. package/esm/util/sessionSharing.js +23 -23
  511. package/esm/util/shapeNameList.d.ts +2 -0
  512. package/esm/util/shapeNameList.js +6 -0
  513. package/esm/util/shapeNames.d.ts +7 -0
  514. package/esm/util/shapeNames.js +11 -0
  515. package/esm/util/simpleFeature.d.ts +0 -1
  516. package/esm/util/starFusion.d.ts +26 -0
  517. package/esm/util/starFusion.js +37 -0
  518. package/esm/util/stepTables.d.ts +82 -0
  519. package/esm/util/stepTables.js +243 -0
  520. package/esm/util/svAlt.d.ts +145 -0
  521. package/esm/util/svAlt.js +364 -0
  522. package/esm/util/svgColorProps.d.ts +11 -0
  523. package/esm/util/svgColorProps.js +28 -1
  524. package/esm/util/systemColorScheme.d.ts +12 -0
  525. package/esm/util/systemColorScheme.js +27 -0
  526. package/esm/util/tabix.d.ts +13 -8
  527. package/esm/util/tabix.js +17 -12
  528. package/esm/util/thresholdScale.d.ts +91 -0
  529. package/esm/util/thresholdScale.js +166 -0
  530. package/esm/util/timeGate.d.ts +4 -5
  531. package/esm/util/timeGate.js +4 -5
  532. package/esm/util/trackConfigDelta.d.ts +26 -26
  533. package/esm/util/trackConfigDelta.js +63 -47
  534. package/esm/util/tracks.d.ts +121 -40
  535. package/esm/util/tracks.js +497 -112
  536. package/esm/util/translateTranscript.d.ts +44 -0
  537. package/esm/util/translateTranscript.js +102 -0
  538. package/esm/util/types/data.d.ts +0 -2
  539. package/esm/util/types/index.d.ts +121 -22
  540. package/esm/util/types/index.js +9 -0
  541. package/esm/util/types/mst.d.ts +3 -0
  542. package/esm/util/types/mst.js +4 -0
  543. package/esm/util/types/renameIds.d.ts +1 -0
  544. package/esm/util/types/renameIds.js +29 -0
  545. package/esm/util/types/services.d.ts +1 -1
  546. package/esm/util/unknownSnapshotKeys.d.ts +51 -0
  547. package/esm/util/unknownSnapshotKeys.js +82 -0
  548. package/esm/util/useFeatureSequence.js +5 -5
  549. package/esm/util/useFetch.d.ts +3 -4
  550. package/esm/util/useFetch.js +19 -10
  551. package/esm/util/useFetchPlugins.d.ts +6 -2
  552. package/esm/util/useFetchPlugins.js +7 -3
  553. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  554. package/esm/util/usePanelVirtualScroll.js +9 -36
  555. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  556. package/esm/util/useRowVirtualScroll.js +8 -49
  557. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  558. package/esm/util/useVirtualScrollWheel.js +40 -74
  559. package/esm/util/viewHighlights.d.ts +3 -0
  560. package/esm/util/viewHighlights.js +5 -0
  561. package/esm/util/viewStatus.d.ts +47 -15
  562. package/esm/util/viewStatus.js +34 -0
  563. package/esm/util/wheelZoom.d.ts +7 -1
  564. package/esm/util/wheelZoom.js +85 -19
  565. package/esm/util/whenViewSettled.d.ts +55 -8
  566. package/esm/util/whenViewSettled.js +56 -7
  567. package/esm/util/withLaunchInput.d.ts +174 -0
  568. package/esm/util/withLaunchInput.js +274 -0
  569. package/package.json +70 -20
  570. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  571. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  572. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  573. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  574. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  575. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  576. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  577. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  578. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  579. package/esm/ReExports/index.d.ts +0 -1
  580. package/esm/ReExports/index.js +0 -1
  581. package/esm/ReExports/publicUtil.d.ts +0 -1
  582. package/esm/ReExports/publicUtil.js +0 -28
  583. package/esm/configuration/promotableDefaults.d.ts +0 -199
  584. package/esm/configuration/promotableDefaults.js +0 -326
  585. package/esm/configuration/promotablePin.d.ts +0 -55
  586. package/esm/configuration/promotablePin.js +0 -1
  587. package/esm/configuration/promotableResolve.d.ts +0 -108
  588. package/esm/configuration/promotableResolve.js +0 -117
  589. package/esm/configuration/promotableSlots.d.ts +0 -12
  590. package/esm/configuration/promotableSlots.js +0 -45
  591. package/esm/configuration/slotShape.d.ts +0 -12
  592. package/esm/configuration/slotShape.js +0 -84
  593. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  594. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  595. package/esm/ui/PinAdornment.d.ts +0 -5
  596. package/esm/ui/PinAdornment.js +0 -79
  597. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  598. package/esm/ui/SvgGradientLegend.js +0 -26
  599. package/esm/ui/highlightChipReveal.d.ts +0 -32
  600. package/esm/ui/highlightChipReveal.js +0 -39
  601. package/esm/ui/promotableMenuItems.d.ts +0 -19
  602. package/esm/ui/promotableMenuItems.js +0 -89
  603. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  604. package/esm/ui/promotablePinCoverage.js +0 -87
  605. package/esm/util/applyInitSettings.d.ts +0 -79
  606. package/esm/util/applyInitSettings.js +0 -91
  607. package/esm/util/openDisplays.d.ts +0 -23
  608. package/esm/util/openDisplays.js +0 -79
  609. package/esm/util/stopToken.d.ts +0 -211
  610. package/esm/util/stopToken.js +0 -438
  611. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -3,6 +3,25 @@ export function adapterConfigCacheKey(conf = {}) {
3
3
  const { adapterId } = conf;
4
4
  return typeof adapterId === 'string' && adapterId ? adapterId : idMaker(conf);
5
5
  }
6
+ /**
7
+ * #api
8
+ * The `adapterCapabilities` entry of an adapter that reads the reference
9
+ * sequence of the assembly it is displayed against: BAM and SAM for mismatches
10
+ * without an MD tag, CRAM to rebuild bases, GC content and the reference scans
11
+ * for everything they answer. Such an adapter is built with that reference and
12
+ * keyed on it as well as on its config, so one config shown on two genomes is
13
+ * two instances, each reading its own, and an instance never changes reference
14
+ * for its life. Every other adapter keys on its config alone: a synteny adapter
15
+ * is fetched from each of its assemblies and reads no reference.
16
+ */
17
+ export const READS_REFERENCE = 'readsReference';
18
+ function readsReference(pluginManager, adapterConfig) {
19
+ const type = adapterConfig?.type;
20
+ return (typeof type === 'string' &&
21
+ pluginManager
22
+ .getAdapterType(type)
23
+ .adapterCapabilities.includes(READS_REFERENCE));
24
+ }
6
25
  // Pruned by storeWithEvict (rejections) and by freeAdapterResources, which the
7
26
  // CoreFreeResources RPC reaches when the last track holding an adapter config is
8
27
  // closed (releaseAdapterSession). There is still no size bound: an adapter
@@ -16,7 +35,7 @@ function storeWithEvict(key, p) {
16
35
  adapterCache[key] = p;
17
36
  return p;
18
37
  }
19
- async function getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot) {
38
+ async function getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot, keyedSequence) {
20
39
  const adapterType = adapterConfigSnapshot?.type;
21
40
  if (!adapterType) {
22
41
  throw new Error(`could not determine adapter type from adapter config snapshot ${JSON.stringify(adapterConfigSnapshot)}`);
@@ -25,23 +44,38 @@ async function getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot) {
25
44
  // instantiate the data adapter's config schema so it gets its defaults,
26
45
  // callbacks, etc
27
46
  const adapterConfig = dataAdapterType.configSchema.create(adapterConfigSnapshot, { pluginManager });
28
- const getSubAdapter = conf => getAdapter(pluginManager, sessionId, conf);
47
+ // a sub-adapter reads the reference its parent was built with
48
+ const getSubAdapter = conf => getAdapter(pluginManager, sessionId, conf, keyedSequence);
29
49
  const CLASS = await dataAdapterType.getAdapterClass();
30
- const dataAdapter = new CLASS(adapterConfig, getSubAdapter, pluginManager);
50
+ const dataAdapter = new CLASS(adapterConfig, getSubAdapter, pluginManager, keyedSequence);
31
51
  return {
32
52
  dataAdapter,
33
53
  sessionIds: new Set([sessionId]),
34
54
  };
35
55
  }
36
- /** look up the cached entry for a config, creating and storing it if absent */
37
- function getOrCreateEntry(pluginManager, sessionId, adapterConfigSnapshot) {
38
- const cacheKey = adapterConfigCacheKey(adapterConfigSnapshot);
56
+ /**
57
+ * look up the cached entry for a config, creating and storing it if absent.
58
+ * Keyed synchronously, so concurrent callers share one pending entry
59
+ */
60
+ function getOrCreateEntry(pluginManager, sessionId, adapterConfigSnapshot, sequenceAdapter) {
61
+ const keyedSequence = sequenceAdapter && readsReference(pluginManager, adapterConfigSnapshot)
62
+ ? sequenceAdapter
63
+ : undefined;
64
+ const configKey = adapterConfigCacheKey(adapterConfigSnapshot);
65
+ const cacheKey = keyedSequence
66
+ ? `${configKey}|${adapterConfigCacheKey(keyedSequence)}`
67
+ : configKey;
39
68
  return (adapterCache[cacheKey] ??
40
- storeWithEvict(cacheKey, getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot)));
69
+ storeWithEvict(cacheKey, getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot, keyedSequence)));
41
70
  }
42
- /** instantiate a data adapter, or return a cached one with the same config */
43
- export async function getAdapter(pluginManager, sessionId, adapterConfigSnapshot) {
44
- const ret = await getOrCreateEntry(pluginManager, sessionId, adapterConfigSnapshot);
71
+ /**
72
+ * instantiate a data adapter, or return a cached one with the same config.
73
+ * `sequenceAdapter` is the reference of the genome the request names; a
74
+ * {@link READS_REFERENCE} type is keyed on it and built with it, any other
75
+ * type ignores it
76
+ */
77
+ export async function getAdapter(pluginManager, sessionId, adapterConfigSnapshot, sequenceAdapter) {
78
+ const ret = await getOrCreateEntry(pluginManager, sessionId, adapterConfigSnapshot, sequenceAdapter);
45
79
  ret.sessionIds.add(sessionId);
46
80
  return ret;
47
81
  }
@@ -7,10 +7,12 @@ export interface GetFeatureAdapterArgs {
7
7
  sequenceAdapter?: Record<string, unknown>;
8
8
  }
9
9
  /**
10
- * Resolve a feature data adapter and prime its reference-sequence adapter
11
- * config in one step — the single resolution path for every RPC that reads
12
- * features. Returns undefined when the config resolves to a non-feature
13
- * adapter, so callers that can degrade (e.g. getRefNames → []) decide how; use
10
+ * Resolve a feature data adapter — the single resolution path for every RPC
11
+ * that reads features. An RPC passes its whole args (`{ ...args, pluginManager
12
+ * }`) so the `sequenceAdapter` serialization attached reaches the cache without
13
+ * being named, and a reference-reading type comes back built for that genome.
14
+ * Returns undefined when the config resolves to a non-feature adapter, so
15
+ * callers that can degrade (e.g. getRefNames → []) decide how; use
14
16
  * {@link getFeatureAdapterOrThrow} when a feature adapter is required.
15
17
  */
16
18
  export declare function getFeatureAdapter({ pluginManager, sessionId, adapterConfig, sequenceAdapter, }: GetFeatureAdapterArgs): Promise<BaseFeatureDataAdapter | undefined>;
@@ -1,17 +1,17 @@
1
1
  import { isFeatureAdapter } from './BaseAdapter/index.js';
2
2
  import { getAdapter } from './dataAdapterCache.js';
3
3
  /**
4
- * Resolve a feature data adapter and prime its reference-sequence adapter
5
- * config in one step — the single resolution path for every RPC that reads
6
- * features. Returns undefined when the config resolves to a non-feature
7
- * adapter, so callers that can degrade (e.g. getRefNames → []) decide how; use
4
+ * Resolve a feature data adapter — the single resolution path for every RPC
5
+ * that reads features. An RPC passes its whole args (`{ ...args, pluginManager
6
+ * }`) so the `sequenceAdapter` serialization attached reaches the cache without
7
+ * being named, and a reference-reading type comes back built for that genome.
8
+ * Returns undefined when the config resolves to a non-feature adapter, so
9
+ * callers that can degrade (e.g. getRefNames → []) decide how; use
8
10
  * {@link getFeatureAdapterOrThrow} when a feature adapter is required.
9
11
  */
10
12
  export async function getFeatureAdapter({ pluginManager, sessionId, adapterConfig, sequenceAdapter, }) {
11
- const { dataAdapter } = await getAdapter(pluginManager, sessionId, adapterConfig);
12
- const featureAdapter = isFeatureAdapter(dataAdapter) ? dataAdapter : undefined;
13
- featureAdapter?.setSequenceAdapterConfig(sequenceAdapter);
14
- return featureAdapter;
13
+ const { dataAdapter } = await getAdapter(pluginManager, sessionId, adapterConfig, sequenceAdapter);
14
+ return isFeatureAdapter(dataAdapter) ? dataAdapter : undefined;
15
15
  }
16
16
  /**
17
17
  * {@link getFeatureAdapter} for the common case where the RPC cannot proceed
@@ -3,17 +3,15 @@ import type { BaseAdapter, BaseSequenceAdapter } from './BaseAdapter/index.ts';
3
3
  * Resolves the reference sequence an adapter reads from.
4
4
  *
5
5
  * **The assembly is the source, and a hand-written `sequenceAdapter` slot is an
6
- * anti-pattern.** `getFeatureAdapter` and `CoreGetRefNames` prime every feature
7
- * adapter's `sequenceAdapterConfig` from the assembly the track is displayed
8
- * against, so no config has to copy a sequence adapter into a track. The slot
9
- * survives as an escape hatch for reading some *other* sequence, and setting it
10
- * pins the track to that source even when the assembly's own sequence changes —
11
- * so it wins only when explicitly present, and `jbrowse validate` warns about it.
6
+ * anti-pattern.** A reference-reading adapter is built with the sequence of the
7
+ * assembly the request that created it named (dataAdapterCache), so no config
8
+ * has to copy a sequence adapter into a track. The slot survives as an escape
9
+ * hatch for reading some *other* sequence, and setting it pins the track to
10
+ * that source even when the assembly's own sequence changes — so it wins only
11
+ * when explicitly present, and `jbrowse validate` warns about it.
12
12
  *
13
13
  * In core rather than beside one of its callers because the field it reads is
14
- * `BaseAdapter`'s. Deliberately NOT in `BaseAdapter/index.ts`: that barrel is a
15
- * `@jbrowse/core/*` re-export, and a name published there is load-bearing ABI —
16
- * `abi.test.ts`/`abiBaseline.json` fails a removal from it.
14
+ * `BaseAdapter`'s.
17
15
  *
18
16
  * `configured` is passed in rather than read here so each adapter reads its own
19
17
  * slot through its own config type.
@@ -2,17 +2,15 @@
2
2
  * Resolves the reference sequence an adapter reads from.
3
3
  *
4
4
  * **The assembly is the source, and a hand-written `sequenceAdapter` slot is an
5
- * anti-pattern.** `getFeatureAdapter` and `CoreGetRefNames` prime every feature
6
- * adapter's `sequenceAdapterConfig` from the assembly the track is displayed
7
- * against, so no config has to copy a sequence adapter into a track. The slot
8
- * survives as an escape hatch for reading some *other* sequence, and setting it
9
- * pins the track to that source even when the assembly's own sequence changes —
10
- * so it wins only when explicitly present, and `jbrowse validate` warns about it.
5
+ * anti-pattern.** A reference-reading adapter is built with the sequence of the
6
+ * assembly the request that created it named (dataAdapterCache), so no config
7
+ * has to copy a sequence adapter into a track. The slot survives as an escape
8
+ * hatch for reading some *other* sequence, and setting it pins the track to
9
+ * that source even when the assembly's own sequence changes — so it wins only
10
+ * when explicitly present, and `jbrowse validate` warns about it.
11
11
  *
12
12
  * In core rather than beside one of its callers because the field it reads is
13
- * `BaseAdapter`'s. Deliberately NOT in `BaseAdapter/index.ts`: that barrel is a
14
- * `@jbrowse/core/*` re-export, and a name published there is load-bearing ABI —
15
- * `abi.test.ts`/`abiBaseline.json` fails a removal from it.
13
+ * `BaseAdapter`'s.
16
14
  *
17
15
  * `configured` is passed in rather than read here so each adapter reads its own
18
16
  * slot through its own config type.
@@ -20,7 +18,7 @@
20
18
  export async function getSequenceSubAdapter(adapter, configured) {
21
19
  const config = configured ?? adapter.sequenceAdapterConfig;
22
20
  if (!config) {
23
- throw new Error('No sequence adapter available: either set the `sequenceAdapter` slot or display this track against an assembly that has one');
21
+ throw new Error(`${adapter.config.type} was built with no reference: the request that created it named no assembly, and no \`sequenceAdapter\` slot is set`);
24
22
  }
25
23
  const result = await adapter.getSubAdapter?.(config);
26
24
  if (!result) {
@@ -1,6 +1,6 @@
1
1
  import PluggableElementBase from './PluggableElementBase.ts';
2
2
  import type { AnyConfigurationSchemaType } from '../configuration/index.ts';
3
- import type { AnyAdapter } from '../data_adapters/BaseAdapter/index.ts';
3
+ import type { AdapterClassFor } from '../data_adapters/BaseAdapter/index.ts';
4
4
  export interface AdapterMetadata {
5
5
  category?: string;
6
6
  hiddenFromGUI?: boolean;
@@ -25,9 +25,9 @@ export interface AdapterMetadata {
25
25
  }
26
26
  /** Expand a raw adapter config snapshot (plain JSON) to its canonical form. */
27
27
  export type NormalizeSnapshot = (snap: Record<string, unknown>) => Record<string, unknown>;
28
- export default class AdapterType extends PluggableElementBase {
29
- getAdapterClass: () => Promise<AnyAdapter>;
30
- configSchema: AnyConfigurationSchemaType;
28
+ export default class AdapterType<SCHEMA extends AnyConfigurationSchemaType = any> extends PluggableElementBase {
29
+ getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
30
+ configSchema: SCHEMA;
31
31
  adapterCapabilities: string[];
32
32
  adapterMetadata?: AdapterMetadata;
33
33
  private declaredNormalizeSnapshot?;
@@ -42,7 +42,7 @@ export default class AdapterType extends PluggableElementBase {
42
42
  * declaring the shorthand once gets both. It used to be a second, separate
43
43
  * registration, and five in-tree adapters had only the schema half
44
44
  * (`MafTabixAdapter`, `BgzipMafAdapter`, `BgzipTaffyAdapter`,
45
- * `AllVsAllPAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
45
+ * `MultiGenomePAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
46
46
  * because loading such a config from a URL goes through the schema. Only
47
47
  * `normalizeAdapterSnapshots` consults *this*, so what broke was `localFiles`
48
48
  * in the embedded products: the shorthand stayed unexpanded, `uri` never
@@ -61,15 +61,15 @@ export default class AdapterType extends PluggableElementBase {
61
61
  locationKey?: string;
62
62
  constructor(stuff: {
63
63
  name: string;
64
- configSchema: AnyConfigurationSchemaType;
64
+ configSchema: SCHEMA;
65
65
  displayName?: string;
66
66
  adapterCapabilities?: string[];
67
67
  adapterMetadata?: AdapterMetadata;
68
68
  normalizeSnapshot?: NormalizeSnapshot;
69
69
  locationKey?: string;
70
70
  } & ({
71
- getAdapterClass: () => Promise<AnyAdapter>;
71
+ getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
72
72
  } | {
73
- AdapterClass: AnyAdapter;
73
+ AdapterClass: AdapterClassFor<SCHEMA>;
74
74
  }));
75
75
  }
@@ -17,7 +17,7 @@ export default class AdapterType extends PluggableElementBase {
17
17
  * declaring the shorthand once gets both. It used to be a second, separate
18
18
  * registration, and five in-tree adapters had only the schema half
19
19
  * (`MafTabixAdapter`, `BgzipMafAdapter`, `BgzipTaffyAdapter`,
20
- * `AllVsAllPAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
20
+ * `MultiGenomePAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
21
21
  * because loading such a config from a URL goes through the schema. Only
22
22
  * `normalizeAdapterSnapshots` consults *this*, so what broke was `localFiles`
23
23
  * in the embedded products: the shorthand stayed unexpanded, `uri` never
@@ -1,19 +1,42 @@
1
- import PluggableElementBase from './PluggableElementBase.ts';
1
+ import LazyStateModelElement from './LazyStateModelElement.ts';
2
2
  import type { AnyConfigurationSchemaType } from '../configuration/index.ts';
3
3
  import type { AnyReactComponentType } from '../util/index.ts';
4
4
  import type { IAnyModelType } from '@jbrowse/mobx-state-tree';
5
- export default class DisplayType extends PluggableElementBase {
6
- stateModel: IAnyModelType;
5
+ export type DisplayEntry = Record<string, unknown>;
6
+ /**
7
+ * A display type retired into this one. Configs and sessions naming it load
8
+ * as this display, the entry rewritten by `migrate` first: the settings the
9
+ * old type's picture needs, and its own spelling of any slot value, which
10
+ * `values` lists by slot so the published JSON schema and `jbrowse validate`
11
+ * admit it. A session track's entry keeps the retired type after its lifted
12
+ * settings are folded onto it, so `migrate` must leave an entry it already
13
+ * rewrote as it found it.
14
+ */
15
+ export interface RetiredDisplayType {
16
+ type: string;
17
+ migrate?: (entry: DisplayEntry) => DisplayEntry;
18
+ values?: Readonly<Record<string, readonly unknown[]>>;
19
+ }
20
+ /**
21
+ * Display-instance props an old session carries that are config slots now.
22
+ * `lift` answers the slots they become, which the session migration writes
23
+ * into the track's config; `keys` lists them, so the instance sheds them and
24
+ * `jbrowse validate` reports them as stale rather than dead.
25
+ */
26
+ export interface RetiredDisplayState {
27
+ keys: readonly string[];
28
+ lift: (instance: DisplayEntry) => DisplayEntry;
29
+ }
30
+ export default class DisplayType extends LazyStateModelElement {
31
+ protected readonly group = "display";
7
32
  configSchema: AnyConfigurationSchemaType;
8
33
  ReactComponent: AnyReactComponentType;
9
34
  /**
10
- * The track type the display is associated with
35
+ * The track type the display attaches to, or several: a display that reads
36
+ * a field any feature adapter serves (the Manhattan plot's `score`) belongs
37
+ * to every track type whose adapters serve it.
11
38
  */
12
- trackType: string;
13
- subDisplay?: {
14
- type: string;
15
- [key: string]: unknown;
16
- };
39
+ trackType: string | string[];
17
40
  /**
18
41
  * The view type the display is associated with
19
42
  */
@@ -22,19 +45,26 @@ export default class DisplayType extends PluggableElementBase {
22
45
  * Help text describing the display type
23
46
  */
24
47
  helpText?: string;
48
+ /**
49
+ * What the track's adapter must declare it can answer for this display to
50
+ * be offered on the track: a graph display draws only from an adapter that
51
+ * cuts a subgraph (`['getSubgraph']`), so a track whose adapter cannot is
52
+ * not given one.
53
+ */
54
+ adapterCapabilities: readonly string[];
55
+ retiredTypes: readonly RetiredDisplayType[];
56
+ retiredState?: RetiredDisplayState;
25
57
  constructor(stuff: {
26
58
  name: string;
27
- stateModel: IAnyModelType;
28
- trackType: string;
59
+ stateModel: IAnyModelType | (() => Promise<IAnyModelType>);
60
+ trackType: string | string[];
29
61
  viewType: string;
30
62
  displayName?: string;
31
- subDisplay?: {
32
- type: string;
33
- [key: string]: unknown;
34
- };
35
63
  configSchema: AnyConfigurationSchemaType;
36
64
  ReactComponent: AnyReactComponentType;
37
65
  helpText?: string;
38
- aliases?: string[];
66
+ adapterCapabilities?: readonly string[];
67
+ retiredTypes?: readonly RetiredDisplayType[];
68
+ retiredState?: RetiredDisplayState;
39
69
  });
40
70
  }
@@ -1,17 +1,14 @@
1
- import PluggableElementBase from './PluggableElementBase.js';
2
- export default class DisplayType extends PluggableElementBase {
3
- stateModel;
1
+ import LazyStateModelElement from './LazyStateModelElement.js';
2
+ export default class DisplayType extends LazyStateModelElement {
3
+ group = 'display';
4
4
  configSchema;
5
5
  ReactComponent;
6
6
  /**
7
- * The track type the display is associated with
7
+ * The track type the display attaches to, or several: a display that reads
8
+ * a field any feature adapter serves (the Manhattan plot's `score`) belongs
9
+ * to every track type whose adapters serve it.
8
10
  */
9
11
  trackType;
10
- /*
11
- * Indicates that this display type can be a "sub-display" of another type of
12
- * display, e.g. in AlignmentsDisplay, has Pileup and SNPCoverage subDisplays
13
- */
14
- subDisplay;
15
12
  /**
16
13
  * The view type the display is associated with
17
14
  */
@@ -20,14 +17,27 @@ export default class DisplayType extends PluggableElementBase {
20
17
  * Help text describing the display type
21
18
  */
22
19
  helpText;
20
+ /**
21
+ * What the track's adapter must declare it can answer for this display to
22
+ * be offered on the track: a graph display draws only from an adapter that
23
+ * cuts a subgraph (`['getSubgraph']`), so a track whose adapter cannot is
24
+ * not given one.
25
+ */
26
+ adapterCapabilities;
27
+ retiredTypes;
28
+ retiredState;
23
29
  constructor(stuff) {
24
- super(stuff);
25
- this.stateModel = stuff.stateModel;
26
- this.subDisplay = stuff.subDisplay;
30
+ super({
31
+ ...stuff,
32
+ aliases: stuff.retiredTypes?.map(r => r.type),
33
+ });
27
34
  this.configSchema = stuff.configSchema;
28
35
  this.ReactComponent = stuff.ReactComponent;
29
36
  this.trackType = stuff.trackType;
30
37
  this.viewType = stuff.viewType;
31
38
  this.helpText = stuff.helpText;
39
+ this.adapterCapabilities = stuff.adapterCapabilities ?? [];
40
+ this.retiredTypes = stuff.retiredTypes ?? [];
41
+ this.retiredState = stuff.retiredState;
32
42
  }
33
43
  }
@@ -0,0 +1,32 @@
1
+ import PluggableElementBase from './PluggableElementBase.ts';
2
+ import type { IAnyModelType } from '@jbrowse/mobx-state-tree';
3
+ /**
4
+ * A pluggable element whose state model may arrive through a dynamic import.
5
+ * Code that can run before any instance exists — session preloading, pruning,
6
+ * union membership — checks `isStateModelLoaded` before reading `stateModel`.
7
+ */
8
+ export default abstract class LazyStateModelElement extends PluggableElementBase {
9
+ protected abstract readonly group: 'view' | 'display';
10
+ abstract ReactComponent: unknown;
11
+ private loadedStateModel?;
12
+ private stateModelPromise?;
13
+ private pendingStateModelExtensions;
14
+ stateModelLoader?: () => Promise<IAnyModelType>;
15
+ onStateModelLoaded?: () => void;
16
+ constructor(stuff: {
17
+ name: string;
18
+ displayName?: string;
19
+ aliases?: string[];
20
+ stateModel: IAnyModelType | (() => Promise<IAnyModelType>);
21
+ });
22
+ get stateModel(): IAnyModelType;
23
+ set stateModel(stateModel: IAnyModelType);
24
+ get isStateModelLoaded(): boolean;
25
+ assertStateModelLoaded(): void;
26
+ /**
27
+ * Also starts the component's download, which rendering would otherwise
28
+ * request only after the model exists and the element mounts.
29
+ */
30
+ loadStateModel(): Promise<IAnyModelType>;
31
+ extendStateModel(extend: (stateModel: IAnyModelType) => IAnyModelType): void;
32
+ }
@@ -0,0 +1,77 @@
1
+ import { preloadComponent } from '../util/preloadComponent.js';
2
+ import PluggableElementBase from './PluggableElementBase.js';
3
+ /**
4
+ * A pluggable element whose state model may arrive through a dynamic import.
5
+ * Code that can run before any instance exists — session preloading, pruning,
6
+ * union membership — checks `isStateModelLoaded` before reading `stateModel`.
7
+ */
8
+ export default class LazyStateModelElement extends PluggableElementBase {
9
+ loadedStateModel;
10
+ stateModelPromise;
11
+ pendingStateModelExtensions = [];
12
+ // named `stateModel` + `Loader` because pluggableMstType probes
13
+ // `${fieldName}Loader` generically
14
+ stateModelLoader;
15
+ // set by PluginManager.addElementType: runs Core-extendPluggableElement once
16
+ // the loader resolves, so a callback reading `stateModel` sees a model
17
+ onStateModelLoaded;
18
+ constructor(stuff) {
19
+ super(stuff);
20
+ if (typeof stuff.stateModel === 'function') {
21
+ this.stateModelLoader = stuff.stateModel;
22
+ }
23
+ else {
24
+ this.loadedStateModel = stuff.stateModel;
25
+ }
26
+ }
27
+ // Throws before the loader resolves, so a plugin composing an unloaded
28
+ // model fails here rather than as an opaque MST error.
29
+ get stateModel() {
30
+ this.assertStateModelLoaded();
31
+ return this.loadedStateModel;
32
+ }
33
+ set stateModel(stateModel) {
34
+ this.loadedStateModel = stateModel;
35
+ }
36
+ get isStateModelLoaded() {
37
+ return this.loadedStateModel !== undefined;
38
+ }
39
+ assertStateModelLoaded() {
40
+ if (this.loadedStateModel === undefined) {
41
+ const getter = this.group === 'view' ? 'getViewType' : 'getDisplayType';
42
+ throw new Error(`state model for ${this.group} type ${this.name} is not loaded yet — await ${getter}('${this.name}').loadStateModel() first`);
43
+ }
44
+ }
45
+ /**
46
+ * Also starts the component's download, which rendering would otherwise
47
+ * request only after the model exists and the element mounts.
48
+ */
49
+ loadStateModel() {
50
+ preloadComponent(this.ReactComponent);
51
+ if (this.loadedStateModel !== undefined) {
52
+ return Promise.resolve(this.loadedStateModel);
53
+ }
54
+ if (!this.stateModelLoader) {
55
+ throw new Error(`${this.group} type ${this.name} has neither a state model nor a loader`);
56
+ }
57
+ this.stateModelPromise ??= this.stateModelLoader().then(loaded => {
58
+ let stateModel = loaded;
59
+ for (const extend of this.pendingStateModelExtensions) {
60
+ stateModel = extend(stateModel);
61
+ }
62
+ this.pendingStateModelExtensions = [];
63
+ this.loadedStateModel = stateModel;
64
+ this.onStateModelLoaded?.();
65
+ return this.stateModel;
66
+ });
67
+ return this.stateModelPromise;
68
+ }
69
+ extendStateModel(extend) {
70
+ if (this.loadedStateModel !== undefined) {
71
+ this.loadedStateModel = extend(this.loadedStateModel);
72
+ }
73
+ else {
74
+ this.pendingStateModelExtensions.push(extend);
75
+ }
76
+ }
77
+ }
@@ -6,11 +6,9 @@ export default abstract class PluggableElementBase {
6
6
  * or config names one. Each entry is a legacy `type` value previously used.
7
7
  *
8
8
  * Lets an element own its renames instead of a central migration file, so a
9
- * plugin can be renamed out of tree. A per-element `preProcessSnapshot` hook
10
- * then handles any property migrations within the renamed type; for a
11
- * migration that rewrites the value of an existing constrained slot (an enum
12
- * rename, a type narrow) use `addDisplayConfigMigration` instead — see that
13
- * helper for why.
9
+ * plugin can be renamed out of tree. A display declares its renames as
10
+ * `retiredTypes`, which also say what the old type's entries become, and
11
+ * answers these from them.
14
12
  */
15
13
  aliases?: string[];
16
14
  constructor(args?: {
@@ -6,11 +6,9 @@ export default class PluggableElementBase {
6
6
  * or config names one. Each entry is a legacy `type` value previously used.
7
7
  *
8
8
  * Lets an element own its renames instead of a central migration file, so a
9
- * plugin can be renamed out of tree. A per-element `preProcessSnapshot` hook
10
- * then handles any property migrations within the renamed type; for a
11
- * migration that rewrites the value of an existing constrained slot (an enum
12
- * rename, a type narrow) use `addDisplayConfigMigration` instead — see that
13
- * helper for why.
9
+ * plugin can be renamed out of tree. A display declares its renames as
10
+ * `retiredTypes`, which also say what the old type's entries become, and
11
+ * answers these from them.
14
12
  */
15
13
  aliases;
16
14
  constructor(args) {
@@ -71,6 +71,16 @@ export default abstract class RpcMethodType<MethodName extends string = string>
71
71
  pluginManager: PluginManager;
72
72
  constructor(pluginManager: PluginManager);
73
73
  serializeArguments(args: object): Promise<Record<string, unknown>>;
74
+ /**
75
+ * The reference sequence of the genome a call names in `assemblyName`, as a
76
+ * sibling of `adapterConfig`. The worker keys and builds a reference-reading
77
+ * adapter with it (dataAdapterCache), and this is the one place it comes
78
+ * from: a per-genome renaming method's regions have already become its
79
+ * `assemblyName` by the time super is reached, a header call names its own,
80
+ * and a comparative method names none. Ahead of the location walk, which
81
+ * converts and authorizes what the worker opens.
82
+ */
83
+ private attachReference;
74
84
  protected renameRegions<T extends RenameRegionsArgs>(args: T): Promise<T>;
75
85
  /**
76
86
  * The root model to resolve internet accounts against, but only while it is
@@ -109,7 +119,7 @@ export default abstract class RpcMethodType<MethodName extends string = string>
109
119
  * is not cosmetic, because the two handles every method receives are the two
110
120
  * an author who did not write them down never forwards.
111
121
  *
112
- * `CoreGetExportData` is the worked example: the stop token and status
122
+ * `CoreGetExportData` is the worked example: the signal and status
113
123
  * callback arrived on every call and its `execute` destructured neither, so
114
124
  * the Save-track-data dialog's cancel did nothing and its progress never moved
115
125
  * on the adapter-export branch. Nothing was mistyped — the fields simply were
@@ -1,4 +1,6 @@
1
1
  import { isAlive, isStateTreeNode } from '@jbrowse/mobx-state-tree';
2
+ import { untracked } from 'mobx';
3
+ import { getSequenceAdapterConfigByName } from '../assemblyManager/getSequenceAdapterConfig.js';
2
4
  import { renameRegionsIfNeeded } from '../util/index.js';
3
5
  import { resolveUriLocation } from '../util/io/index.js';
4
6
  import { unwrapRpcResult } from '../util/rpc.js';
@@ -64,17 +66,12 @@ function isCloneable(thing) {
64
66
  }
65
67
  // Values that structuredClone handles natively and that must pass through
66
68
  // ownArgs unchanged: `Object.entries` on them yields `[]`, so naive cloning
67
- // would collapse them to plain `{}` (e.g. a SharedArrayBuffer-backed stop token
68
- // would silently stop working, a typed array would lose its data).
69
+ // would collapse them to plain `{}` (a typed array would lose its data).
69
70
  function isStructuredClonePassthrough(thing) {
70
71
  return (thing instanceof File ||
71
72
  thing instanceof Blob ||
72
73
  thing instanceof ArrayBuffer ||
73
- // SharedArrayBuffer is not an ArrayBuffer subclass; without this it
74
- // collapses to {} and SAB-based stop tokens silently stop working. Nothing
75
- // we ship mints one (see `stopToken.ts`, "Which path runs where"), so this
76
- // arm is correctness for an isolated embedding host and nothing else —
77
- // keep it, but it is not a hot path and never was.
74
+ // not an ArrayBuffer subclass
78
75
  (typeof SharedArrayBuffer !== 'undefined' &&
79
76
  thing instanceof SharedArrayBuffer) ||
80
77
  ArrayBuffer.isView(thing) ||
@@ -96,7 +93,7 @@ function isStructuredClonePassthrough(thing) {
96
93
  // DataCloneError on every call a display makes.
97
94
  //
98
95
  // So: non-cloneable leaves (functions, Errors) and structured-clone natives
99
- // (typed arrays, Blobs, the SAB stop token...) pass through by reference
96
+ // (typed arrays, Blobs...) pass through by reference
100
97
  // unchanged. A genuinely non-cloneable value that leaked in by mistake is still
101
98
  // caught — at the worker postMessage boundary, which is a real structuredClone.
102
99
  function ownArgs(thing, seen = new WeakMap()) {
@@ -171,12 +168,31 @@ export default class RpcMethodType extends PluggableElementBase {
171
168
  this.pluginManager = pluginManager;
172
169
  }
173
170
  async serializeArguments(args) {
174
- const augmented = await this.augmentLocationObjects(args);
171
+ const augmented = await this.augmentLocationObjects(this.attachReference(args));
175
172
  return {
176
173
  ...augmented,
177
174
  blobMap: getBlobMap(),
178
175
  };
179
176
  }
177
+ /**
178
+ * The reference sequence of the genome a call names in `assemblyName`, as a
179
+ * sibling of `adapterConfig`. The worker keys and builds a reference-reading
180
+ * adapter with it (dataAdapterCache), and this is the one place it comes
181
+ * from: a per-genome renaming method's regions have already become its
182
+ * `assemblyName` by the time super is reached, a header call names its own,
183
+ * and a comparative method names none. Ahead of the location walk, which
184
+ * converts and authorizes what the worker opens.
185
+ */
186
+ attachReference(args) {
187
+ const { assemblyName } = args;
188
+ const assemblyManager = this.pluginManager.rootModel?.session?.assemblyManager;
189
+ if (!assemblyName || !assemblyManager) {
190
+ return args;
191
+ }
192
+ // eslint-disable-next-line no-restricted-syntax -- EFFECT INPUT: the reference only rides along on the RPC this call sends; the autorun that reached here (the synteny swap check) branches on the call's result, not on this read
193
+ const sequenceAdapter = untracked(() => getSequenceAdapterConfigByName(assemblyManager, assemblyName));
194
+ return sequenceAdapter ? { ...args, sequenceAdapter } : args;
195
+ }
180
196
  async renameRegions(args) {
181
197
  const { rootModel } = this.pluginManager;
182
198
  return renameRegionsIfNeeded(rootModel.session.assemblyManager, args);