@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
@@ -1,32 +1,39 @@
1
1
  import type PluginManager from '../PluginManager.ts';
2
+ export declare function referenceSequenceTrackId(assemblyName: unknown): string;
2
3
  /**
3
- * Fill in an assembly `sequence.adapter`'s `type` from its `uri` when the type
4
- * is omitted, so `sequence: { adapter: { uri: 'genome.fa.gz' } }` resolves to a
5
- * `BgzipFastaAdapter` (and `.fa` → indexed, `.2bit` → `TwoBitAdapter`). Uses the
6
- * same `Core-guessAdapterForLocation` extension point the "Add track" flow uses,
7
- * so every host describes a custom genome with just a URL and lets jbrowse-core
8
- * pick the adapter — no adapter-type table in the Python/R/JS bindings.
9
- *
10
- * The guesser also derives the index locations (`.fai`/`.gzi`) from the uri;
11
- * explicit adapter fields (e.g. a non-sibling `faiLocation`) are spread on top
12
- * so they win. A `uri` matching no sequence adapter is left untouched, so a
13
- * genuinely bad config still surfaces its own downstream error. Returns the same
14
- * object reference when there is nothing to expand, so callers can cheaply skip
15
- * a rebuild.
4
+ * The part of {@link expandAssemblyShorthand} that needs no plugin manager, for
5
+ * a reader of raw config JSON: the flat `{ name, uri }` form moves onto
6
+ * `sequence.adapter`, and `sequence.type` and `sequence.trackId` are each
7
+ * filled in when omitted. Returns `snap` itself when there is nothing to do.
16
8
  */
9
+ export declare function expandAssemblySequence<T>(snap: T): T;
17
10
  /**
18
11
  * Expand an assembly snapshot's own shorthands into the `sequence` an assembly
19
- * config declares: the flat `{ name, uri: 'genome.fa.gz' }` form, the
20
- * `sequence: { adapter: { uri } }` form, and the omitted
21
- * `sequence.type`/`trackId`.
12
+ * config declares: {@link expandAssemblySequence}, then the sequence adapter's
13
+ * type guessed from its `uri`.
22
14
  *
23
15
  * This is the assembly config schema's `preProcessSnapshot`, lifted out so a
24
16
  * caller that has to see canonical locations *before* MST builds the tree can
25
17
  * run it too. `localFiles` is that caller: it rewrites `{ uri: <a registered
26
18
  * name> }` location nodes into blobs, and until this has run the only `uri` in
27
19
  * a shorthand assembly is on the assembly itself, where it is not a location
28
- * node and must not be rewritten as one. Idempotent — the flat `uri` is
29
- * consumed, so the schema's own later pass finds nothing to do.
20
+ * node and must not be rewritten as one. Idempotent, and returns `snap` itself
21
+ * when there is nothing to expand.
30
22
  */
31
23
  export declare function expandAssemblyShorthand<T>(snap: T, pluginManager: PluginManager): T;
24
+ /**
25
+ * Fill in an assembly `sequence.adapter`'s `type` from its `uri` when the type
26
+ * is omitted, so `sequence: { adapter: { uri: 'genome.fa.gz' } }` resolves to a
27
+ * `BgzipFastaAdapter` (and `.fa` → indexed, `.2bit` → `TwoBitAdapter`). Uses the
28
+ * same `Core-guessAdapterForLocation` extension point the "Add track" flow uses,
29
+ * so every host describes a custom genome with just a URL and lets jbrowse-core
30
+ * pick the adapter — no adapter-type table in the Python/R/JS bindings.
31
+ *
32
+ * Only the type comes off the guess: the adapter's own `normalizeSnapshot`
33
+ * expands the `uri` into the location slots it declares, so the shorthand
34
+ * expands to the same thing here as it does when the config names the type.
35
+ * A `uri` matching no sequence adapter is left untouched, and the same object
36
+ * reference comes back when there is nothing to expand, so callers can cheaply
37
+ * skip a rebuild.
38
+ */
32
39
  export declare function expandAssemblySequenceAdapter(sequence: unknown, pluginManager: PluginManager): unknown;
@@ -1,65 +1,78 @@
1
+ import { isPlainObject } from '../util/objectUtils.js';
1
2
  import { UNKNOWN } from '../util/tracks.js';
2
- function isPlainObject(v) {
3
- return typeof v === 'object' && v !== null && !Array.isArray(v);
3
+ export function referenceSequenceTrackId(assemblyName) {
4
+ return `${assemblyName}-ReferenceSequenceTrack`;
4
5
  }
5
6
  /**
6
- * Fill in an assembly `sequence.adapter`'s `type` from its `uri` when the type
7
- * is omitted, so `sequence: { adapter: { uri: 'genome.fa.gz' } }` resolves to a
8
- * `BgzipFastaAdapter` (and `.fa` → indexed, `.2bit` → `TwoBitAdapter`). Uses the
9
- * same `Core-guessAdapterForLocation` extension point the "Add track" flow uses,
10
- * so every host describes a custom genome with just a URL and lets jbrowse-core
11
- * pick the adapter — no adapter-type table in the Python/R/JS bindings.
12
- *
13
- * The guesser also derives the index locations (`.fai`/`.gzi`) from the uri;
14
- * explicit adapter fields (e.g. a non-sibling `faiLocation`) are spread on top
15
- * so they win. A `uri` matching no sequence adapter is left untouched, so a
16
- * genuinely bad config still surfaces its own downstream error. Returns the same
17
- * object reference when there is nothing to expand, so callers can cheaply skip
18
- * a rebuild.
7
+ * The part of {@link expandAssemblyShorthand} that needs no plugin manager, for
8
+ * a reader of raw config JSON: the flat `{ name, uri }` form moves onto
9
+ * `sequence.adapter`, and `sequence.type` and `sequence.trackId` are each
10
+ * filled in when omitted. Returns `snap` itself when there is nothing to do.
19
11
  */
12
+ export function expandAssemblySequence(snap) {
13
+ if (!isPlainObject(snap)) {
14
+ return snap;
15
+ }
16
+ const { uri, baseUri, ...rest } = snap;
17
+ const given = rest.sequence;
18
+ // baseUri, stamped next to `uri` by addRelativeUris, rides down onto the
19
+ // adapter so the sequence resolves against the config's location
20
+ const seq = typeof uri === 'string' &&
21
+ (given === undefined || (isPlainObject(given) && !given.adapter))
22
+ ? {
23
+ ...(isPlainObject(given) ? given : {}),
24
+ adapter: { uri, ...(baseUri ? { baseUri } : {}) },
25
+ }
26
+ : given;
27
+ if (!isPlainObject(seq) ||
28
+ (seq === snap.sequence && 'type' in seq && 'trackId' in seq)) {
29
+ return snap;
30
+ }
31
+ return {
32
+ ...rest,
33
+ sequence: {
34
+ type: 'ReferenceSequenceTrack',
35
+ trackId: referenceSequenceTrackId(snap.name),
36
+ ...seq,
37
+ },
38
+ };
39
+ }
20
40
  /**
21
41
  * Expand an assembly snapshot's own shorthands into the `sequence` an assembly
22
- * config declares: the flat `{ name, uri: 'genome.fa.gz' }` form, the
23
- * `sequence: { adapter: { uri } }` form, and the omitted
24
- * `sequence.type`/`trackId`.
42
+ * config declares: {@link expandAssemblySequence}, then the sequence adapter's
43
+ * type guessed from its `uri`.
25
44
  *
26
45
  * This is the assembly config schema's `preProcessSnapshot`, lifted out so a
27
46
  * caller that has to see canonical locations *before* MST builds the tree can
28
47
  * run it too. `localFiles` is that caller: it rewrites `{ uri: <a registered
29
48
  * name> }` location nodes into blobs, and until this has run the only `uri` in
30
49
  * a shorthand assembly is on the assembly itself, where it is not a location
31
- * node and must not be rewritten as one. Idempotent — the flat `uri` is
32
- * consumed, so the schema's own later pass finds nothing to do.
50
+ * node and must not be rewritten as one. Idempotent, and returns `snap` itself
51
+ * when there is nothing to expand.
33
52
  */
34
53
  export function expandAssemblyShorthand(snap, pluginManager) {
35
- if (!isPlainObject(snap)) {
36
- return snap;
54
+ const expanded = expandAssemblySequence(snap);
55
+ if (!isPlainObject(expanded)) {
56
+ return expanded;
37
57
  }
38
- const { name, uri, baseUri, ...rest } = snap;
39
- // flattest shorthand: `{ name, uri: 'genome.fa.gz' }` describes an
40
- // assembly by its sequence file alone. baseUri, stamped next to the
41
- // `uri` key by addRelativeUris (hub/relative configs), rides down onto
42
- // the adapter so the sequence resolves against the config's location.
43
- const rawSequence = rest.sequence ??
44
- (typeof uri === 'string'
45
- ? { adapter: { uri, ...(baseUri ? { baseUri } : {}) } }
46
- : undefined);
47
- // infer sequence.adapter.type from its uri when omitted, so a config can
48
- // give just `sequence: { adapter: { uri: 'genome.fa.gz' } }` and core
49
- // picks the adapter (Bgzip/Indexed/TwoBit) — no adapter table in hosts
50
- const seq = expandAssemblySequenceAdapter(rawSequence, pluginManager);
51
- // then allow sequence.type/trackId to be omitted, since they are always
52
- // 'ReferenceSequenceTrack' and a name derived from the assembly name
53
- const sequence = seq && typeof seq === 'object' && !('type' in seq)
54
- ? {
55
- type: 'ReferenceSequenceTrack',
56
- trackId: `${name}-ReferenceSequenceTrack`,
57
- ...seq,
58
- }
59
- : seq;
60
- // preserve the identity-unchanged case so nothing rebuilds needlessly
61
- return (sequence === snap.sequence ? snap : { ...rest, name, sequence });
58
+ const sequence = expandAssemblySequenceAdapter(expanded.sequence, pluginManager);
59
+ return sequence === expanded.sequence ? expanded : { ...expanded, sequence };
62
60
  }
61
+ /**
62
+ * Fill in an assembly `sequence.adapter`'s `type` from its `uri` when the type
63
+ * is omitted, so `sequence: { adapter: { uri: 'genome.fa.gz' } }` resolves to a
64
+ * `BgzipFastaAdapter` (and `.fa` → indexed, `.2bit` → `TwoBitAdapter`). Uses the
65
+ * same `Core-guessAdapterForLocation` extension point the "Add track" flow uses,
66
+ * so every host describes a custom genome with just a URL and lets jbrowse-core
67
+ * pick the adapter — no adapter-type table in the Python/R/JS bindings.
68
+ *
69
+ * Only the type comes off the guess: the adapter's own `normalizeSnapshot`
70
+ * expands the `uri` into the location slots it declares, so the shorthand
71
+ * expands to the same thing here as it does when the config names the type.
72
+ * A `uri` matching no sequence adapter is left untouched, and the same object
73
+ * reference comes back when there is nothing to expand, so callers can cheaply
74
+ * skip a rebuild.
75
+ */
63
76
  export function expandAssemblySequenceAdapter(sequence, pluginManager) {
64
77
  const adapter = isPlainObject(sequence) ? sequence.adapter : undefined;
65
78
  if (isPlainObject(sequence) &&
@@ -77,9 +90,25 @@ export function expandAssemblySequenceAdapter(sequence, pluginManager) {
77
90
  ...(typeof baseUri === 'string' ? { baseUri } : {}),
78
91
  };
79
92
  const guess = guesser(file, undefined);
80
- return guess && guess.type !== UNKNOWN
81
- ? { ...sequence, adapter: { ...guess, ...extras } }
82
- : sequence;
93
+ if (!guess || guess.type === UNKNOWN) {
94
+ return sequence;
95
+ }
96
+ // the type is the only thing the guess is needed for. The adapter's own
97
+ // normalizeSnapshot expands `uri` and everything riding with it — a 2bit's
98
+ // `chromSizes`, which the guess has no slot for and MST then dropped
99
+ // unannounced — so this is not a second place that knows how a sequence
100
+ // file names its sidecars. An adapter declaring no shorthand keeps the
101
+ // guess's derived locations.
102
+ const normalize = pluginManager.hasAdapterType(guess.type)
103
+ ? pluginManager.getAdapterType(guess.type).normalizeSnapshot
104
+ : undefined;
105
+ const shorthand = { ...adapter, type: guess.type };
106
+ const normalized = normalize?.(shorthand) ?? shorthand;
107
+ // `uri` is consumed, and it has to GO: localFiles substitutes a blob into a
108
+ // location node, and an adapter still carrying `uri` reads as one
109
+ const full = normalized === shorthand ? { ...guess, ...extras } : normalized;
110
+ const { uri: _consumed, baseUri: _spent, ...expanded } = full;
111
+ return { ...sequence, adapter: expanded };
83
112
  }
84
113
  return sequence;
85
114
  }
@@ -1,4 +1,3 @@
1
- import { isBlank } from '../util/assemblyConfigUtils.js';
2
1
  import { fetchAndMaybeUnzipText } from '../util/fetchAndMaybeUnzip.js';
3
2
  import { parseTranslTable } from '../util/geneticCodes.js';
4
3
  import { openLocation } from '../util/io/index.js';
@@ -24,14 +23,12 @@ export function lookupGeneticCodeId(refName, refNameAliases, maps) {
24
23
  .find(id => id !== undefined) ?? STANDARD_GENETIC_CODE_ID);
25
24
  }
26
25
  // Loads an optional `refName<TAB>geneticCodeId` TSV (# comments allowed) into a
27
- // map; an empty location yields {} so the inline geneticCodes slot is the only
26
+ // map; no location yields {} so the inline geneticCodes slot is the only
28
27
  // source. Kept as a plain file read rather than a pluggable adapter because the
29
28
  // mapping is trivial and format-fixed.
30
29
  export async function getGeneticCodesFromFile({ location, pluginManager, opts, }) {
31
30
  const map = {};
32
- // skip the config slot's default blank location ({ uri: '' }); a real file
33
- // yields the refName -> geneticCodeId map
34
- if (location && !isBlank(location)) {
31
+ if (location) {
35
32
  const text = await fetchAndMaybeUnzipText(openLocation(location, pluginManager), opts, 'Downloading genetic codes');
36
33
  for (const line of text.split(/\r\n|\r|\n/)) {
37
34
  if (line && !line.startsWith('#')) {
@@ -1,3 +1,4 @@
1
+ import type { AnyConfigurationModel } from '../configuration/index.ts';
1
2
  import type { Assembly } from './assembly.ts';
2
3
  /**
3
4
  * The assembly's reference-sequence adapter config as a plain snapshot, or
@@ -7,3 +8,12 @@ import type { Assembly } from './assembly.ts';
7
8
  * safe) or undefined (?. handles it).
8
9
  */
9
10
  export declare function getSequenceAdapterConfig(assembly?: Pick<Assembly, 'configuration'>): Record<string, unknown> | undefined;
11
+ /**
12
+ * {@link getSequenceAdapterConfig} for a name, canonical or alias, read off
13
+ * the config rather than the built model, so it answers before the model
14
+ * exists and does not report an unknown name the way `assemblyManager.get`
15
+ * does; a track config may name an assembly the session lacks.
16
+ */
17
+ export declare function getSequenceAdapterConfigByName(assemblyManager: {
18
+ confByName: Map<string, AnyConfigurationModel>;
19
+ }, assemblyName: string): Record<string, unknown> | undefined;
@@ -10,3 +10,13 @@ export function getSequenceAdapterConfig(assembly) {
10
10
  const adapter = assembly?.configuration?.sequence?.adapter;
11
11
  return adapter ? getSnapshot(adapter) : undefined;
12
12
  }
13
+ /**
14
+ * {@link getSequenceAdapterConfig} for a name, canonical or alias, read off
15
+ * the config rather than the built model, so it answers before the model
16
+ * exists and does not report an unknown name the way `assemblyManager.get`
17
+ * does; a track config may name an assembly the session lacks.
18
+ */
19
+ export function getSequenceAdapterConfigByName(assemblyManager, assemblyName) {
20
+ const adapter = assemblyManager.confByName.get(assemblyName)?.sequence?.adapter;
21
+ return adapter ? getSnapshot(adapter) : undefined;
22
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name -> item for every name an assembly answers to. An assembly's own name
3
+ * beats another assembly's alias, and otherwise the first to claim a name keeps
4
+ * it, so the answer never depends on which array an assembly sits in.
5
+ */
6
+ export declare function indexAssemblyNames<T>(items: Iterable<T>, namesOf: (item: T) => {
7
+ name: string;
8
+ aliases: readonly string[];
9
+ }): Map<string, T>;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * name -> item for every name an assembly answers to. An assembly's own name
3
+ * beats another assembly's alias, and otherwise the first to claim a name keeps
4
+ * it, so the answer never depends on which array an assembly sits in.
5
+ */
6
+ export function indexAssemblyNames(items, namesOf) {
7
+ const index = new Map();
8
+ const named = Array.from(items, item => ({ item, ...namesOf(item) }));
9
+ for (const { item, name } of named) {
10
+ if (!index.has(name)) {
11
+ index.set(name, item);
12
+ }
13
+ }
14
+ for (const { item, aliases } of named) {
15
+ for (const alias of aliases) {
16
+ if (!index.has(alias)) {
17
+ index.set(alias, item);
18
+ }
19
+ }
20
+ }
21
+ return index;
22
+ }
@@ -1,5 +1,5 @@
1
1
  import type { BaseOptions } from '../data_adapters/BaseAdapter/index.ts';
2
2
  import type { Assembly } from './assembly.ts';
3
3
  import type { RefNameAliases } from './refNameMaps.ts';
4
- export type RefNameMapAssembly = Pick<Assembly, 'name' | 'load' | 'error' | 'regions' | 'refNames' | 'refNameAliases' | 'rpcManager' | 'configuration' | 'getCanonicalRefName' | 'setRefNameMismatch'>;
4
+ export type RefNameMapAssembly = Pick<Assembly, 'name' | 'load' | 'error' | 'regions' | 'refNames' | 'refNameAliases' | 'rpcManager' | 'getCanonicalRefName' | 'setRefNameMismatch'>;
5
5
  export declare function loadRefNameMap(assembly: RefNameMapAssembly, adapterConfig: unknown, options: BaseOptions): Promise<RefNameAliases>;
@@ -1,6 +1,5 @@
1
1
  import { adapterConfigCacheKey } from '../data_adapters/dataAdapterCache.js';
2
2
  import { updateStatus } from '../util/progress.js';
3
- import { getSequenceAdapterConfig } from './getSequenceAdapterConfig.js';
4
3
  import { checkRefName } from './refNameMaps.js';
5
4
  import { detectRefNameMismatch } from './refNameMismatch.js';
6
5
  export async function loadRefNameMap(assembly, adapterConfig, options) {
@@ -12,10 +11,6 @@ export async function loadRefNameMap(assembly, adapterConfig, options) {
12
11
  // set, so awaiting it is a direct, promise-based alternative to a reactive
13
12
  // `when` on those volatiles. It rejects on failure, so no error check follows
14
13
  await assembly.load();
15
- // pass the assembly's sequence adapter config (as a snapshot, since MST
16
- // objects can't be assigned elsewhere) so BAM/CRAM adapters can cache it for
17
- // later use when fetching features
18
- const sequenceAdapter = getSequenceAdapterConfig(assembly);
19
14
  // Labelled, because this is the multi-second stall before any RPC's own
20
15
  // status appears: `renameRegionsIfNeeded` runs inside `serializeArguments`,
21
16
  // so every fetch waits here first, and the byte-granularity progress below
@@ -26,11 +21,11 @@ export async function loadRefNameMap(assembly, adapterConfig, options) {
26
21
  const refNames = await updateStatus('Loading', options.statusCallback, () => assembly.rpcManager.call(sessionId, 'CoreGetRefNames', {
27
22
  adapterConfig: adapterConfig,
28
23
  assemblyName: assembly.name,
29
- sequenceAdapter,
30
- // stopToken intentionally not passed, fixes issues like #2221.
24
+ haplotypes: options.haplotypes,
25
+ // signal intentionally not passed, fixes issues like #2221.
31
26
  // alternative fix #2540 was proposed but non-working currently
32
- stopToken: undefined,
33
- // Forwarded rather than dropped (unlike stopToken above), because the
27
+ signal: undefined,
28
+ // Forwarded rather than dropped (unlike signal above), because the
34
29
  // adapter's index download happens here during refname mapping
35
30
  // (getRefNames -> setup) and this is the only place its "Downloading
36
31
  // index" progress can surface. For an in-memory adapter it is not an
@@ -0,0 +1,7 @@
1
+ import type { BaseOptions } from '../data_adapters/BaseAdapter/index.ts';
2
+ /**
3
+ * A source that reads only the lanes it is asked about answers a different
4
+ * refName set per selection, so each selection loads its own map; the worker
5
+ * keeps each lane's names, so a second selection reads only its new lanes.
6
+ */
7
+ export declare function refNameMapKey(adapterConf: Record<string, unknown>, options: BaseOptions): string;
@@ -0,0 +1,12 @@
1
+ import { adapterConfigCacheKey } from '../data_adapters/dataAdapterCache.js';
2
+ /**
3
+ * A source that reads only the lanes it is asked about answers a different
4
+ * refName set per selection, so each selection loads its own map; the worker
5
+ * keeps each lane's names, so a second selection reads only its new lanes.
6
+ */
7
+ export function refNameMapKey(adapterConf, options) {
8
+ const key = adapterConfigCacheKey(adapterConf);
9
+ return options.haplotypes === undefined
10
+ ? key
11
+ : `${key}|${[...options.haplotypes].sort().join(',')}`;
12
+ }
@@ -5,6 +5,8 @@ export declare const PLUGIN_STORE_URL = "https://jbrowse.org/plugin-store/v2/plu
5
5
  export declare function fetchPlugins(): Promise<{
6
6
  plugins: JBrowsePlugin[];
7
7
  }>;
8
+ /** Drops the cached manifest, so the next read fetches again. For tests. */
9
+ export declare function forgetFetchedPlugins(): void;
8
10
  export declare function checkPluginsAgainstStore(pluginsToCheck: PluginDefinition[], storePlugins: {
9
11
  plugins: JBrowsePlugin[];
10
12
  }): boolean;
@@ -7,18 +7,44 @@ import { isStorePluginDefinition, maybePluginUrl, pluginUrl, } from './pluginDef
7
7
  // reach PluginLoader with unvetted definitions.
8
8
  export const TRUSTED_PLUGIN_URL_PREFIXES = ['https://jbrowse.org/plugins/'];
9
9
  // v2 adds per-version JBrowse compatibility ranges + integrity hashes; the v1
10
- // plugins.json is still served for older clients. One constant, shared with the
11
- // hook every install surface reads (util/useFetchPlugins.ts), because the gate
12
- // and the list have to be looking at the same manifest — a second copy is how
13
- // one of them silently ends up on the unhashed v1 list, and then the gate
14
- // rejects a plugin the store just offered.
10
+ // plugins.json is still served for older clients. Read only through
11
+ // `fetchPlugins` below — the gate, the ref resolver and every install surface
12
+ // have to be looking at the same manifest, and a second copy of the fetch is
13
+ // how one of them silently ends up on the unhashed v1 list and then rejects a
14
+ // plugin the store just offered.
15
15
  export const PLUGIN_STORE_URL = 'https://jbrowse.org/plugin-store/v2/plugins.json';
16
+ // One request per page, shared by every reader.
17
+ //
18
+ // There are four in a boot that needs them — the config's trust gate, the
19
+ // config's store refs, the session's gate, the session's refs — plus one per
20
+ // time the plugin store widget is opened, since `useFetch` holds no data cache.
21
+ // The HTTP cache does not fold them: the manifest is served
22
+ // `cache-control: no-cache, must-revalidate`, so each is at least a
23
+ // revalidation round trip, and concurrent ones do not dedupe at all.
24
+ //
25
+ // Held for the life of the page rather than for a window. A manifest that
26
+ // changes mid-session would only matter to a store listing the user is looking
27
+ // at, and an install from a stale row still resolves against the version the
28
+ // row named.
29
+ let cached;
16
30
  export async function fetchPlugins() {
17
- const response = await fetch(PLUGIN_STORE_URL);
18
- if (!response.ok) {
19
- throw new Error(`HTTP ${response.status} ${response.statusText} fetching plugins`);
20
- }
21
- return response.json();
31
+ // Rethrown to every caller and then forgotten, so a store that was down when
32
+ // the config loaded is retried when the widget opens.
33
+ cached ??= (async () => {
34
+ const response = await fetch(PLUGIN_STORE_URL);
35
+ if (!response.ok) {
36
+ throw new Error(`HTTP ${response.status} ${response.statusText} fetching plugins`);
37
+ }
38
+ return response.json();
39
+ })().catch((error) => {
40
+ cached = undefined;
41
+ throw error;
42
+ });
43
+ return cached;
44
+ }
45
+ /** Drops the cached manifest, so the next read fetches again. For tests. */
46
+ export function forgetFetchedPlugins() {
47
+ cached = undefined;
22
48
  }
23
49
  function isTrustedUrl(url) {
24
50
  return TRUSTED_PLUGIN_URL_PREFIXES.some(prefix => url.startsWith(prefix));
@@ -47,13 +73,8 @@ function isTrustedDefinition(def) {
47
73
  // version-pinned build. A config plugin is "in the store" if its url is any of
48
74
  // these.
49
75
  function storePluginUrls(p) {
50
- const top = [p.url, p.umdUrl, p.esmUrl, p.cjsUrl];
51
- const versioned = (p.versions ?? []).flatMap(v => [
52
- v.url,
53
- v.umdUrl,
54
- v.esmUrl,
55
- v.cjsUrl,
56
- ]);
76
+ const top = [p.url, p.umdUrl, p.esmUrl];
77
+ const versioned = (p.versions ?? []).flatMap(v => [v.url, v.umdUrl, v.esmUrl]);
57
78
  return [...top, ...versioned].filter(url => url !== undefined);
58
79
  }
59
80
  export function checkPluginsAgainstStore(pluginsToCheck, storePlugins) {
@@ -0,0 +1,49 @@
1
+ /**
2
+ * BAM's `index`, which is the tabix pair over a different enumeration: BAI/CSI
3
+ * rather than TBI/CSI, with its own default and its own placeholder name.
4
+ * Folding the two would mean a slot whose vocabulary depends on its adapter,
5
+ * which is why `tabixIndexFields` says BAM is deliberately not there.
6
+ *
7
+ * Only the enumeration differs. `fillIndexType` is the same function, since a
8
+ * `.csi` names itself the same way whichever sibling format it stands in for.
9
+ */
10
+ export declare const bamIndexFields: {
11
+ readonly indexType: {
12
+ readonly model: import("@jbrowse/mobx-state-tree").ISimpleType<"BAI" | "CSI">;
13
+ readonly type: 'stringEnum';
14
+ readonly defaultValue: 'BAI';
15
+ readonly description: '`BAI` is the usual `samtools index` output. `CSI` is required for a reference longer than 512 Mb, which BAI cannot address. Derived from the index file name where the config names a `.csi` and leaves this unset.';
16
+ };
17
+ readonly location: {
18
+ readonly type: 'fileLocation';
19
+ readonly defaultValue: {
20
+ readonly uri: '/path/to/my.bam.bai';
21
+ readonly locationType: 'UriLocation';
22
+ };
23
+ readonly description: 'location of the index. Only needed when it is not named `<file>.bam.bai` (or `.bam.csi`), the names the `uri` shorthand assumes.';
24
+ };
25
+ };
26
+ /**
27
+ * #config BamIndex
28
+ * #category adapter
29
+ * Where a BAM's index is and which of the two kinds it is. `indexType` is
30
+ * derived from the index file's own name where the config names a `.csi` and
31
+ * leaves it unset, so the usual config states neither — the `uri` shorthand
32
+ * derives both, and `csi: true` beside it switches the pair together. Spell
33
+ * `location` out for an index that does not sit beside its BAM; a `.csi` named
34
+ * there is read as a CSI without `indexType` as well.
35
+ */
36
+ export declare function bamIndexSchema(): import("./configurationSchema.ts").ConfigurationSchemaType<{
37
+ readonly indexType: {
38
+ type: "stringEnum";
39
+ } & {
40
+ model: import("@jbrowse/mobx-state-tree").ISimpleType<"BAI" | "CSI">;
41
+ } & {
42
+ defaultValue: string;
43
+ };
44
+ readonly location: {
45
+ type: "fileLocation";
46
+ } & {
47
+ defaultValue: unknown;
48
+ };
49
+ }, import("./configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, undefined, import("./requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>;
@@ -0,0 +1,41 @@
1
+ import { types } from '@jbrowse/mobx-state-tree';
2
+ import { ConfigurationSchema } from './configurationSchema.js';
3
+ import { fillIndexType } from './indexType.js';
4
+ /**
5
+ * BAM's `index`, which is the tabix pair over a different enumeration: BAI/CSI
6
+ * rather than TBI/CSI, with its own default and its own placeholder name.
7
+ * Folding the two would mean a slot whose vocabulary depends on its adapter,
8
+ * which is why `tabixIndexFields` says BAM is deliberately not there.
9
+ *
10
+ * Only the enumeration differs. `fillIndexType` is the same function, since a
11
+ * `.csi` names itself the same way whichever sibling format it stands in for.
12
+ */
13
+ export const bamIndexFields = {
14
+ indexType: {
15
+ model: types.enumeration('IndexType', ['BAI', 'CSI']),
16
+ type: 'stringEnum',
17
+ defaultValue: 'BAI',
18
+ description: '`BAI` is the usual `samtools index` output. `CSI` is required for a reference longer than 512 Mb, which BAI cannot address. Derived from the index file name where the config names a `.csi` and leaves this unset.',
19
+ },
20
+ location: {
21
+ type: 'fileLocation',
22
+ defaultValue: {
23
+ uri: '/path/to/my.bam.bai',
24
+ locationType: 'UriLocation',
25
+ },
26
+ description: 'location of the index. Only needed when it is not named `<file>.bam.bai` (or `.bam.csi`), the names the `uri` shorthand assumes.',
27
+ },
28
+ };
29
+ /**
30
+ * #config BamIndex
31
+ * #category adapter
32
+ * Where a BAM's index is and which of the two kinds it is. `indexType` is
33
+ * derived from the index file's own name where the config names a `.csi` and
34
+ * leaves it unset, so the usual config states neither — the `uri` shorthand
35
+ * derives both, and `csi: true` beside it switches the pair together. Spell
36
+ * `location` out for an index that does not sit beside its BAM; a `.csi` named
37
+ * there is read as a CSI without `indexType` as well.
38
+ */
39
+ export function bamIndexSchema() {
40
+ return ConfigurationSchema('BamIndex', { ...bamIndexFields }, { preProcessSnapshot: fillIndexType });
41
+ }