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

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 (637) hide show
  1. package/README.md +1709 -390
  2. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
  3. package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
  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 +37 -14
  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 +49 -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/SequenceFeatureDetails/useSequenceData.js +8 -5
  35. package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
  36. package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
  37. package/esm/BaseFeatureWidget/formatDetails.js +62 -83
  38. package/esm/BaseFeatureWidget/index.d.ts +2 -1
  39. package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
  40. package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
  41. package/esm/BaseFeatureWidget/types.d.ts +12 -6
  42. package/esm/BaseFeatureWidget/util.d.ts +0 -10
  43. package/esm/BaseFeatureWidget/util.js +0 -17
  44. package/esm/CorePlugin.js +34 -3
  45. package/esm/PluginLoader.d.ts +24 -13
  46. package/esm/PluginLoader.js +167 -51
  47. package/esm/PluginManager.d.ts +130 -24
  48. package/esm/PluginManager.js +180 -32
  49. package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
  50. package/esm/ReExports/MuiDataGridReExports.js +2 -2
  51. package/esm/ReExports/coreModules.generated.d.ts +2 -0
  52. package/esm/ReExports/coreModules.generated.js +530 -0
  53. package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
  54. package/esm/ReExports/coreWorkerModules.generated.js +490 -0
  55. package/esm/ReExports/frameworkModules.d.ts +2 -0
  56. package/esm/ReExports/frameworkModules.js +68 -0
  57. package/esm/ReExports/frameworkShared.d.ts +12 -0
  58. package/esm/ReExports/frameworkShared.js +16 -0
  59. package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
  60. package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
  61. package/esm/ReExports/list.js +528 -79
  62. package/esm/ReExports/modules.d.ts +1 -1
  63. package/esm/ReExports/modules.js +10 -165
  64. package/esm/ReExports/registry.d.ts +1 -0
  65. package/esm/ReExports/registry.js +23 -5
  66. package/esm/ReExports/uiStub.d.ts +3 -0
  67. package/esm/ReExports/uiStub.js +33 -0
  68. package/esm/ReExports/workerModules.d.ts +2 -0
  69. package/esm/ReExports/workerModules.js +11 -0
  70. package/esm/TextSearch/TextSearchManager.d.ts +27 -13
  71. package/esm/TextSearch/TextSearchManager.js +77 -36
  72. package/esm/TextSearch/places.d.ts +12 -0
  73. package/esm/TextSearch/places.js +94 -0
  74. package/esm/assemblyManager/assembly.d.ts +21 -19
  75. package/esm/assemblyManager/assembly.js +28 -26
  76. package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
  77. package/esm/assemblyManager/assemblyAdapters.js +8 -2
  78. package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
  79. package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
  80. package/esm/assemblyManager/assemblyManager.d.ts +35 -180
  81. package/esm/assemblyManager/assemblyManager.js +47 -51
  82. package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
  83. package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
  84. package/esm/assemblyManager/geneticCodes.js +2 -5
  85. package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
  86. package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
  87. package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
  88. package/esm/assemblyManager/indexAssemblyNames.js +22 -0
  89. package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
  90. package/esm/assemblyManager/loadRefNameMap.js +4 -9
  91. package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
  92. package/esm/assemblyManager/refNameMapKey.js +12 -0
  93. package/esm/checkPlugins.d.ts +2 -0
  94. package/esm/checkPlugins.js +38 -17
  95. package/esm/configuration/bamIndexFields.d.ts +49 -0
  96. package/esm/configuration/bamIndexFields.js +41 -0
  97. package/esm/configuration/configurationSchema.d.ts +101 -71
  98. package/esm/configuration/configurationSchema.js +207 -134
  99. package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
  100. package/esm/configuration/configurationSchemaUnion.js +56 -0
  101. package/esm/configuration/configurationSlot.d.ts +150 -60
  102. package/esm/configuration/configurationSlot.js +103 -75
  103. package/esm/configuration/fillLocations.d.ts +14 -0
  104. package/esm/configuration/fillLocations.js +14 -0
  105. package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
  106. package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
  107. package/esm/configuration/formatDetailsConfigSchema.js +10 -13
  108. package/esm/configuration/fullConfSnapshot.d.ts +4 -19
  109. package/esm/configuration/fullConfSnapshot.js +30 -52
  110. package/esm/configuration/getConf.d.ts +45 -41
  111. package/esm/configuration/getConf.js +111 -44
  112. package/esm/configuration/index.d.ts +26 -11
  113. package/esm/configuration/index.js +16 -7
  114. package/esm/configuration/indexType.d.ts +26 -0
  115. package/esm/configuration/indexType.js +38 -0
  116. package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
  117. package/esm/configuration/mergeFormatCallbacks.js +13 -10
  118. package/esm/configuration/plot.d.ts +61 -0
  119. package/esm/configuration/plot.js +142 -0
  120. package/esm/configuration/readConfObject.d.ts +2 -24
  121. package/esm/configuration/readConfObject.js +20 -63
  122. package/esm/configuration/requirements.d.ts +37 -0
  123. package/esm/configuration/requirements.js +88 -0
  124. package/esm/configuration/schemaRegistry.d.ts +32 -15
  125. package/esm/configuration/schemaRegistry.js +33 -35
  126. package/esm/configuration/schemaTypes.d.ts +21 -5
  127. package/esm/configuration/schemaTypes.js +66 -55
  128. package/esm/configuration/slotFacade.d.ts +12 -29
  129. package/esm/configuration/slotFacade.js +44 -23
  130. package/esm/configuration/snapshotPreprocess.d.ts +43 -0
  131. package/esm/configuration/snapshotPreprocess.js +161 -0
  132. package/esm/configuration/tabixIndexFields.d.ts +30 -4
  133. package/esm/configuration/tabixIndexFields.js +21 -4
  134. package/esm/configuration/tabixShorthand.d.ts +34 -17
  135. package/esm/configuration/tabixShorthand.js +49 -22
  136. package/esm/configuration/types.d.ts +182 -43
  137. package/esm/configuration/uriShorthand.d.ts +9 -0
  138. package/esm/configuration/uriShorthand.js +16 -0
  139. package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
  140. package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
  141. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
  142. package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
  143. package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
  144. package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
  145. package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
  146. package/esm/data_adapters/BaseAdapter/index.js +1 -0
  147. package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
  148. package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
  149. package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
  150. package/esm/data_adapters/BaseAdapter/stats.js +52 -13
  151. package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
  152. package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
  153. package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
  154. package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
  155. package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
  156. package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
  157. package/esm/data_adapters/dataAdapterCache.js +44 -10
  158. package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
  159. package/esm/data_adapters/getFeatureAdapter.js +8 -8
  160. package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
  161. package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
  162. package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
  163. package/esm/pluggableElementTypes/AdapterType.js +1 -1
  164. package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
  165. package/esm/pluggableElementTypes/DisplayType.js +28 -12
  166. package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
  167. package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
  168. package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
  169. package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
  170. package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
  171. package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
  172. package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
  173. package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
  174. package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
  175. package/esm/pluggableElementTypes/ViewType.js +32 -4
  176. package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
  177. package/esm/pluggableElementTypes/WidgetType.js +6 -0
  178. package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
  179. package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
  180. package/esm/pluggableElementTypes/extendElementType.js +9 -5
  181. package/esm/pluggableElementTypes/index.d.ts +2 -1
  182. package/esm/pluggableElementTypes/index.js +2 -9
  183. package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
  184. package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
  185. package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
  186. package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
  187. package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
  188. package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
  189. package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
  190. package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
  191. package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
  192. package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
  193. package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
  194. package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
  195. package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
  196. package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
  197. package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
  198. package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
  199. package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
  200. package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
  201. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
  202. package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
  203. package/esm/pluggableElementTypes/models/index.d.ts +2 -3
  204. package/esm/pluggableElementTypes/models/index.js +2 -3
  205. package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
  206. package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
  207. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
  208. package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
  209. package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
  210. package/esm/pluginDefinitions.d.ts +34 -7
  211. package/esm/pluginDefinitions.js +54 -20
  212. package/esm/rpc/BaseRpcDriver.d.ts +2 -2
  213. package/esm/rpc/BaseRpcDriver.js +25 -30
  214. package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
  215. package/esm/rpc/MainThreadRpcDriver.js +13 -8
  216. package/esm/rpc/RpcClient.d.ts +18 -6
  217. package/esm/rpc/RpcClient.js +51 -16
  218. package/esm/rpc/RpcManager.d.ts +14 -10
  219. package/esm/rpc/RpcManager.js +11 -1
  220. package/esm/rpc/RpcRegistry.d.ts +40 -7
  221. package/esm/rpc/RpcServer.d.ts +3 -1
  222. package/esm/rpc/RpcServer.js +19 -12
  223. package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
  224. package/esm/rpc/WebWorkerRpcDriver.js +64 -68
  225. package/esm/rpc/byteBudget.d.ts +20 -5
  226. package/esm/rpc/byteBudget.js +16 -5
  227. package/esm/rpc/configSchema.d.ts +7 -21
  228. package/esm/rpc/coreRpcMethods.d.ts +4 -0
  229. package/esm/rpc/coreRpcMethods.js +4 -0
  230. package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
  231. package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
  232. package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
  233. package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
  234. package/esm/rpc/methods/CoreGetExportData.js +3 -4
  235. package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
  236. package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
  237. package/esm/rpc/methods/CoreGetFeatures.js +3 -5
  238. package/esm/rpc/methods/CoreGetRefNames.js +2 -12
  239. package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
  240. package/esm/rpc/methods/CoreGetSequence.js +2 -2
  241. package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
  242. package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
  243. package/esm/rpc/methods/layerFeatures.d.ts +33 -0
  244. package/esm/rpc/methods/layerFeatures.js +29 -0
  245. package/esm/svg/SvgExport.js +6 -7
  246. package/esm/svg/SvgThemeProviders.d.ts +12 -0
  247. package/esm/svg/SvgThemeProviders.js +15 -0
  248. package/esm/svg/exportViewSvg.d.ts +28 -0
  249. package/esm/svg/exportViewSvg.js +13 -0
  250. package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
  251. package/esm/svg/normalizeSvgMarkup.js +99 -0
  252. package/esm/svg/serializeSvg.d.ts +7 -0
  253. package/esm/svg/serializeSvg.js +11 -0
  254. package/esm/svg/svgId.d.ts +1 -1
  255. package/esm/svg/svgId.js +1 -1
  256. package/esm/svg/svgReady.d.ts +9 -7
  257. package/esm/svg/svgReady.js +8 -7
  258. package/esm/svg/trackNames.d.ts +7 -5
  259. package/esm/svg/trackNames.js +12 -9
  260. package/esm/svg/wrapSvgExport.js +6 -74
  261. package/esm/ui/AddCustomPluginDialog.js +3 -8
  262. package/esm/ui/AppReadyMarker.d.ts +45 -0
  263. package/esm/ui/AppReadyMarker.js +89 -0
  264. package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
  265. package/esm/ui/CascadingMenu.js +181 -104
  266. package/esm/ui/DropDownMenu.js +2 -1
  267. package/esm/ui/ErrorBanner.js +1 -1
  268. package/esm/ui/ErrorBoundary.d.ts +2 -2
  269. package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
  270. package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
  271. package/esm/ui/ExportSvgDialog.d.ts +1 -1
  272. package/esm/ui/FileDropZone.js +2 -1
  273. package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
  274. package/esm/ui/HoverMenu.d.ts +1 -2
  275. package/esm/ui/HoverMenu.js +6 -3
  276. package/esm/ui/JexlFilterDialog.d.ts +13 -10
  277. package/esm/ui/JexlFilterDialog.js +122 -50
  278. package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
  279. package/esm/ui/JexlFilterRowEditors.js +90 -0
  280. package/esm/ui/LazyBaseTooltip.d.ts +4 -0
  281. package/esm/ui/LazyBaseTooltip.js +9 -0
  282. package/esm/ui/LegendSwatchGlyph.js +26 -21
  283. package/esm/ui/LoadingOverlay.d.ts +14 -0
  284. package/esm/ui/LoadingOverlay.js +4 -2
  285. package/esm/ui/MenuTypes.d.ts +23 -53
  286. package/esm/ui/MenuTypes.js +3 -0
  287. package/esm/ui/MonospaceTextField.d.ts +2 -1
  288. package/esm/ui/MonospaceTextField.js +23 -20
  289. package/esm/ui/PaletteContext.d.ts +10 -5
  290. package/esm/ui/PaletteContext.js +44 -6
  291. package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
  292. package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
  293. package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
  294. package/esm/ui/RefNameAutocomplete/index.js +8 -2
  295. package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
  296. package/esm/ui/RefNameAutocomplete/util.js +42 -1
  297. package/esm/ui/ResizeHandle.d.ts +3 -1
  298. package/esm/ui/ResizeHandle.js +44 -11
  299. package/esm/ui/ScrollChrome.d.ts +13 -0
  300. package/esm/ui/ScrollChrome.js +11 -0
  301. package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
  302. package/esm/ui/ScrollEdgeShadow.js +14 -35
  303. package/esm/ui/ScrollZoomToggle.d.ts +4 -27
  304. package/esm/ui/ScrollZoomToggle.js +34 -51
  305. package/esm/ui/SessionJsonPanel.d.ts +3 -0
  306. package/esm/ui/SessionJsonPanel.js +14 -0
  307. package/esm/ui/SettingsChangesTable.d.ts +1 -0
  308. package/esm/ui/SettingsChangesTable.js +49 -11
  309. package/esm/ui/ShareLinkField.d.ts +1 -3
  310. package/esm/ui/ShareLinkField.js +13 -40
  311. package/esm/ui/SizeSliderRow.d.ts +1 -3
  312. package/esm/ui/SizeSliderRow.js +4 -6
  313. package/esm/ui/SnackbarModel.js +79 -67
  314. package/esm/ui/StatusProgressBar.js +2 -2
  315. package/esm/ui/SvgColorLegend.d.ts +9 -4
  316. package/esm/ui/SvgColorLegend.js +82 -41
  317. package/esm/ui/VerticalScrollbar.d.ts +13 -34
  318. package/esm/ui/VerticalScrollbar.js +29 -83
  319. package/esm/ui/ViewLoadingScreen.d.ts +5 -4
  320. package/esm/ui/ViewLoadingScreen.js +8 -32
  321. package/esm/ui/colorScale.d.ts +92 -0
  322. package/esm/ui/colorScale.js +72 -0
  323. package/esm/ui/colors.d.ts +64 -0
  324. package/esm/ui/colors.js +230 -1
  325. package/esm/ui/hoverBoxStyle.d.ts +14 -2
  326. package/esm/ui/hoverBoxStyle.js +17 -2
  327. package/esm/ui/index.d.ts +12 -12
  328. package/esm/ui/index.js +14 -22
  329. package/esm/ui/launchViewMenu.js +15 -5
  330. package/esm/ui/legendMenuItem.d.ts +10 -32
  331. package/esm/ui/legendMenuItem.js +9 -36
  332. package/esm/ui/legendSpec.d.ts +15 -8
  333. package/esm/ui/legendSpec.js +14 -23
  334. package/esm/ui/makeSizeMenu.d.ts +0 -6
  335. package/esm/ui/makeSizeMenu.js +6 -30
  336. package/esm/ui/measureLegendText.js +1 -1
  337. package/esm/ui/menuItemAdornment.d.ts +9 -20
  338. package/esm/ui/menuItemAdornment.js +10 -32
  339. package/esm/ui/menuItems.d.ts +2 -7
  340. package/esm/ui/menuItems.js +1 -6
  341. package/esm/ui/multiTrackMenuItems.d.ts +6 -0
  342. package/esm/ui/palette.d.ts +118 -116
  343. package/esm/ui/palette.js +114 -75
  344. package/esm/ui/replaceViewAction.d.ts +1 -1
  345. package/esm/ui/replaceViewAction.js +1 -1
  346. package/esm/ui/theme.d.ts +43 -119
  347. package/esm/ui/theme.js +62 -78
  348. package/esm/ui/toggleMenuItems.d.ts +1 -3
  349. package/esm/ui/toggleMenuItems.js +6 -5
  350. package/esm/ui/useAssemblySelection.d.ts +4 -4
  351. package/esm/ui/viewHeaderHeight.d.ts +1 -0
  352. package/esm/ui/viewHeaderHeight.js +1 -0
  353. package/esm/util/Base1DUtils.d.ts +5 -3
  354. package/esm/util/Base1DUtils.js +14 -6
  355. package/esm/util/Base1DViewModel.d.ts +2 -1
  356. package/esm/util/Base1DViewModel.js +3 -2
  357. package/esm/util/SvgCanvas.d.ts +15 -13
  358. package/esm/util/SvgCanvas.js +76 -56
  359. package/esm/util/TimeTraveller.d.ts +3 -0
  360. package/esm/util/TimeTraveller.js +34 -2
  361. package/esm/util/aborting.d.ts +39 -0
  362. package/esm/util/aborting.js +88 -6
  363. package/esm/util/adapterMetadata.d.ts +1 -1
  364. package/esm/util/adapterMetadata.js +6 -5
  365. package/esm/util/addAndShowTrack.d.ts +2 -5
  366. package/esm/util/addAndShowTrack.js +5 -1
  367. package/esm/util/addRelativeUris.d.ts +17 -5
  368. package/esm/util/addRelativeUris.js +46 -10
  369. package/esm/util/addTrackFromWidget.d.ts +2 -5
  370. package/esm/util/addTrackFromWidget.js +5 -4
  371. package/esm/util/aggregateFieldName.d.ts +10 -0
  372. package/esm/util/aggregateFieldName.js +8 -0
  373. package/esm/util/analytics.js +46 -13
  374. package/esm/util/animationAllowed.d.ts +9 -0
  375. package/esm/util/animationAllowed.js +13 -0
  376. package/esm/util/applyRowResizeWheel.d.ts +10 -5
  377. package/esm/util/applyRowResizeWheel.js +10 -21
  378. package/esm/util/bandHeight.d.ts +10 -0
  379. package/esm/util/bandHeight.js +29 -0
  380. package/esm/util/bandLayout.d.ts +4 -4
  381. package/esm/util/bandLayout.js +4 -4
  382. package/esm/util/baseDisplayConfig.d.ts +8 -0
  383. package/esm/util/baseDisplayConfig.js +27 -0
  384. package/esm/util/bezierConnector.d.ts +4 -3
  385. package/esm/util/bezierConnector.js +38 -45
  386. package/esm/util/bgzfWorkerPool.d.ts +20 -74
  387. package/esm/util/bgzfWorkerPool.js +20 -74
  388. package/esm/util/binnedAggregate.d.ts +17 -0
  389. package/esm/util/binnedAggregate.js +275 -0
  390. package/esm/util/cacheBudgets.d.ts +22 -19
  391. package/esm/util/cacheBudgets.js +22 -19
  392. package/esm/util/cachedSetup.d.ts +16 -6
  393. package/esm/util/cachedSetup.js +108 -38
  394. package/esm/util/categoricalField.d.ts +56 -0
  395. package/esm/util/categoricalField.js +73 -0
  396. package/esm/util/cellMatches.d.ts +23 -0
  397. package/esm/util/cellMatches.js +264 -0
  398. package/esm/util/cellsStep.d.ts +29 -0
  399. package/esm/util/cellsStep.js +437 -0
  400. package/esm/util/clampToContig.d.ts +17 -0
  401. package/esm/util/clampToContig.js +19 -0
  402. package/esm/util/coarseStripHTML.js +1 -2
  403. package/esm/util/color/cssColorsLevel4.d.ts +1 -0
  404. package/esm/util/color/cssColorsLevel4.js +1 -0
  405. package/esm/util/color/index.d.ts +5 -3
  406. package/esm/util/color/index.js +7 -4
  407. package/esm/util/colorBits.d.ts +3 -3
  408. package/esm/util/colorBits.js +19 -44
  409. package/esm/util/colorRamp.d.ts +49 -5
  410. package/esm/util/colorRamp.js +169 -18
  411. package/esm/util/colorScale.d.ts +156 -0
  412. package/esm/util/colorScale.js +243 -0
  413. package/esm/util/colorSchemes.d.ts +21 -0
  414. package/esm/util/colorSchemes.js +30 -0
  415. package/esm/util/copyToClipboard.js +8 -1
  416. package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
  417. package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
  418. package/esm/util/createSvgRasterCanvas.d.ts +10 -0
  419. package/esm/util/cssColorParse.d.ts +15 -0
  420. package/esm/util/cssColorParse.js +53 -0
  421. package/esm/util/diagonalizeRegions.d.ts +2 -3
  422. package/esm/util/diagonalizeRegions.js +8 -13
  423. package/esm/util/expandLooseSearchIndex.d.ts +19 -0
  424. package/esm/util/expandLooseSearchIndex.js +29 -0
  425. package/esm/util/featureTable.d.ts +224 -0
  426. package/esm/util/featureTable.js +366 -0
  427. package/esm/util/featureTransforms.d.ts +81 -0
  428. package/esm/util/featureTransforms.js +1231 -0
  429. package/esm/util/featureTypes.d.ts +24 -0
  430. package/esm/util/featureTypes.js +35 -0
  431. package/esm/util/fetchAndMaybeUnzip.js +16 -9
  432. package/esm/util/fetchContext.d.ts +7 -8
  433. package/esm/util/fetchContext.js +3 -3
  434. package/esm/util/fetchHub.d.ts +4 -2
  435. package/esm/util/fetchHub.js +2 -2
  436. package/esm/util/fetchPhases.d.ts +10 -10
  437. package/esm/util/fetchSeq.d.ts +2 -3
  438. package/esm/util/fetchSeq.js +2 -2
  439. package/esm/util/fieldReader.d.ts +17 -0
  440. package/esm/util/fieldReader.js +62 -0
  441. package/esm/util/formatBytes.js +1 -1
  442. package/esm/util/formatGuessers.d.ts +25 -14
  443. package/esm/util/formatGuessers.js +42 -27
  444. package/esm/util/formatRelativeTime.js +1 -1
  445. package/esm/util/freezeDeep.d.ts +8 -10
  446. package/esm/util/freezeDeep.js +8 -10
  447. package/esm/util/getLocationUri.d.ts +2 -1
  448. package/esm/util/getLocationUri.js +8 -2
  449. package/esm/util/groupKeys.d.ts +76 -0
  450. package/esm/util/groupKeys.js +156 -0
  451. package/esm/util/highlights.d.ts +10 -6
  452. package/esm/util/highlights.js +12 -25
  453. package/esm/util/hooks.d.ts +31 -2
  454. package/esm/util/hooks.js +72 -3
  455. package/esm/util/index.d.ts +11 -11
  456. package/esm/util/index.js +11 -10
  457. package/esm/util/indexCandidates.d.ts +1 -31
  458. package/esm/util/indexCandidates.js +5 -63
  459. package/esm/util/installFetch.d.ts +77 -37
  460. package/esm/util/installFetch.js +65 -38
  461. package/esm/util/installInitAutorun.d.ts +14 -13
  462. package/esm/util/installInitAutorun.js +17 -17
  463. package/esm/util/installPrerequisiteFetch.d.ts +115 -0
  464. package/esm/util/installPrerequisiteFetch.js +111 -0
  465. package/esm/util/intervals.js +9 -4
  466. package/esm/util/io/index.js +22 -15
  467. package/esm/util/isDataCurrent.d.ts +7 -5
  468. package/esm/util/isDataCurrent.js +9 -6
  469. package/esm/util/isTextEntryFocused.d.ts +7 -0
  470. package/esm/util/isTextEntryFocused.js +16 -0
  471. package/esm/util/jexl.js +24 -21
  472. package/esm/util/jexlFilterRows.d.ts +89 -0
  473. package/esm/util/jexlFilterRows.js +252 -0
  474. package/esm/util/jexlFilters.d.ts +32 -57
  475. package/esm/util/jexlFilters.js +31 -29
  476. package/esm/util/jexlStrings.d.ts +3 -4
  477. package/esm/util/jexlStrings.js +2 -3
  478. package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
  479. package/esm/util/layouts/GranularRectLayout.js +25 -8
  480. package/esm/util/lazyAfterAttach.d.ts +13 -0
  481. package/esm/util/lazyAfterAttach.js +31 -0
  482. package/esm/util/lazyWithPreload.d.ts +19 -0
  483. package/esm/util/lazyWithPreload.js +27 -0
  484. package/esm/util/legendCandidates.d.ts +72 -0
  485. package/esm/util/legendCandidates.js +138 -0
  486. package/esm/util/locString.js +5 -2
  487. package/esm/util/localStorage.js +4 -4
  488. package/esm/util/markEncoding.d.ts +150 -0
  489. package/esm/util/markEncoding.js +885 -0
  490. package/esm/util/markEncodingTypes.d.ts +595 -0
  491. package/esm/util/markEncodingTypes.js +8 -0
  492. package/esm/util/mst-reflection.d.ts +2 -20
  493. package/esm/util/mst-reflection.js +3 -53
  494. package/esm/util/mstUtils.d.ts +31 -23
  495. package/esm/util/mstUtils.js +39 -24
  496. package/esm/util/numericUtils.d.ts +7 -0
  497. package/esm/util/numericUtils.js +16 -0
  498. package/esm/util/numericValue.d.ts +14 -0
  499. package/esm/util/numericValue.js +34 -0
  500. package/esm/util/openFeatureWidget.d.ts +5 -0
  501. package/esm/util/openFeatureWidget.js +2 -2
  502. package/esm/util/openViews.d.ts +17 -0
  503. package/esm/util/openViews.js +22 -0
  504. package/esm/util/parentWalk.d.ts +1 -1
  505. package/esm/util/parentWalk.js +1 -1
  506. package/esm/util/parseLineByLine.d.ts +4 -5
  507. package/esm/util/parseLineByLine.js +8 -14
  508. package/esm/util/pluginStore.d.ts +6 -8
  509. package/esm/util/pluginStore.js +17 -16
  510. package/esm/util/preloadComponent.d.ts +5 -0
  511. package/esm/util/preloadComponent.js +11 -0
  512. package/esm/util/progress.d.ts +22 -22
  513. package/esm/util/progress.js +27 -26
  514. package/esm/util/quantileExtent.d.ts +49 -0
  515. package/esm/util/quantileExtent.js +162 -0
  516. package/esm/util/range.d.ts +13 -9
  517. package/esm/util/range.js +17 -8
  518. package/esm/util/renameRegions.d.ts +26 -6
  519. package/esm/util/renameRegions.js +68 -54
  520. package/esm/util/renderToStaticMarkup.js +24 -14
  521. package/esm/util/rxjs.d.ts +23 -8
  522. package/esm/util/rxjs.js +61 -15
  523. package/esm/util/samplesTsv.d.ts +49 -0
  524. package/esm/util/samplesTsv.js +86 -0
  525. package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
  526. package/esm/util/scheduleDetachedDestroy.js +24 -0
  527. package/esm/util/scrollLatch.d.ts +1 -0
  528. package/esm/util/scrollLatch.js +8 -0
  529. package/esm/util/selectEncodedFeature.d.ts +16 -0
  530. package/esm/util/selectEncodedFeature.js +34 -0
  531. package/esm/util/sessionSharing.d.ts +7 -5
  532. package/esm/util/sessionSharing.js +23 -23
  533. package/esm/util/shapeNameList.d.ts +2 -0
  534. package/esm/util/shapeNameList.js +6 -0
  535. package/esm/util/shapeNames.d.ts +7 -0
  536. package/esm/util/shapeNames.js +11 -0
  537. package/esm/util/simpleFeature.d.ts +0 -1
  538. package/esm/util/springAnimate.js +1 -1
  539. package/esm/util/starFusion.d.ts +26 -0
  540. package/esm/util/starFusion.js +37 -0
  541. package/esm/util/stepTables.d.ts +96 -0
  542. package/esm/util/stepTables.js +277 -0
  543. package/esm/util/svAlt.d.ts +145 -0
  544. package/esm/util/svAlt.js +364 -0
  545. package/esm/util/svgColorProps.d.ts +11 -0
  546. package/esm/util/svgColorProps.js +28 -1
  547. package/esm/util/systemColorScheme.d.ts +12 -0
  548. package/esm/util/systemColorScheme.js +27 -0
  549. package/esm/util/tabix.d.ts +19 -10
  550. package/esm/util/tabix.js +19 -14
  551. package/esm/util/thresholdScale.d.ts +91 -0
  552. package/esm/util/thresholdScale.js +166 -0
  553. package/esm/util/timeGate.d.ts +4 -5
  554. package/esm/util/timeGate.js +4 -5
  555. package/esm/util/trackConfigDelta.d.ts +26 -26
  556. package/esm/util/trackConfigDelta.js +63 -47
  557. package/esm/util/tracks.d.ts +120 -66
  558. package/esm/util/tracks.js +501 -151
  559. package/esm/util/translateTranscript.d.ts +44 -0
  560. package/esm/util/translateTranscript.js +102 -0
  561. package/esm/util/types/data.d.ts +0 -2
  562. package/esm/util/types/index.d.ts +121 -22
  563. package/esm/util/types/index.js +9 -0
  564. package/esm/util/types/mst.d.ts +3 -0
  565. package/esm/util/types/mst.js +4 -0
  566. package/esm/util/types/renameIds.d.ts +1 -0
  567. package/esm/util/types/renameIds.js +29 -0
  568. package/esm/util/types/services.d.ts +1 -1
  569. package/esm/util/unknownSnapshotKeys.d.ts +53 -0
  570. package/esm/util/unknownSnapshotKeys.js +76 -0
  571. package/esm/util/useFeatureSequence.js +5 -5
  572. package/esm/util/useFetch.d.ts +3 -4
  573. package/esm/util/useFetch.js +19 -10
  574. package/esm/util/useFetchPlugins.d.ts +6 -2
  575. package/esm/util/useFetchPlugins.js +7 -3
  576. package/esm/util/usePanZoom.js +10 -3
  577. package/esm/util/usePanelVirtualScroll.d.ts +7 -35
  578. package/esm/util/usePanelVirtualScroll.js +9 -36
  579. package/esm/util/useRafCommit.js +1 -0
  580. package/esm/util/useRowVirtualScroll.d.ts +6 -29
  581. package/esm/util/useRowVirtualScroll.js +8 -49
  582. package/esm/util/useVirtualScrollWheel.d.ts +20 -4
  583. package/esm/util/useVirtualScrollWheel.js +40 -74
  584. package/esm/util/viewHighlights.d.ts +3 -0
  585. package/esm/util/viewHighlights.js +5 -0
  586. package/esm/util/viewStatus.d.ts +47 -15
  587. package/esm/util/viewStatus.js +34 -0
  588. package/esm/util/wheelZoom.d.ts +7 -1
  589. package/esm/util/wheelZoom.js +85 -19
  590. package/esm/util/whenViewSettled.d.ts +55 -8
  591. package/esm/util/whenViewSettled.js +56 -7
  592. package/esm/util/withFeatureDetails.js +4 -0
  593. package/esm/util/withLaunchInput.d.ts +174 -0
  594. package/esm/util/withLaunchInput.js +274 -0
  595. package/package.json +75 -24
  596. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
  597. package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
  598. package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
  599. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
  600. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
  601. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
  602. package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
  603. package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
  604. package/esm/ReExports/BaseFeatureDetails.js +0 -10
  605. package/esm/ReExports/index.d.ts +0 -1
  606. package/esm/ReExports/index.js +0 -1
  607. package/esm/ReExports/publicUtil.d.ts +0 -1
  608. package/esm/ReExports/publicUtil.js +0 -28
  609. package/esm/configuration/promotableDefaults.d.ts +0 -199
  610. package/esm/configuration/promotableDefaults.js +0 -326
  611. package/esm/configuration/promotablePin.d.ts +0 -55
  612. package/esm/configuration/promotablePin.js +0 -1
  613. package/esm/configuration/promotableResolve.d.ts +0 -108
  614. package/esm/configuration/promotableResolve.js +0 -117
  615. package/esm/configuration/promotableSlots.d.ts +0 -12
  616. package/esm/configuration/promotableSlots.js +0 -45
  617. package/esm/configuration/slotShape.d.ts +0 -12
  618. package/esm/configuration/slotShape.js +0 -84
  619. package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
  620. package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
  621. package/esm/ui/PinAdornment.d.ts +0 -5
  622. package/esm/ui/PinAdornment.js +0 -79
  623. package/esm/ui/SvgGradientLegend.d.ts +0 -26
  624. package/esm/ui/SvgGradientLegend.js +0 -26
  625. package/esm/ui/highlightChipReveal.d.ts +0 -32
  626. package/esm/ui/highlightChipReveal.js +0 -39
  627. package/esm/ui/promotableMenuItems.d.ts +0 -19
  628. package/esm/ui/promotableMenuItems.js +0 -89
  629. package/esm/ui/promotablePinCoverage.d.ts +0 -44
  630. package/esm/ui/promotablePinCoverage.js +0 -87
  631. package/esm/util/applyInitSettings.d.ts +0 -79
  632. package/esm/util/applyInitSettings.js +0 -91
  633. package/esm/util/openDisplays.d.ts +0 -23
  634. package/esm/util/openDisplays.js +0 -79
  635. package/esm/util/stopToken.d.ts +0 -211
  636. package/esm/util/stopToken.js +0 -438
  637. /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Classification of a feature from its `type` string alone, for the plugins
3
+ * that decide something about a feature they did not parse. A type is the only
4
+ * thing a display, a menu or a widget can ask about a feature without knowing
5
+ * which adapter produced it, so these live in core rather than beside any one
6
+ * of their callers.
7
+ */
8
+ /**
9
+ * Whether the type names a unit of transcription — a gene, a transcript, or an
10
+ * RNA, including the pseudogene and V(D)J segment spellings. This is the
11
+ * question "does this feature have exons", not "can this feature be spliced":
12
+ * an alignment splices too and is deliberately not gene-like, because a caller
13
+ * that means to launch a protein view or read a CDS would be wrong about it.
14
+ */
15
+ export declare function isGeneLikeType(type: string | undefined): boolean;
16
+ /**
17
+ * Whether the type names a sequence alignment — SO `match` and its subtypes
18
+ * (`cDNA_match`, `EST_match`, `nucleotide_match`, `protein_match`,
19
+ * `translated_nucleotide_match`), whose `match_part` children are the aligned
20
+ * blocks and whose gaps between them are introns when the aligned sequence was
21
+ * a transcript. Separate from `isGeneLikeType` on purpose: an EST alignment is
22
+ * evidence for a gene, not one.
23
+ */
24
+ export declare function isSequenceMatchType(type: string | undefined): boolean;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Classification of a feature from its `type` string alone, for the plugins
3
+ * that decide something about a feature they did not parse. A type is the only
4
+ * thing a display, a menu or a widget can ask about a feature without knowing
5
+ * which adapter produced it, so these live in core rather than beside any one
6
+ * of their callers.
7
+ */
8
+ // Anchored at the end so 'intergenic_region' is not a gene, 'rnapol_binding_site'
9
+ // is not an RNA, and 'transcriptional_cis_regulatory_region' is not a
10
+ // transcript.
11
+ const GENE_LIKE_TYPE = /gene(_segment)?$|rna$|transcript$/;
12
+ /**
13
+ * Whether the type names a unit of transcription — a gene, a transcript, or an
14
+ * RNA, including the pseudogene and V(D)J segment spellings. This is the
15
+ * question "does this feature have exons", not "can this feature be spliced":
16
+ * an alignment splices too and is deliberately not gene-like, because a caller
17
+ * that means to launch a protein view or read a CDS would be wrong about it.
18
+ */
19
+ export function isGeneLikeType(type) {
20
+ return type !== undefined && GENE_LIKE_TYPE.test(type.toLowerCase());
21
+ }
22
+ // SO `match` and every subtype of it is spelled `<something>_match`, so the
23
+ // suffix is the family. `match_part`, the child, is excluded by the anchor.
24
+ const SEQUENCE_MATCH_TYPE = /(^|_)match$/;
25
+ /**
26
+ * Whether the type names a sequence alignment — SO `match` and its subtypes
27
+ * (`cDNA_match`, `EST_match`, `nucleotide_match`, `protein_match`,
28
+ * `translated_nucleotide_match`), whose `match_part` children are the aligned
29
+ * blocks and whose gaps between them are introns when the aligned sequence was
30
+ * a transcript. Separate from `isGeneLikeType` on purpose: an EST alignment is
31
+ * evidence for a gene, not one.
32
+ */
33
+ export function isSequenceMatchType(type) {
34
+ return type !== undefined && SEQUENCE_MATCH_TYPE.test(type.toLowerCase());
35
+ }
@@ -1,6 +1,8 @@
1
1
  import { redactSource } from './getLocationUri.js';
2
2
  import { downloadStatus, phaseOf, updateStatus } from './progress.js';
3
- import { withStopTokenSignal } from './stopToken.js';
3
+ function loadInflater() {
4
+ return import('@gmod/bgzf-filehandle');
5
+ }
4
6
  export function isGzip(buf) {
5
7
  return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
6
8
  }
@@ -36,22 +38,27 @@ label = 'Downloading file') {
36
38
  const phase = loc.source === undefined
37
39
  ? label
38
40
  : { message: phaseOf(label), source: redactSource(loc.source) };
39
- const { statusCallback, stopToken } = opts;
40
- // the stop token becomes the read's signal, so a cancelled whole-file load
41
- // drops at the socket rather than downloading a multi-GB body to completion
42
- const buf = await withStopTokenSignal(stopToken, signal => downloadStatus(phase, statusCallback, onProgress => loc.readFile({ ...opts, onProgress, signal })));
41
+ const { statusCallback, signal } = opts;
43
42
  // the inflater is imported dynamically because this module is reachable from
44
43
  // the core/util barrel, so a static import put bgzf-filehandle + pako
45
- // (~180KB) on the startup path of every page load; only an actually-gzipped
46
- // file needs them
44
+ // (~180KB) on the startup path of every page load. A name ending .gz starts
45
+ // that import beside the download instead of after it; the bytes still decide
46
+ // whether to inflate.
47
+ const inflater = /\.gz($|[?#])/.test(loc.source ?? '')
48
+ ? loadInflater()
49
+ : undefined;
50
+ inflater?.catch(() => { });
51
+ // the signal reaches the read, so a cancelled whole-file load drops at the
52
+ // socket rather than downloading a multi-GB body to completion
53
+ const buf = await downloadStatus(phase, statusCallback, onProgress => loc.readFile({ ...opts, onProgress, signal }));
47
54
  return isGzip(buf)
48
55
  ? await updateStatus('Unzipping', statusCallback, async () => {
49
- const { unzip } = await import('@gmod/bgzf-filehandle');
56
+ const { unzip } = await (inflater ?? loadInflater());
50
57
  return unzip(buf);
51
58
  },
52
59
  // a cancel landing here is otherwise discovered only by whatever parses
53
60
  // the result, after a whole-file inflate has run to completion
54
- stopToken)
61
+ signal)
55
62
  : buf;
56
63
  }
57
64
  export async function fetchAndMaybeUnzipText(loc, opts, label) {
@@ -1,9 +1,8 @@
1
1
  import type { RpcCallArgs, RpcCallReturn } from '../rpc/RpcRegistry.ts';
2
2
  import type { StatusCallback } from './progress.ts';
3
- import type { StopToken } from './stopToken.ts';
4
3
  import type { IStateTreeNode } from '@jbrowse/mobx-state-tree';
5
4
  export interface FetchContext {
6
- stopToken: StopToken;
5
+ signal: AbortSignal;
7
6
  isStale: () => boolean;
8
7
  /**
9
8
  * The RPC `statusCallback` for the work this context describes: guarded to
@@ -24,23 +23,23 @@ export interface FetchContext {
24
23
  /**
25
24
  * The one way a fetch calls an RPC: the registry-typed
26
25
  * `rpcManager.call(rpcSessionId, method, args)` with this context's
27
- * `stopToken` and `statusCallback` injected. Both used to be hand-threaded
26
+ * `signal` and `statusCallback` injected. Both used to be hand-threaded
28
27
  * at every fetch site, and forgetting either was silent — no cancellation
29
28
  * for that display, or no progress — which is exactly the failure class the
30
29
  * envelope makes inexpressible: a fetch cannot issue an RPC the cancel and
31
30
  * the status bar don't know about.
32
31
  *
33
32
  * Declared with a `this` parameter so it reads the *holding* context's
34
- * token and callback — the fan-out copies rebind it to their own status
33
+ * signal and callback — the fan-out copies rebind it to their own status
35
34
  * slot by construction — and so destructuring it off the context is a type
36
35
  * error rather than a stale binding.
37
36
  */
38
- callRpc: <M extends string>(this: FetchContext, method: M, args: Omit<RpcCallArgs<M>, 'stopToken' | 'statusCallback'>) => Promise<RpcCallReturn<M>>;
37
+ callRpc: <M extends string>(this: FetchContext, method: M, args: Omit<RpcCallArgs<M>, 'signal' | 'statusCallback'>) => Promise<RpcCallReturn<M>>;
39
38
  }
40
39
  /**
41
40
  * Build a {@link FetchContext} over a live fetch's primitives. One
42
- * constructor, so every context — `runFetch`'s, the prerequisite skeleton's —
43
- * carries the same `callRpc` envelope.
41
+ * constructor, so every context — `FetchMixin.runFetch`'s and `runFetchOnce`'s
42
+ * alike — carries the same `callRpc` envelope.
44
43
  *
45
44
  * **`self` has to be somewhere `getRpcSessionId` can find one, which in practice
46
45
  * means a track or something under it.** `rpcSessionId` is declared by
@@ -52,7 +51,7 @@ export interface FetchContext {
52
51
  * track, which is what the breakpoint split view's overlay fetch does.
53
52
  */
54
53
  export declare function makeFetchContext(self: IStateTreeNode, base: {
55
- stopToken: StopToken;
54
+ signal: AbortSignal;
56
55
  isStale: () => boolean;
57
56
  statusCallback: StatusCallback;
58
57
  }): FetchContext;
@@ -3,8 +3,8 @@ import { createStatusFanOut } from './progress.js';
3
3
  import { getRpcHost } from './sessionServices.js';
4
4
  /**
5
5
  * Build a {@link FetchContext} over a live fetch's primitives. One
6
- * constructor, so every context — `runFetch`'s, the prerequisite skeleton's —
7
- * carries the same `callRpc` envelope.
6
+ * constructor, so every context — `FetchMixin.runFetch`'s and `runFetchOnce`'s
7
+ * alike — carries the same `callRpc` envelope.
8
8
  *
9
9
  * **`self` has to be somewhere `getRpcSessionId` can find one, which in practice
10
10
  * means a track or something under it.** `rpcSessionId` is declared by
@@ -21,7 +21,7 @@ export function makeFetchContext(self, base) {
21
21
  callRpc(method, args) {
22
22
  return getRpcHost(self).rpcManager.call(getRpcSessionId(self), method, {
23
23
  ...args,
24
- stopToken: this.stopToken,
24
+ signal: this.signal,
25
25
  statusCallback: this.statusCallback,
26
26
  });
27
27
  },
@@ -1,6 +1,6 @@
1
1
  export interface HubConfig {
2
2
  assemblies?: Record<string, unknown>[];
3
- aggregateTextSearchAdapters?: Record<string, unknown>[];
3
+ aggregateTextSearchAdapters?: (string | Record<string, unknown>)[];
4
4
  tracks?: Record<string, unknown>[];
5
5
  [key: string]: unknown;
6
6
  }
@@ -12,4 +12,6 @@ export declare function hubUrl(hub: string): string;
12
12
  * the name straight to `createLinearGenomeView({ assembly: 'hg38' })` for the
13
13
  * common case; call this directly only to cherry-pick tracks from the catalog.
14
14
  */
15
- export declare function fetchHub(hub: string): Promise<HubConfig>;
15
+ export declare function fetchHub(hub: string, { signal }?: {
16
+ signal?: AbortSignal;
17
+ }): Promise<HubConfig>;
@@ -15,9 +15,9 @@ export function hubUrl(hub) {
15
15
  * the name straight to `createLinearGenomeView({ assembly: 'hg38' })` for the
16
16
  * common case; call this directly only to cherry-pick tracks from the catalog.
17
17
  */
18
- export async function fetchHub(hub) {
18
+ export async function fetchHub(hub, { signal } = {}) {
19
19
  const url = hubUrl(hub);
20
- const response = await fetch(url);
20
+ const response = await fetch(url, { signal });
21
21
  if (response.ok) {
22
22
  const config = (await response.json());
23
23
  // hosted configs reference their data relative to the config's own location
@@ -4,10 +4,10 @@
4
4
  * remembered.
5
5
  *
6
6
  * The shared `installFetch` skeleton takes this shape, and so does the LGV
7
- * global family (`installGlobalFetchAutorun`, over `FetchMixin.runFetch`). It
8
- * was the same contract declared twice, with the same three rules explained
9
- * twice, which is a drift axis over rules whose whole value is being the same
10
- * everywhere.
7
+ * global family (`installGlobalFetchAutorun`, a declaration over that same
8
+ * skeleton). It was the same contract declared twice, with the same three rules
9
+ * explained twice, which is a drift axis over rules whose whole value is being
10
+ * the same everywhere.
11
11
  *
12
12
  * `TCtx` is what a family hands its `run`: a `FetchContext` for most of them, a
13
13
  * `ComparativeFetchContext` (that plus adapter config and refName rename) for
@@ -43,7 +43,7 @@ export interface FetchPhases<TArgs, TResult, TCtx> {
43
43
  * gets a dead Retry button — see there.
44
44
  *
45
45
  * What it must **not** do is move a trigger read of its own under a bail-out.
46
- * See ARCHITECTURE.md §"The global-fetch trigger list must be read
46
+ * See reference/FETCH_KEYS.md §"The global-fetch trigger list must be read
47
47
  * unconditionally".
48
48
  */
49
49
  prepare: () => TArgs | undefined;
@@ -56,11 +56,11 @@ export interface FetchPhases<TArgs, TResult, TCtx> {
56
56
  * **Nothing it reads is tracked**, so the payload it assembles cannot widen
57
57
  * the autorun's dependency set the way calling `rpcProps()` in the body would.
58
58
  * Being async is not what buys that — `run` is *called* synchronously, so its
59
- * own prefix down to its first `await` runs wherever the caller was. Each
60
- * family arranges it: the global one reaches `run` through
61
- * `FetchMixin.runFetch`, an MST flow and so an action, which MobX runs
62
- * untracked; the comparative one calls its lifecycle inside `untracked`
63
- * because it has no action to hide behind.
59
+ * own prefix down to its first `await` runs wherever the caller was. The
60
+ * `installFetch` skeleton calls it inside `untracked`, which covers the
61
+ * global and comparative families with it; the per-region family reaches its
62
+ * work through `FetchMixin.runFetch`, an MST flow and so an action, which
63
+ * MobX runs untracked.
64
64
  */
65
65
  run: (args: TArgs, ctx: TCtx) => Promise<TResult | undefined>;
66
66
  /**
@@ -1,12 +1,11 @@
1
1
  import type { StatusCallback } from './progress.ts';
2
- import type { StopToken } from './stopToken.ts';
3
2
  import type { AbstractSessionModel } from './types/index.ts';
4
- export declare function fetchSeq({ start, end, refName, assemblyName, session, stopToken, statusCallback, }: {
3
+ export declare function fetchSeq({ start, end, refName, assemblyName, session, signal, statusCallback, }: {
5
4
  start: number;
6
5
  end: number;
7
6
  refName: string;
8
7
  assemblyName: string;
9
8
  session: AbstractSessionModel;
10
- stopToken?: StopToken;
9
+ signal?: AbortSignal;
11
10
  statusCallback?: StatusCallback;
12
11
  }): Promise<string>;
@@ -1,5 +1,5 @@
1
1
  import { getSequenceAdapterConfig } from '../assemblyManager/getSequenceAdapterConfig.js';
2
- export async function fetchSeq({ start, end, refName, assemblyName, session, stopToken, statusCallback, }) {
2
+ export async function fetchSeq({ start, end, refName, assemblyName, session, signal, statusCallback, }) {
3
3
  const { rpcManager, assemblyManager } = session;
4
4
  const assembly = await assemblyManager.waitForAssembly(assemblyName);
5
5
  if (!assembly) {
@@ -28,7 +28,7 @@ export async function fetchSeq({ start, end, refName, assemblyName, session, sto
28
28
  refName: seqAdapterRefName,
29
29
  assemblyName,
30
30
  },
31
- stopToken,
31
+ signal,
32
32
  statusCallback,
33
33
  });
34
34
  return seq ?? '';
@@ -0,0 +1,17 @@
1
+ import type { JexlInstance } from './jexlStrings.ts';
2
+ import type { Feature } from './simpleFeature.ts';
3
+ /**
4
+ * #api
5
+ * What a channel reads off a feature: a field by name, a dotted path into a
6
+ * structured field where no field carries the whole name (`INFO.SVTYPE` on a
7
+ * VCF record), or a `jexl:` expression over `feature`. A jexl expression that
8
+ * does not compile throws here, once, rather than on every feature.
9
+ */
10
+ export declare function fieldReader(ref: string, jexl: JexlInstance | undefined): (feature: Feature) => unknown;
11
+ /**
12
+ * #api
13
+ * Whether a field ref is a bare name: what `feature.get` answers on its own,
14
+ * with no path to walk and no expression to evaluate. A loop over a plain name
15
+ * keeps the direct call, and only a config that writes a path pays for one.
16
+ */
17
+ export declare function isPlainFieldRef(ref: string): ref is never;
@@ -0,0 +1,62 @@
1
+ import { isJexl, stringToJexlExpression } from './jexlStrings.js';
2
+ import { buildJexlContext } from './simpleFeature.js';
3
+ /**
4
+ * #api
5
+ * What a channel reads off a feature: a field by name, a dotted path into a
6
+ * structured field where no field carries the whole name (`INFO.SVTYPE` on a
7
+ * VCF record), or a `jexl:` expression over `feature`. A jexl expression that
8
+ * does not compile throws here, once, rather than on every feature.
9
+ */
10
+ export function fieldReader(ref, jexl) {
11
+ const path = ref.includes('.') ? ref.split('.') : undefined;
12
+ const rests = path?.map((_, i) => path.slice(i).join('.'));
13
+ if (isJexl(ref)) {
14
+ if (!jexl) {
15
+ throw new Error(`a jexl: field needs a jexl instance (${ref})`);
16
+ }
17
+ const expr = stringToJexlExpression(ref, jexl);
18
+ return feature => expr.eval(buildJexlContext({ feature }));
19
+ }
20
+ return feature => {
21
+ const value = feature.get(ref);
22
+ return value === undefined && path && rests
23
+ ? readPath(feature.get(path[0]), path, rests)
24
+ : value;
25
+ };
26
+ }
27
+ /**
28
+ * #api
29
+ * Whether a field ref is a bare name: what `feature.get` answers on its own,
30
+ * with no path to walk and no expression to evaluate. A loop over a plain name
31
+ * keeps the direct call, and only a config that writes a path pays for one.
32
+ */
33
+ export function isPlainFieldRef(ref) {
34
+ return !ref.includes('.') && !isJexl(ref);
35
+ }
36
+ function readPath(root, path, rests) {
37
+ let value = root;
38
+ for (let i = 1; i < path.length; i++) {
39
+ value =
40
+ typeof value === 'object' && value !== null
41
+ ? Reflect.get(value, path[i])
42
+ : undefined;
43
+ }
44
+ return value ?? readWholeRest(root, path, rests);
45
+ }
46
+ // A path that read nothing by descending tries each level's rest as one key,
47
+ // so `INFO.AF.EAS` reaches a key named `AF.EAS`, which VCF 4.3 allows. Only a
48
+ // miss pays for it: a path that resolves is the plain walk above.
49
+ function readWholeRest(root, path, rests) {
50
+ let value = root;
51
+ for (let i = 1; i < path.length - 1; i++) {
52
+ if (typeof value !== 'object' || value === null) {
53
+ return undefined;
54
+ }
55
+ const whole = Reflect.get(value, rests[i]);
56
+ if (whole !== undefined) {
57
+ return whole ?? undefined;
58
+ }
59
+ value = Reflect.get(value, path[i]);
60
+ }
61
+ return undefined;
62
+ }
@@ -10,7 +10,7 @@ const units = ['bytes', 'kB', 'MB', 'GB', 'TB'];
10
10
  export function formatBytes(bytes) {
11
11
  let n = bytes;
12
12
  let i = 0;
13
- while (n >= 1000 && i < units.length - 1) {
13
+ while (Number(n.toFixed(1)) >= 1000 && i < units.length - 1) {
14
14
  n /= 1000;
15
15
  i++;
16
16
  }
@@ -1,7 +1,23 @@
1
- import type PluginManager from '../PluginManager.ts';
2
1
  import type { AdapterConfig } from './tracks.ts';
3
2
  import type { FileLocation } from './types/data.ts';
4
3
  import type { AdapterSpec } from '@jbrowse/add-track-core';
4
+ /**
5
+ * creates a new location from the provided location including the appropriate
6
+ * suffix and location type
7
+ *
8
+ * @param location - the FileLocation
9
+ * @param suffix - the file suffix (e.g. .bam)
10
+ * @returns the constructed location object from the provided parameters
11
+ */
12
+ export declare function makeIndex(location: FileLocation, suffix: string): import("./index.ts").BlobLocation | import("./index.ts").FileHandleLocation | {
13
+ uri: string;
14
+ locationType: string;
15
+ baseUri?: string | undefined;
16
+ localPath?: undefined;
17
+ } | {
18
+ localPath: string;
19
+ locationType: string;
20
+ };
5
21
  /**
6
22
  * The adapter config one format-table entry describes: the data file under the
7
23
  * field that format's adapter reads it from, plus wherever that adapter expects
@@ -14,17 +30,12 @@ import type { AdapterSpec } from '@jbrowse/add-track-core';
14
30
  */
15
31
  export declare function adapterConfigFromSpec(spec: AdapterSpec, file: FileLocation, index?: FileLocation): AdapterConfig | undefined;
16
32
  /**
17
- * Guess every format `@jbrowse/add-track-core`'s table describes — the same
18
- * table `@jbrowse/cli`'s `add-track` reads, so a file resolves to the same
19
- * adapter config in the app and on the command line.
20
- *
21
- * Whether a build can open a format is decided by `hasAdapterType`, not by the
22
- * table: guessing `BamAdapter` in a build with no alignments plugin writes a
23
- * track config that fails at render. A plugin therefore registers its adapters
24
- * and nothing else — there is no format list to keep in step. ADR-077.
25
- *
26
- * `CorePlugin` installs this first, so any `addAdapterGuesser` a plugin
27
- * registers is later in the chain and wins over the table. That is how a format
28
- * the table cannot express is added, and how a third-party plugin claims one.
33
+ * The track the format table makes of a file: its adapter, the track type that
34
+ * draws it, and the file name as its name. `undefined` for a file no format
35
+ * claims, which is where `guessTrackConf` throws.
29
36
  */
30
- export declare function installFormatGuessers(pluginManager: PluginManager): void;
37
+ export declare function guessTrackConfFromTable(file: FileLocation, index?: FileLocation, adapterHint?: string): {
38
+ type: string;
39
+ name: string;
40
+ adapter: AdapterConfig;
41
+ } | undefined;
@@ -1,6 +1,33 @@
1
1
  import { matchFormat, resolveIndexType, trackTypeForAdapter, } from '@jbrowse/add-track-core';
2
2
  import { getFileName } from './getFileName.js';
3
- import { addAdapterGuesser, addTrackTypeGuesser, makeIndex } from './tracks.js';
3
+ /**
4
+ * creates a new location from the provided location including the appropriate
5
+ * suffix and location type
6
+ *
7
+ * @param location - the FileLocation
8
+ * @param suffix - the file suffix (e.g. .bam)
9
+ * @returns the constructed location object from the provided parameters
10
+ */
11
+ export function makeIndex(location, suffix) {
12
+ if ('uri' in location) {
13
+ return {
14
+ uri: location.uri + suffix,
15
+ locationType: 'UriLocation',
16
+ // carry the parent's baseUri so a derived sibling index resolves against
17
+ // the same config location as the file it indexes
18
+ ...(location.baseUri ? { baseUri: location.baseUri } : {}),
19
+ };
20
+ }
21
+ else if ('localPath' in location) {
22
+ return {
23
+ localPath: location.localPath + suffix,
24
+ locationType: 'LocalPathLocation',
25
+ };
26
+ }
27
+ else {
28
+ return location;
29
+ }
30
+ }
4
31
  /**
5
32
  * The adapter config one format-table entry describes: the data file under the
6
33
  * field that format's adapter reads it from, plus wherever that adapter expects
@@ -39,31 +66,19 @@ export function adapterConfigFromSpec(spec, file, index) {
39
66
  }
40
67
  }
41
68
  /**
42
- * Guess every format `@jbrowse/add-track-core`'s table describes — the same
43
- * table `@jbrowse/cli`'s `add-track` reads, so a file resolves to the same
44
- * adapter config in the app and on the command line.
45
- *
46
- * Whether a build can open a format is decided by `hasAdapterType`, not by the
47
- * table: guessing `BamAdapter` in a build with no alignments plugin writes a
48
- * track config that fails at render. A plugin therefore registers its adapters
49
- * and nothing else — there is no format list to keep in step. ADR-077.
50
- *
51
- * `CorePlugin` installs this first, so any `addAdapterGuesser` a plugin
52
- * registers is later in the chain and wins over the table. That is how a format
53
- * the table cannot express is added, and how a third-party plugin claims one.
69
+ * The track the format table makes of a file: its adapter, the track type that
70
+ * draws it, and the file name as its name. `undefined` for a file no format
71
+ * claims, which is where `guessTrackConf` throws.
54
72
  */
55
- // #region installFormatGuessers
56
- export function installFormatGuessers(pluginManager) {
57
- addAdapterGuesser(pluginManager, (file, index, adapterHint) => {
58
- const spec = matchFormat(getFileName(file), adapterHint)?.spec;
59
- return spec &&
60
- 'adapterType' in spec &&
61
- pluginManager.hasAdapterType(spec.adapterType)
62
- ? adapterConfigFromSpec(spec, file, index)
63
- : undefined;
64
- });
65
- addTrackTypeGuesser(pluginManager, (adapterName, file) => pluginManager.hasAdapterType(adapterName)
66
- ? trackTypeForAdapter(adapterName, file && getFileName(file))
67
- : undefined);
73
+ export function guessTrackConfFromTable(file, index, adapterHint) {
74
+ const name = getFileName(file);
75
+ const spec = matchFormat(name, adapterHint)?.spec;
76
+ const adapter = spec && adapterConfigFromSpec(spec, file, index);
77
+ return adapter
78
+ ? {
79
+ type: trackTypeForAdapter(adapter.type, name) ?? 'FeatureTrack',
80
+ name,
81
+ adapter,
82
+ }
83
+ : undefined;
68
84
  }
69
- // #endregion
@@ -15,7 +15,7 @@ export function formatRelativeTime(date, now = Date.now()) {
15
15
  let duration = (Number(date) - now) / 1000;
16
16
  let result = rtf.format(Math.round(duration), 'years');
17
17
  for (const { amount, unit } of DIVISIONS) {
18
- if (Math.abs(duration) < amount) {
18
+ if (Math.round(Math.abs(duration)) < amount) {
19
19
  result = rtf.format(Math.round(duration), unit);
20
20
  break;
21
21
  }
@@ -1,20 +1,18 @@
1
1
  /**
2
2
  * Freeze `value` and everything reachable from it, in place, and return it.
3
3
  *
4
- * For a value handed to consumers **by reference on purpose**: a config slot's
5
- * `promotedBase` (the one literal every track sitting at base resolves to) and a
6
- * stored user preference (a promoted display-type default, read by every
7
- * following display). Sharing the reference is load-bearing in both cases —
8
- * `===` stability is what lets a display's cached MobX computed re-resolve
4
+ * For a value handed to consumers **by reference on purpose**: a stored user
5
+ * preference, read by everything that follows it. Sharing the reference is
6
+ * load-bearing — `===` stability is what lets a cached MobX computed re-derive
9
7
  * without waking anything downstream — so handing out a defensive copy per read
10
8
  * would trade a silent hazard for a real re-render on every read. Freezing keeps
11
9
  * the identity and makes "nothing mutates this" throw rather than quietly
12
- * rewriting a value every other track is reading.
10
+ * rewriting a value every other reader sees.
13
11
  *
14
- * Both callers freeze once, at schema build or at the store write, over a value
15
- * that has to survive `postMessage` anyway — so the recursion is over small JSON
16
- * and costs nothing per read. Cyclic input terminates: each object is frozen
17
- * before its children are visited.
12
+ * The caller freezes once, at the store write, over a value that has to survive
13
+ * `postMessage` anyway — so the recursion is over small JSON and costs nothing
14
+ * per read. Cyclic input terminates: each object is frozen before its children
15
+ * are visited.
18
16
  *
19
17
  * **Unconditional, deliberately unlike MST's own `deepFreeze`** (whose body this
20
18
  * otherwise mirrors), which is gated on `devMode()`. MST gates because it freezes
@@ -6,20 +6,18 @@ function isObjectLike(value) {
6
6
  /**
7
7
  * Freeze `value` and everything reachable from it, in place, and return it.
8
8
  *
9
- * For a value handed to consumers **by reference on purpose**: a config slot's
10
- * `promotedBase` (the one literal every track sitting at base resolves to) and a
11
- * stored user preference (a promoted display-type default, read by every
12
- * following display). Sharing the reference is load-bearing in both cases —
13
- * `===` stability is what lets a display's cached MobX computed re-resolve
9
+ * For a value handed to consumers **by reference on purpose**: a stored user
10
+ * preference, read by everything that follows it. Sharing the reference is
11
+ * load-bearing — `===` stability is what lets a cached MobX computed re-derive
14
12
  * without waking anything downstream — so handing out a defensive copy per read
15
13
  * would trade a silent hazard for a real re-render on every read. Freezing keeps
16
14
  * the identity and makes "nothing mutates this" throw rather than quietly
17
- * rewriting a value every other track is reading.
15
+ * rewriting a value every other reader sees.
18
16
  *
19
- * Both callers freeze once, at schema build or at the store write, over a value
20
- * that has to survive `postMessage` anyway — so the recursion is over small JSON
21
- * and costs nothing per read. Cyclic input terminates: each object is frozen
22
- * before its children are visited.
17
+ * The caller freezes once, at the store write, over a value that has to survive
18
+ * `postMessage` anyway — so the recursion is over small JSON and costs nothing
19
+ * per read. Cyclic input terminates: each object is frozen before its children
20
+ * are visited.
23
21
  *
24
22
  * **Unconditional, deliberately unlike MST's own `deepFreeze`** (whose body this
25
23
  * otherwise mirrors), which is gated on `devMode()`. MST gates because it freezes
@@ -9,7 +9,8 @@ export declare function resolveUri({ uri, baseUri, }: {
9
9
  baseUri?: string;
10
10
  }): string;
11
11
  /**
12
- * An address with its query string dropped, which is what makes it safe to put
12
+ * An address with its query string and any username:password dropped, which is
13
+ * what makes it safe to put
13
14
  * on screen. A presigned S3 or GCS link carries its credential in the query — a
14
15
  * few hundred characters of `?X-Amz-Signature=…` — and a notice that renders one
15
16
  * puts it in front of whoever is looking at the screen and into every screenshot
@@ -13,7 +13,8 @@ export function resolveUri({ uri, baseUri = '', }) {
13
13
  }
14
14
  }
15
15
  /**
16
- * An address with its query string dropped, which is what makes it safe to put
16
+ * An address with its query string and any username:password dropped, which is
17
+ * what makes it safe to put
17
18
  * on screen. A presigned S3 or GCS link carries its credential in the query — a
18
19
  * few hundred characters of `?X-Amz-Signature=…` — and a notice that renders one
19
20
  * puts it in front of whoever is looking at the screen and into every screenshot
@@ -25,7 +26,12 @@ export function resolveUri({ uri, baseUri = '', }) {
25
26
  * than a typed location.
26
27
  */
27
28
  export function redactSource(source) {
28
- return source.includes('://') ? source.split(/[?#]/)[0] : source;
29
+ if (!source.includes('://')) {
30
+ return source;
31
+ }
32
+ return source
33
+ .replace(/^([a-z][a-z\d+.-]*:\/\/)[^/?#]*@/i, '$1')
34
+ .split(/[?#]/)[0];
29
35
  }
30
36
  /**
31
37
  * Where a location's bytes come from, as an address worth showing someone, or