@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,15 +1,32 @@
1
+ import type { IndexType, SiblingIndexType } from './indexType.ts';
1
2
  /**
2
- * The `index` half of a tabix-indexed adapter's shorthand snapshot: given
3
- * `{ uri, baseUri?, csi? }`, where the index file sits and what kind it is.
3
+ * The index type a config asks for, by whichever of its three spellings: the
4
+ * `csi` flag, `index.indexType`, or the extension on the index file it names.
5
+ * Explicit beats derived.
4
6
  *
5
- * Two spellings of the same flag have to agree — `CSI`/`TBI` names the type and
6
- * `.csi`/`.tbi` the file extension — and eight adapters were each writing both
7
- * out. Getting the pair crossed is an adapter that looks for the wrong index
8
- * file, or claims the wrong format for the right one, on a config the user
9
- * wrote correctly.
7
+ * One reader for all three, because they are one fact and disagreeing copies of
8
+ * it open the wrong parser — `openTabixIndexFilehandle` hands @gmod/tabix a
9
+ * `csiFilehandle` or a `tbiFilehandle` off `indexType` alone.
10
10
  */
11
+ export declare function requestedIndexType(snap: Record<string, unknown>, fallback: SiblingIndexType): IndexType;
12
+ /**
13
+ * The `index` half of an indexed adapter's shorthand snapshot. The filename
14
+ * follows from {@link requestedIndexType}, so the type and the extension cannot
15
+ * disagree, and whatever the config wrote under `index` then wins member by
16
+ * member: naming a location keeps the derived type, naming a type keeps the
17
+ * derived location, and an `indexType` the enumeration does not have reaches MST
18
+ * to be refused rather than being quietly read as the sibling format.
19
+ */
20
+ export declare function indexSnapshot(snap: Record<string, unknown>, fallback: SiblingIndexType): {
21
+ indexType: IndexType;
22
+ location: {
23
+ uri: string;
24
+ baseUri: unknown;
25
+ };
26
+ };
27
+ /** {@link indexSnapshot} for the tabix family, whose sibling format is TBI. */
11
28
  export declare function tabixIndexSnapshot(snap: Record<string, unknown>): {
12
- indexType: string;
29
+ indexType: IndexType;
13
30
  location: {
14
31
  uri: string;
15
32
  baseUri: unknown;
@@ -18,17 +35,17 @@ export declare function tabixIndexSnapshot(snap: Record<string, unknown>): {
18
35
  /**
19
36
  * Expand a tabix adapter's one-line shorthand — `{ uri: 'x.gff.gz' }`, plus
20
37
  * optional `csi` — into the full `{ <locationKey>, index }` snapshot, or pass a
21
- * snapshot that is already in full form through untouched.
38
+ * snapshot already in full form through untouched.
22
39
  *
23
40
  * `locationKey` is the only thing that differs between adapters
24
- * (`gffGzLocation`, `vcfGzLocation`, `bedGzLocation`, `pifGzLocation`, …), so
25
- * it is the only thing they now supply. An adapter whose shorthand carries more
26
- * than this (maf's `nhUri`) composes `tabixIndexSnapshot` directly instead.
41
+ * (`gffGzLocation`, `vcfGzLocation`, `bedGzLocation`, `pifGzLocation`, …). An
42
+ * adapter whose shorthand carries more (maf's `nhUri`) composes
43
+ * `tabixIndexSnapshot` directly.
27
44
  *
28
- * Kept a plain function on the adapter type rather than folded into
29
- * `ConfigurationSchema`: `scripts/generateConfigManifest.ts` derives each
30
- * adapter's `shorthandKeys` by EXECUTING `normalizeSnapshot` against probe
31
- * snapshots and diffing what it derived, so the manifest — and the config docs
32
- * built from it — follow this without knowing it exists.
45
+ * Kept a plain function rather than folded into `ConfigurationSchema`:
46
+ * `scripts/generateConfigManifest.ts` derives each adapter's `shorthandKeys` by
47
+ * EXECUTING `normalizeSnapshot` against probe snapshots, so the manifest and the
48
+ * config docs follow this without knowing it exists. It finds the candidate keys
49
+ * by reading them out of source, following what an adapter schema imports.
33
50
  */
34
51
  export declare function expandTabixShorthand(snap: Record<string, unknown>, locationKey: string): Record<string, unknown>;
@@ -1,44 +1,71 @@
1
+ import { isPlainObject } from '../util/objectUtils.js';
2
+ import { fillLocations } from './fillLocations.js';
3
+ import { indexSuffix, isCsiLocation } from './indexType.js';
1
4
  /**
2
- * The `index` half of a tabix-indexed adapter's shorthand snapshot: given
3
- * `{ uri, baseUri?, csi? }`, where the index file sits and what kind it is.
5
+ * The index type a config asks for, by whichever of its three spellings: the
6
+ * `csi` flag, `index.indexType`, or the extension on the index file it names.
7
+ * Explicit beats derived.
4
8
  *
5
- * Two spellings of the same flag have to agree — `CSI`/`TBI` names the type and
6
- * `.csi`/`.tbi` the file extension — and eight adapters were each writing both
7
- * out. Getting the pair crossed is an adapter that looks for the wrong index
8
- * file, or claims the wrong format for the right one, on a config the user
9
- * wrote correctly.
9
+ * One reader for all three, because they are one fact and disagreeing copies of
10
+ * it open the wrong parser — `openTabixIndexFilehandle` hands @gmod/tabix a
11
+ * `csiFilehandle` or a `tbiFilehandle` off `indexType` alone.
10
12
  */
11
- export function tabixIndexSnapshot(snap) {
12
- const csi = Boolean(snap.csi);
13
+ export function requestedIndexType(snap, fallback) {
14
+ const written = isPlainObject(snap.index) ? snap.index : undefined;
15
+ const declared = written?.indexType;
16
+ if (declared === 'CSI') {
17
+ return 'CSI';
18
+ }
19
+ if (declared === fallback) {
20
+ return fallback;
21
+ }
22
+ return snap.csi || isCsiLocation(written?.location) ? 'CSI' : fallback;
23
+ }
24
+ /**
25
+ * The `index` half of an indexed adapter's shorthand snapshot. The filename
26
+ * follows from {@link requestedIndexType}, so the type and the extension cannot
27
+ * disagree, and whatever the config wrote under `index` then wins member by
28
+ * member: naming a location keeps the derived type, naming a type keeps the
29
+ * derived location, and an `indexType` the enumeration does not have reaches MST
30
+ * to be refused rather than being quietly read as the sibling format.
31
+ */
32
+ export function indexSnapshot(snap, fallback) {
33
+ const indexType = requestedIndexType(snap, fallback);
13
34
  return {
14
- indexType: csi ? 'CSI' : 'TBI',
35
+ indexType,
15
36
  location: {
16
- uri: `${snap.uri}.${csi ? 'csi' : 'tbi'}`,
37
+ uri: `${snap.uri}${indexSuffix(indexType)}`,
17
38
  baseUri: snap.baseUri,
18
39
  },
40
+ ...(isPlainObject(snap.index) ? snap.index : {}),
19
41
  };
20
42
  }
43
+ /** {@link indexSnapshot} for the tabix family, whose sibling format is TBI. */
44
+ export function tabixIndexSnapshot(snap) {
45
+ return indexSnapshot(snap, 'TBI');
46
+ }
21
47
  /**
22
48
  * Expand a tabix adapter's one-line shorthand — `{ uri: 'x.gff.gz' }`, plus
23
49
  * optional `csi` — into the full `{ <locationKey>, index }` snapshot, or pass a
24
- * snapshot that is already in full form through untouched.
50
+ * snapshot already in full form through untouched.
25
51
  *
26
52
  * `locationKey` is the only thing that differs between adapters
27
- * (`gffGzLocation`, `vcfGzLocation`, `bedGzLocation`, `pifGzLocation`, …), so
28
- * it is the only thing they now supply. An adapter whose shorthand carries more
29
- * than this (maf's `nhUri`) composes `tabixIndexSnapshot` directly instead.
53
+ * (`gffGzLocation`, `vcfGzLocation`, `bedGzLocation`, `pifGzLocation`, …). An
54
+ * adapter whose shorthand carries more (maf's `nhUri`) composes
55
+ * `tabixIndexSnapshot` directly.
30
56
  *
31
- * Kept a plain function on the adapter type rather than folded into
32
- * `ConfigurationSchema`: `scripts/generateConfigManifest.ts` derives each
33
- * adapter's `shorthandKeys` by EXECUTING `normalizeSnapshot` against probe
34
- * snapshots and diffing what it derived, so the manifest — and the config docs
35
- * built from it — follow this without knowing it exists.
57
+ * Kept a plain function rather than folded into `ConfigurationSchema`:
58
+ * `scripts/generateConfigManifest.ts` derives each adapter's `shorthandKeys` by
59
+ * EXECUTING `normalizeSnapshot` against probe snapshots, so the manifest and the
60
+ * config docs follow this without knowing it exists. It finds the candidate keys
61
+ * by reading them out of source, following what an adapter schema imports.
36
62
  */
37
63
  export function expandTabixShorthand(snap, locationKey) {
38
64
  return snap.uri
39
65
  ? {
40
- ...snap,
41
- [locationKey]: { uri: snap.uri, baseUri: snap.baseUri },
66
+ ...fillLocations(snap, {
67
+ [locationKey]: { uri: snap.uri, baseUri: snap.baseUri },
68
+ }),
42
69
  index: tabixIndexSnapshot(snap),
43
70
  }
44
71
  : snap;
@@ -1,29 +1,143 @@
1
1
  import type { FileLocation } from '../util/types/index.ts';
2
+ import type { IsAny } from '../util/types/isAny.ts';
2
3
  import type { ConfigurationSchemaDefinition, ConfigurationSchemaOptions, ConfigurationSchemaType } from './configurationSchema.ts';
3
4
  import type { BuiltinSlotTypeName } from './configurationSlot.ts';
4
- import type { ISimpleType, IStateTreeNode, Instance, SnapshotOut } from '@jbrowse/mobx-state-tree';
5
- export type GetOptions<SCHEMA> = SCHEMA extends ConfigurationSchemaType<any, infer OPTIONS> ? OPTIONS : never;
6
- export type GetBase<SCHEMA> = SCHEMA extends undefined ? never : GetOptions<SCHEMA> extends ConfigurationSchemaOptions<undefined, any> ? undefined : GetOptions<SCHEMA> extends ConfigurationSchemaOptions<infer BASE extends AnyConfigurationSchemaType, any> ? BASE : never;
7
- export type GetExplicitIdentifier<SCHEMA> = GetOptions<SCHEMA> extends ConfigurationSchemaOptions<any, infer EXPLICIT_IDENTIFIER extends string> ? EXPLICIT_IDENTIFIER : never;
8
- /**
9
- * The identifier prop a schema declares **or inherits** — `trackId`,
10
- * `displayId`, or whatever `explicitIdentifier` names. Recursive because most
11
- * display schemas never declare it themselves: they pick up `displayId` from
12
- * `baseConfiguration: baseLinearDisplayConfigSchema`, whose options
13
- * `preprocessConfigurationSchemaArguments` merges in at runtime, leaving the
14
- * subclass's own `EXPLICIT_IDENTIFIER` param `undefined`. Same walk
15
- * `ConfigurationSlotName` does for inherited slot names.
16
- */
17
- export type GetInheritedIdentifier<SCHEMA> = SCHEMA extends undefined ? never : SCHEMA extends ConfigurationSchemaType<any, any> ? GetExplicitIdentifier<SCHEMA> | (GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? GetInheritedIdentifier<GetBase<SCHEMA>> : never) : never;
18
- export type ConfigurationSchemaForModel<MODEL> = MODEL extends IStateTreeNode<infer SCHEMA extends AnyConfigurationSchemaType> ? SCHEMA : never;
19
- export type ConfigurationSlotName<SCHEMA> = SCHEMA extends undefined ? never : SCHEMA extends ConfigurationSchemaType<infer D, any> ? (keyof D & string) | GetExplicitIdentifier<SCHEMA> | (GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSlotName<GetBase<SCHEMA>> : never) : never;
5
+ import type { IAnyType, IArrayType, IOptionalIType, ISimpleType, IStateTreeNode, Instance, SnapshotOut } from '@jbrowse/mobx-state-tree';
6
+ export type ConfigurationSchemaForModel<MODEL> = IsAny<MODEL> extends true ? AnyConfigurationSchemaType : MODEL extends IStateTreeNode<infer T> ? T extends AnyConfigurationSchemaType ? T : T extends IOptionalIType<infer INNER extends AnyConfigurationSchemaType, any> ? INNER : AnyConfigurationSchemaType : never;
7
+ /**
8
+ * A schema's definition as **stored**: the author's own entries over the ones
9
+ * its `baseConfiguration` contributed, the type-level twin of
10
+ * `mergeSchemaDefinition`. The base arrives already merged with its own base,
11
+ * so one level here covers a chain of any depth.
12
+ *
13
+ * A flat mapped type over the union of both key sets, not
14
+ * `Omit<BASE, keyof D> & D`: an intersection's `keyof` is a union of key sets,
15
+ * and mapping over a union that includes `string` — which
16
+ * `ConfigurationSchemaDefinition`'s index signature contributes — collapses
17
+ * back to an index signature, which is the thing `ConfigNodeProps` exists to
18
+ * get rid of.
19
+ */
20
+ export type MergeConfigDef<D, BASE> = BASE extends ConfigurationSchemaType<infer BD, any> ? {
21
+ [K in keyof BD | keyof D]: NormalizeSlotDef<K extends keyof D ? K extends keyof BD ? MergeSlotDef<BD[K], D[K]> : D[K] : K extends keyof BD ? BD[K] : never>;
22
+ } : {
23
+ [K in keyof D]: NormalizeSlotDef<D[K]>;
24
+ };
25
+ /**
26
+ * A redeclared slot merges field-by-field over the base's; a sub-schema or a
27
+ * constant keeps replace semantics, matching `mergeSchemaDefinition`'s
28
+ * `isSlotDefinitionEntry` guard.
29
+ */
30
+ type MergeSlotDef<BASE_ENTRY, ENTRY> = BASE_ENTRY extends {
31
+ type: string;
32
+ } ? ENTRY extends {
33
+ type: string;
34
+ } ? Omit<BASE_ENTRY, keyof ENTRY> & ENTRY : ENTRY : ENTRY;
35
+ /**
36
+ * What the type level reads off a slot definition: the slot's `type`, a
37
+ * `stringEnum`'s `model`, and whether a `defaultValue` is there at all — widened
38
+ * off its literal. The description, `advanced`, `contextVariable` and the
39
+ * literal default are documentation and runtime, and carrying them makes two
40
+ * schemas that differ only in one of them mutually unassignable: a subclass
41
+ * raising `height` from 100 to 250 stopped satisfying a parameter pinned to its
42
+ * base. `SlotValueRawFromDef` re-widens a scalar default anyway, and reaches
43
+ * `any` for everything else, so nothing downstream loses precision.
44
+ */
45
+ type NormalizeSlotDef<E> = E extends AnyConfigurationSchemaType ? E : E extends {
46
+ type: infer T;
47
+ } ? {
48
+ type: T;
49
+ } & (E extends {
50
+ model: infer M;
51
+ } ? {
52
+ model: M;
53
+ } : unknown) & (E extends {
54
+ defaultValue: infer V;
55
+ } ? {
56
+ defaultValue: WidenDefaultValue<V>;
57
+ } : unknown) : E;
58
+ type WidenDefaultValue<V> = [V] extends [boolean] ? boolean : [V] extends [string] ? string : [V] extends [number] ? number : unknown;
59
+ type ConfigNodeValue<DEF> = IsAny<DEF> extends true ? any : DEF extends AnyConfigurationSchemaType ? DEF['Type'] : DEF extends IArrayType<any> | IOptionalIType<IArrayType<any>, any> ? DEF['Type'] : DEF extends string ? string : DEF extends number ? number : SlotValueRawFromDef<DEF>;
60
+ /**
61
+ * The slots a config node presents, read off the schema's own DEFINITION rather
62
+ * than the `Record<string, any>` `makeConfigurationSchemaModel` assembles its
63
+ * MST props from. Those props carry an index signature, so every
64
+ * `node.anything` resolves to `any`; mapping the definition instead is what
65
+ * makes `node.colorr` a compile error.
66
+ *
67
+ * A plain mapped type, and it has to stay one. Wrapping it in a conditional —
68
+ * to answer early for a widened definition, say — makes TypeScript measure
69
+ * DEFINITION as covariant instead of invariant, and it refuses a failed
70
+ * covariant check on a type argument outright where a failed invariant one
71
+ * falls back to comparing the two schemas structurally. Structural is the
72
+ * comparison that matters: a subclass schema's node has every slot the base's
73
+ * does, while its *definition* restates `defaultValue` and `description` and so
74
+ * matches nothing. The widened case belongs on `AnyConfigurationModel`.
75
+ */
76
+ export type ConfigNodeProps<DEFINITION> = {
77
+ [K in keyof DEFINITION]: ConfigNodeValue<DEFINITION[K]>;
78
+ };
79
+ /**
80
+ * The two write actions every config node carries, which `setConf` is the
81
+ * spelling of. A type alias rather than an interface because it annotates the
82
+ * `.actions` block: MST constrains that to `ModelActions`, an index signature
83
+ * of functions, and only a type alias of an object literal gets the implicit
84
+ * index signature that satisfies it.
85
+ */
86
+ export type ConfigNodeActions = {
87
+ setSubschema: (slotName: string, data: unknown) => unknown;
88
+ setSlot: (slotName: string, value: unknown) => void;
89
+ };
90
+ /**
91
+ * MST's node brand, restated. A config node carries its own schema here by
92
+ * polymorphic `this`, and `ConfigurationSchemaForModel` walks it back out —
93
+ * which is what every `getConf` / `readConfObject` / `setConf` slot-name
94
+ * constraint hangs off, so losing it switches the read-side check off with no
95
+ * error anywhere. `scripts/audit-config-read-types.ts` is the only thing that
96
+ * reports that; run it after touching this.
97
+ *
98
+ * Structurally identical to `IStateTreeNode<IT>`, but an alias rather than an
99
+ * interface: TypeScript infers an implicit index signature for an intersection
100
+ * only when every constituent is an alias or a mapped type, and that is what
101
+ * leaves a concrete config node — whose props are a mapped type with no index
102
+ * signature of its own — assignable to `AnyConfigurationModel`.
103
+ */
104
+ export type ConfigNodeBrand<IT extends IAnyType> = {
105
+ readonly $treenode?: any;
106
+ readonly $__mstStateTreeNodeType__?: [IT] | [any];
107
+ };
108
+ /**
109
+ * The identifier a schema's `explicitIdentifier` installs, folded into the
110
+ * definition as if it were a declared string slot — which is what it is at
111
+ * runtime, `makeConfigurationSchemaModel` just builds it from the options rather
112
+ * than from the table. Folding it in rather than intersecting it onto `Type`
113
+ * keeps it out of `ConfigurationSchemaType`'s parameter list: as a parameter it
114
+ * reads as invariant (it lands in a `Record<K, …>` key position), which stops a
115
+ * concrete schema widening to `AnyConfigurationSchemaType`. Inheritance comes
116
+ * free, since `MergeConfigDef` already folds the base's whole definition in.
117
+ */
118
+ export interface IdentifierSlotDef {
119
+ type: 'string';
120
+ defaultValue: '';
121
+ }
122
+ /**
123
+ * The `type` prop an `explicitlyTyped` schema installs, folded into the
124
+ * definition the same way and for the same reasons. Separate from
125
+ * `IdentifierSlotDef` despite the identical shape, because the runtime prop is
126
+ * `types.literal(modelName)` and this is where that would be said if the model
127
+ * name ever became a type parameter.
128
+ */
129
+ export interface TypeSlotDef {
130
+ type: 'string';
131
+ defaultValue: '';
132
+ }
133
+ export type ConfigurationSlotName<SCHEMA> = IsAny<SCHEMA> extends true ? string : SCHEMA extends ConfigurationSchemaType<infer D, any> ? keyof D & string : never;
20
134
  /**
21
135
  * The names a config snapshot for `SCHEMA` may use — its own slots, its
22
136
  * sub-schemas recursively, its identifier and everything it inherits — with
23
137
  * every value left `unknown`.
24
138
  *
25
139
  * Names are the whole point of it. A slot value can be its own type, a `jexl:`
26
- * callback string, or (for a promotable slot) absent, and nothing here tries to
140
+ * callback string, or (for a `maybe*` slot) absent, and nothing here tries to
27
141
  * check that; a *name* the schema does not declare is dropped on the way in
28
142
  * without a word, so `preferance` is a setting that reads as applied and never
29
143
  * applies. Against an object literal — which is how an embedder writes one —
@@ -31,14 +145,7 @@ export type ConfigurationSlotName<SCHEMA> = SCHEMA extends undefined ? never : S
31
145
  */
32
146
  export type ConfigurationSnapshot<SCHEMA> = SCHEMA extends undefined ? never : SCHEMA extends ConfigurationSchemaType<infer D, any> ? {
33
147
  [K in keyof D]?: D[K] extends ConfigurationSchemaType<any, any> ? ConfigurationSnapshot<D[K]> : unknown;
34
- } & {
35
- [K in GetExplicitIdentifier<SCHEMA>]?: string;
36
- } & (GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSnapshot<GetBase<SCHEMA>> : unknown) : unknown;
37
- type SlotValueResolvedFromDef<DEF> = DEF extends {
38
- promotedBase: undefined;
39
- } ? SlotValueRawFromDef<DEF> : DEF extends {
40
- promotedBase: unknown;
41
- } ? Exclude<SlotValueRawFromDef<DEF>, undefined> : SlotValueRawFromDef<DEF>;
148
+ } : unknown;
42
149
  /**
43
150
  * The value each builtin slot `type` reads as — the type-level twin of
44
151
  * `slotTypes` in `configurationSlot.ts`, which is the same list as MST models.
@@ -54,21 +161,24 @@ type SlotValueResolvedFromDef<DEF> = DEF extends {
54
161
  */
55
162
  interface SlotValueByType {
56
163
  stringArray: string[];
164
+ expressionArray: string[];
57
165
  stringArrayMap: Record<string, string[]>;
58
166
  numberMap: Record<string, number>;
167
+ stringMap: Record<string, string>;
59
168
  fileLocation: FileLocation;
169
+ maybeFileLocation: FileLocation | undefined;
60
170
  maybeNumber: number | undefined;
61
171
  maybeBoolean: boolean | undefined;
62
172
  maybeColor: string | undefined;
173
+ maybeString: string | undefined;
63
174
  /**
64
175
  * `frozen` and its `maybe*` form are `any` deliberately — arbitrary dynamic
65
176
  * JSON whose shape the caller asserts at the read boundary. `unknown` would
66
177
  * only add cast ceremony on values that are legitimately dynamic.
67
178
  *
68
179
  * Stated here rather than left to the `defaultValue` fallback, which reaches
69
- * `any` for these only by accident: it lands there because no `frozen` slot in
70
- * the repo happens to default to a scalar, and a promotable slot's default is
71
- * always the `undefined` sentinel.
180
+ * `any` for these only by accident: no `frozen` slot in the repo happens to
181
+ * default to a scalar.
72
182
  */
73
183
  frozen: any;
74
184
  maybeFrozen: any;
@@ -77,7 +187,9 @@ interface SlotValueByType {
77
187
  boolean: boolean;
78
188
  string: string;
79
189
  text: string;
190
+ featureField: string;
80
191
  color: string;
192
+ colorArray: string[];
81
193
  }
82
194
  /**
83
195
  * The two tables name the same builtin slot types, checked rather than
@@ -99,18 +211,37 @@ type SlotValueRawFromDef<DEF> = DEF extends AnyConfigurationSchemaType ? AnyConf
99
211
  model: ISimpleType<infer T extends string>;
100
212
  } ? DEF extends {
101
213
  type: 'maybeStringEnum';
102
- } ? T | undefined : T : DEF extends {
214
+ } ? T | undefined : DEF extends {
215
+ type: 'stringEnumArray';
216
+ } ? T[] : T : DEF extends {
103
217
  type: infer T extends keyof SlotValueByType;
104
218
  } ? SlotValueByType[T] : DEF extends {
105
219
  defaultValue: infer V;
106
220
  } ? [V] extends [boolean] ? boolean : [V] extends [string] ? string : [V] extends [number] ? number : any : any;
107
- /** what a raw read (`getConf` / `readConfObject`) of this slot yields */
108
- export type ConfigurationSlotValue<SCHEMA, K extends string> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? SlotValueRawFromDef<D[K]> : GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSlotValue<GetBase<SCHEMA>, K> : any : any;
221
+ type SubSchemaOf<SCHEMA, K> = IsAny<SCHEMA> extends true ? any : SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? D[K] : never : never;
222
+ type SubSchemaSlotPath<SCHEMA> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? IsAny<D> extends true ? readonly string[] : {
223
+ [K in keyof D & string]: D[K] extends AnyConfigurationSchemaType ? readonly [K, ConfigurationSlotName<D[K]>] | readonly [K, ...SubSchemaSlotPath<D[K]>] : D[K] extends IAnyType | {
224
+ type: 'frozen' | 'maybeFrozen';
225
+ } ? readonly [K, ...string[]] : never;
226
+ }[keyof D & string] : readonly string[];
109
227
  /**
110
- * what `resolveConf` yields: the same, minus the inherit sentinel on a
111
- * promotable slot — the cascade always produces a real value.
228
+ * The array paths a read may take into `SCHEMA`. Past one segment each is
229
+ * checked: a sub-schema's name, then one of its slot names or a deeper path. A
230
+ * head naming something other than a sub-schema — a pluggable adapter union, an
231
+ * array or map of sub-schemas, a `frozen` slot — keeps an unchecked tail, and a
232
+ * widened schema admits any `string[]`.
233
+ *
234
+ * A one-segment path stays unchecked: it is how a generic class body, where
235
+ * `SCHEMA` is unresolved, reads a slot at all (`FastaAdapterBase`).
112
236
  */
113
- export type ConfigurationSlotValueResolved<SCHEMA, K extends string> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? SlotValueResolvedFromDef<D[K]> : GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSlotValueResolved<GetBase<SCHEMA>, K> : any : any;
237
+ export type ConfigurationSlotPath<SCHEMA> = readonly [] | readonly [string] | SubSchemaSlotPath<SCHEMA>;
238
+ /** what a read of `PATH` into `SCHEMA` yields */
239
+ export type ConfigurationSlotPathValue<SCHEMA, PATH> = PATH extends readonly [
240
+ infer HEAD,
241
+ ...infer REST
242
+ ] ? SubSchemaOf<SCHEMA, HEAD> extends infer SUB extends AnyConfigurationSchemaType ? REST extends readonly [infer SLOT extends string] ? ConfigurationSlotValue<SUB, SLOT> : ConfigurationSlotPathValue<SUB, REST> : any : any;
243
+ /** what a raw read (`getConf` / `readConfObject`) of this slot yields */
244
+ export type ConfigurationSlotValue<SCHEMA, K extends string> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? SlotValueRawFromDef<D[K]> : any : any;
114
245
  /**
115
246
  * Naming convention for config types, paired per schema:
116
247
  * - `XConfigSchema` is the MST IType (the schema itself). Use it for
@@ -125,7 +256,15 @@ export type ConfigurationSlotValueResolved<SCHEMA, K extends string> = SCHEMA ex
125
256
  * model-or-snapshot union, not a plain instance).
126
257
  */
127
258
  export type AnyConfigurationSchemaType = ConfigurationSchemaType<any, any>;
128
- export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType>;
259
+ export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType> & Record<string, any>;
260
+ /**
261
+ * A node of a pluggable element union — a track's, a display's, an adapter's —
262
+ * whichever member it is, naming its `type`. An interface rather than an
263
+ * intersection so a generated doc prints the name.
264
+ */
265
+ export interface PluggableConfigNode extends AnyConfigurationModel {
266
+ type: string;
267
+ }
129
268
  /**
130
269
  * The `XConfigModel` for a **field table** — a `*ConfigSchemaFields` export —
131
270
  * rather than for a whole assembled schema. What it is for is the cast a
@@ -144,7 +283,7 @@ export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType>;
144
283
  * `RowHeightMixin` + `rowHeightConfigSchemaFields` is the worked example, and
145
284
  * `packages/tree-sidebar/CLAUDE.md` has the reasoning.
146
285
  */
147
- export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, BASE extends AnyConfigurationSchemaType | undefined = undefined> = Instance<ConfigurationSchemaType<FIELDS, ConfigurationSchemaOptions<BASE, undefined>>>;
286
+ export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, BASE extends AnyConfigurationSchemaType | undefined = undefined> = Instance<ConfigurationSchemaType<MergeConfigDef<FIELDS, BASE>, ConfigurationSchemaOptions<BASE, undefined>>>;
148
287
  /**
149
288
  * `true` when HOST's `configuration` still narrows slot names, `false` when it
150
289
  * has widened them back to `string`. One line per mixin pins it:
@@ -154,8 +293,7 @@ export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, B
154
293
  * ```
155
294
  *
156
295
  * Worth a named type because the widened form has **no symptom** — a mixin host
157
- * cast to `AnyConfigurationModel`, or to the `ResolvableDisplay & { … }`
158
- * intersection that re-widens, compiles and runs and checks nothing. Every
296
+ * cast to `AnyConfigurationModel` compiles and runs and checks nothing. Every
159
297
  * misspelled slot name below it typechecks, and a misspelled *read* returns
160
298
  * `undefined` with no diagnostic at any layer, so only a sabotage or this
161
299
  * assertion tells the two apart.
@@ -167,11 +305,12 @@ export type HostChecksSlotNames<HOST extends {
167
305
  export type AnyConfigurationSnapshot = SnapshotOut<AnyConfigurationModel>;
168
306
  /**
169
307
  * A value readable as configuration: either a live configuration model or a
170
- * plain snapshot of one. `session.tracks` legitimately holds a mix (live
171
- * `sessionTracks` nodes, plus plain frozen/merged base entries that hydrate to
172
- * MST only on first reference access), and `readConfObject` reads both — so this
173
- * is the honest type at those boundaries. Reserve `AnyConfigurationModel` for
174
- * values that must be live (actions, identity, reference resolution).
308
+ * plain snapshot of one. `session.tracks` holds plain base or merged configs
309
+ * that hydrate to MST only on first reference access, `getTrackById` also
310
+ * answers live assembly-sequence and connection nodes, and `readConfObject`
311
+ * reads both — so this is the honest type at those boundaries. Reserve
312
+ * `AnyConfigurationModel` for values that must be live (actions, identity,
313
+ * reference resolution).
175
314
  */
176
315
  export type AnyConfiguration = AnyConfigurationModel | AnyConfigurationSnapshot;
177
316
  export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Expand a one-file adapter's `{ uri }` shorthand into the single location slot
3
+ * it declares, or pass a snapshot already in full form through untouched.
4
+ *
5
+ * `locationKey` is the only thing that differs between the twenty-odd adapters
6
+ * reading one file (`bedLocation`, `bigWigLocation`, `hicLocation`,
7
+ * `pafLocation`, …). `expandTabixShorthand` is the indexed families' version.
8
+ */
9
+ export declare function expandUriShorthand(snap: Record<string, unknown>, locationKey: string): Record<string, unknown>;
@@ -0,0 +1,16 @@
1
+ import { fillLocations } from './fillLocations.js';
2
+ /**
3
+ * Expand a one-file adapter's `{ uri }` shorthand into the single location slot
4
+ * it declares, or pass a snapshot already in full form through untouched.
5
+ *
6
+ * `locationKey` is the only thing that differs between the twenty-odd adapters
7
+ * reading one file (`bedLocation`, `bigWigLocation`, `hicLocation`,
8
+ * `pafLocation`, …). `expandTabixShorthand` is the indexed families' version.
9
+ */
10
+ export function expandUriShorthand(snap, locationKey) {
11
+ return snap.uri
12
+ ? fillLocations(snap, {
13
+ [locationKey]: { uri: snap.uri, baseUri: snap.baseUri },
14
+ })
15
+ : snap;
16
+ }
@@ -1,30 +1,24 @@
1
1
  import type PluginManager from '../../PluginManager.ts';
2
- import type { AnyConfigurationModel, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotValue } from '../../configuration/index.ts';
2
+ import type { AnyConfigurationModel, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotPath, ConfigurationSlotPathValue, ConfigurationSlotValue } from '../../configuration/index.ts';
3
3
  import type { getSubAdapterType } from '../dataAdapterCache.ts';
4
4
  export declare class BaseAdapter<CONF extends AnyConfigurationModel = AnyConfigurationModel> {
5
5
  id: string;
6
6
  config: CONF;
7
7
  getSubAdapter?: getSubAdapterType;
8
8
  pluginManager?: PluginManager;
9
- sequenceAdapterConfig?: Record<string, unknown>;
10
- static capabilities: string[];
11
- constructor(config?: CONF, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
12
9
  /**
13
- * Stashes the reference-sequence adapter config for adapters that decode
14
- * against the reference (e.g. BAM/CRAM). Set once and never cleared: the
15
- * adapter is cached per adapterConfig (dataAdapterCache), so a given instance
16
- * maps to a single, stable sequence adapter, and an `undefined` from a later
17
- * caller must not wipe a config an earlier one already primed. One `??=` does
18
- * both; callers don't need to guard.
19
- *
20
- * **Instance state rather than a per-call argument, and that is forced.**
21
- * `CramAdapter` binds its `seqFetch` into the `IndexedCramFile` at
22
- * construction, and @gmod/cram invokes it later with `(seqId, start, end)` and
23
- * nothing else — there is no call to thread a config through. Threading it per
24
- * call is the recurring proposal here and it dies at CRAM, which is the
25
- * adapter that needs the reference most.
10
+ * The reference sequence this instance reads, as the adapter config of the
11
+ * assembly the request that built it named. Part of the instance's identity:
12
+ * dataAdapterCache keys a {@link READS_REFERENCE} adapter on its config AND
13
+ * this, so one BAM shown on two genomes is two instances, each reading its
14
+ * own. Undefined when the building request named no genome, and a reference
15
+ * read then throws rather than guessing. Instance state rather than a
16
+ * per-call argument because `CramAdapter` binds its reference fetch into the
17
+ * `IndexedCramFile` at construction, inside @gmod/cram's slice cache.
26
18
  */
27
- setSequenceAdapterConfig(config: Record<string, unknown> | undefined): void;
19
+ readonly sequenceAdapterConfig?: Record<string, unknown>;
20
+ static capabilities: string[];
21
+ constructor(config?: CONF, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager, sequenceAdapterConfig?: Record<string, unknown>);
28
22
  /** shorthand for `readConfObject(this.config, arg)` */
29
- getConf<SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONF>> | string[] = ConfigurationSlotName<ConfigurationSchemaForModel<CONF>>>(arg: SLOT, args?: Record<string, unknown>): SLOT extends string ? ConfigurationSlotValue<ConfigurationSchemaForModel<CONF>, SLOT> : any;
23
+ getConf<const SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONF>> | ConfigurationSlotPath<ConfigurationSchemaForModel<CONF>> = ConfigurationSlotName<ConfigurationSchemaForModel<CONF>>>(arg: SLOT, args?: Record<string, unknown>): SLOT extends string ? ConfigurationSlotValue<ConfigurationSchemaForModel<CONF>, SLOT> : ConfigurationSlotPathValue<ConfigurationSchemaForModel<CONF>, SLOT>;
30
24
  }
@@ -6,32 +6,25 @@ export class BaseAdapter {
6
6
  config;
7
7
  getSubAdapter;
8
8
  pluginManager;
9
+ /**
10
+ * The reference sequence this instance reads, as the adapter config of the
11
+ * assembly the request that built it named. Part of the instance's identity:
12
+ * dataAdapterCache keys a {@link READS_REFERENCE} adapter on its config AND
13
+ * this, so one BAM shown on two genomes is two instances, each reading its
14
+ * own. Undefined when the building request named no genome, and a reference
15
+ * read then throws rather than guessing. Instance state rather than a
16
+ * per-call argument because `CramAdapter` binds its reference fetch into the
17
+ * `IndexedCramFile` at construction, inside @gmod/cram's slice cache.
18
+ */
9
19
  sequenceAdapterConfig;
10
20
  static capabilities = [];
11
- constructor(config = EmptyConfig.create(), getSubAdapter, pluginManager) {
21
+ constructor(config = EmptyConfig.create(), getSubAdapter, pluginManager, sequenceAdapterConfig) {
12
22
  this.config = config;
13
23
  this.getSubAdapter = getSubAdapter;
14
24
  this.pluginManager = pluginManager;
25
+ this.sequenceAdapterConfig = sequenceAdapterConfig;
15
26
  this.id = getAdapterId(config);
16
27
  }
17
- /**
18
- * Stashes the reference-sequence adapter config for adapters that decode
19
- * against the reference (e.g. BAM/CRAM). Set once and never cleared: the
20
- * adapter is cached per adapterConfig (dataAdapterCache), so a given instance
21
- * maps to a single, stable sequence adapter, and an `undefined` from a later
22
- * caller must not wipe a config an earlier one already primed. One `??=` does
23
- * both; callers don't need to guard.
24
- *
25
- * **Instance state rather than a per-call argument, and that is forced.**
26
- * `CramAdapter` binds its `seqFetch` into the `IndexedCramFile` at
27
- * construction, and @gmod/cram invokes it later with `(seqId, start, end)` and
28
- * nothing else — there is no call to thread a config through. Threading it per
29
- * call is the recurring proposal here and it dies at CRAM, which is the
30
- * adapter that needs the reference most.
31
- */
32
- setSequenceAdapterConfig(config) {
33
- this.sequenceAdapterConfig ??= config;
34
- }
35
28
  /** shorthand for `readConfObject(this.config, arg)` */
36
29
  getConf(arg, args) {
37
30
  return readConfObject(this.config, arg, args);