@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.
- package/README.md +1709 -390
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
- package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
- package/esm/BaseFeatureWidget/formatDetails.js +62 -83
- package/esm/BaseFeatureWidget/index.d.ts +2 -1
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
- package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
- package/esm/BaseFeatureWidget/types.d.ts +12 -6
- package/esm/BaseFeatureWidget/util.d.ts +0 -10
- package/esm/BaseFeatureWidget/util.js +0 -17
- package/esm/CorePlugin.js +34 -3
- package/esm/PluginLoader.d.ts +24 -13
- package/esm/PluginLoader.js +167 -51
- package/esm/PluginManager.d.ts +130 -24
- package/esm/PluginManager.js +180 -32
- package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
- package/esm/ReExports/MuiDataGridReExports.js +2 -2
- package/esm/ReExports/coreModules.generated.d.ts +2 -0
- package/esm/ReExports/coreModules.generated.js +530 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +490 -0
- package/esm/ReExports/frameworkModules.d.ts +2 -0
- package/esm/ReExports/frameworkModules.js +68 -0
- package/esm/ReExports/frameworkShared.d.ts +12 -0
- package/esm/ReExports/frameworkShared.js +16 -0
- package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
- package/esm/ReExports/list.js +528 -79
- package/esm/ReExports/modules.d.ts +1 -1
- package/esm/ReExports/modules.js +10 -165
- package/esm/ReExports/registry.d.ts +1 -0
- package/esm/ReExports/registry.js +23 -5
- package/esm/ReExports/uiStub.d.ts +3 -0
- package/esm/ReExports/uiStub.js +33 -0
- package/esm/ReExports/workerModules.d.ts +2 -0
- package/esm/ReExports/workerModules.js +11 -0
- package/esm/TextSearch/TextSearchManager.d.ts +27 -13
- package/esm/TextSearch/TextSearchManager.js +77 -36
- package/esm/TextSearch/places.d.ts +12 -0
- package/esm/TextSearch/places.js +94 -0
- package/esm/assemblyManager/assembly.d.ts +21 -19
- package/esm/assemblyManager/assembly.js +28 -26
- package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
- package/esm/assemblyManager/assemblyAdapters.js +8 -2
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
- package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
- package/esm/assemblyManager/assemblyManager.d.ts +35 -180
- package/esm/assemblyManager/assemblyManager.js +47 -51
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
- package/esm/assemblyManager/geneticCodes.js +2 -5
- package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
- package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
- package/esm/assemblyManager/indexAssemblyNames.js +22 -0
- package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
- package/esm/assemblyManager/loadRefNameMap.js +4 -9
- package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
- package/esm/assemblyManager/refNameMapKey.js +12 -0
- package/esm/checkPlugins.d.ts +2 -0
- package/esm/checkPlugins.js +38 -17
- package/esm/configuration/bamIndexFields.d.ts +49 -0
- package/esm/configuration/bamIndexFields.js +41 -0
- package/esm/configuration/configurationSchema.d.ts +101 -71
- package/esm/configuration/configurationSchema.js +207 -134
- package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
- package/esm/configuration/configurationSchemaUnion.js +56 -0
- package/esm/configuration/configurationSlot.d.ts +150 -60
- package/esm/configuration/configurationSlot.js +103 -75
- package/esm/configuration/fillLocations.d.ts +14 -0
- package/esm/configuration/fillLocations.js +14 -0
- package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
- package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
- package/esm/configuration/formatDetailsConfigSchema.js +10 -13
- package/esm/configuration/fullConfSnapshot.d.ts +4 -19
- package/esm/configuration/fullConfSnapshot.js +30 -52
- package/esm/configuration/getConf.d.ts +45 -41
- package/esm/configuration/getConf.js +111 -44
- package/esm/configuration/index.d.ts +26 -11
- package/esm/configuration/index.js +16 -7
- package/esm/configuration/indexType.d.ts +26 -0
- package/esm/configuration/indexType.js +38 -0
- package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
- package/esm/configuration/mergeFormatCallbacks.js +13 -10
- package/esm/configuration/plot.d.ts +61 -0
- package/esm/configuration/plot.js +142 -0
- package/esm/configuration/readConfObject.d.ts +2 -24
- package/esm/configuration/readConfObject.js +20 -63
- package/esm/configuration/requirements.d.ts +37 -0
- package/esm/configuration/requirements.js +88 -0
- package/esm/configuration/schemaRegistry.d.ts +32 -15
- package/esm/configuration/schemaRegistry.js +33 -35
- package/esm/configuration/schemaTypes.d.ts +21 -5
- package/esm/configuration/schemaTypes.js +66 -55
- package/esm/configuration/slotFacade.d.ts +12 -29
- package/esm/configuration/slotFacade.js +44 -23
- package/esm/configuration/snapshotPreprocess.d.ts +43 -0
- package/esm/configuration/snapshotPreprocess.js +161 -0
- package/esm/configuration/tabixIndexFields.d.ts +30 -4
- package/esm/configuration/tabixIndexFields.js +21 -4
- package/esm/configuration/tabixShorthand.d.ts +34 -17
- package/esm/configuration/tabixShorthand.js +49 -22
- package/esm/configuration/types.d.ts +182 -43
- package/esm/configuration/uriShorthand.d.ts +9 -0
- package/esm/configuration/uriShorthand.js +16 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
- package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
- package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
- package/esm/data_adapters/BaseAdapter/index.js +1 -0
- package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
- package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
- package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
- package/esm/data_adapters/BaseAdapter/stats.js +52 -13
- package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
- package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
- package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
- package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
- package/esm/data_adapters/dataAdapterCache.js +44 -10
- package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
- package/esm/data_adapters/getFeatureAdapter.js +8 -8
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
- package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
- package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
- package/esm/pluggableElementTypes/AdapterType.js +1 -1
- package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
- package/esm/pluggableElementTypes/DisplayType.js +28 -12
- package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
- package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
- package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
- package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
- package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
- package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
- package/esm/pluggableElementTypes/ViewType.js +32 -4
- package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
- package/esm/pluggableElementTypes/WidgetType.js +6 -0
- package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
- package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
- package/esm/pluggableElementTypes/extendElementType.js +9 -5
- package/esm/pluggableElementTypes/index.d.ts +2 -1
- package/esm/pluggableElementTypes/index.js +2 -9
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
- package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
- package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
- package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
- package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
- package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
- package/esm/pluggableElementTypes/models/index.d.ts +2 -3
- package/esm/pluggableElementTypes/models/index.js +2 -3
- package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
- package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
- package/esm/pluginDefinitions.d.ts +34 -7
- package/esm/pluginDefinitions.js +54 -20
- package/esm/rpc/BaseRpcDriver.d.ts +2 -2
- package/esm/rpc/BaseRpcDriver.js +25 -30
- package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
- package/esm/rpc/MainThreadRpcDriver.js +13 -8
- package/esm/rpc/RpcClient.d.ts +18 -6
- package/esm/rpc/RpcClient.js +51 -16
- package/esm/rpc/RpcManager.d.ts +14 -10
- package/esm/rpc/RpcManager.js +11 -1
- package/esm/rpc/RpcRegistry.d.ts +40 -7
- package/esm/rpc/RpcServer.d.ts +3 -1
- package/esm/rpc/RpcServer.js +19 -12
- package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
- package/esm/rpc/WebWorkerRpcDriver.js +64 -68
- package/esm/rpc/byteBudget.d.ts +20 -5
- package/esm/rpc/byteBudget.js +16 -5
- package/esm/rpc/configSchema.d.ts +7 -21
- package/esm/rpc/coreRpcMethods.d.ts +4 -0
- package/esm/rpc/coreRpcMethods.js +4 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
- package/esm/rpc/methods/CoreGetExportData.js +3 -4
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
- package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
- package/esm/rpc/methods/CoreGetFeatures.js +3 -5
- package/esm/rpc/methods/CoreGetRefNames.js +2 -12
- package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
- package/esm/rpc/methods/CoreGetSequence.js +2 -2
- package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
- package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
- package/esm/rpc/methods/layerFeatures.d.ts +33 -0
- package/esm/rpc/methods/layerFeatures.js +29 -0
- package/esm/svg/SvgExport.js +6 -7
- package/esm/svg/SvgThemeProviders.d.ts +12 -0
- package/esm/svg/SvgThemeProviders.js +15 -0
- package/esm/svg/exportViewSvg.d.ts +28 -0
- package/esm/svg/exportViewSvg.js +13 -0
- package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
- package/esm/svg/normalizeSvgMarkup.js +99 -0
- package/esm/svg/serializeSvg.d.ts +7 -0
- package/esm/svg/serializeSvg.js +11 -0
- package/esm/svg/svgId.d.ts +1 -1
- package/esm/svg/svgId.js +1 -1
- package/esm/svg/svgReady.d.ts +9 -7
- package/esm/svg/svgReady.js +8 -7
- package/esm/svg/trackNames.d.ts +7 -5
- package/esm/svg/trackNames.js +12 -9
- package/esm/svg/wrapSvgExport.js +6 -74
- package/esm/ui/AddCustomPluginDialog.js +3 -8
- package/esm/ui/AppReadyMarker.d.ts +45 -0
- package/esm/ui/AppReadyMarker.js +89 -0
- package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
- package/esm/ui/CascadingMenu.js +181 -104
- package/esm/ui/DropDownMenu.js +2 -1
- package/esm/ui/ErrorBanner.js +1 -1
- package/esm/ui/ErrorBoundary.d.ts +2 -2
- package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
- package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
- package/esm/ui/ExportSvgDialog.d.ts +1 -1
- package/esm/ui/FileDropZone.js +2 -1
- package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
- package/esm/ui/HoverMenu.d.ts +1 -2
- package/esm/ui/HoverMenu.js +6 -3
- package/esm/ui/JexlFilterDialog.d.ts +13 -10
- package/esm/ui/JexlFilterDialog.js +122 -50
- package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
- package/esm/ui/JexlFilterRowEditors.js +90 -0
- package/esm/ui/LazyBaseTooltip.d.ts +4 -0
- package/esm/ui/LazyBaseTooltip.js +9 -0
- package/esm/ui/LegendSwatchGlyph.js +26 -21
- package/esm/ui/LoadingOverlay.d.ts +14 -0
- package/esm/ui/LoadingOverlay.js +4 -2
- package/esm/ui/MenuTypes.d.ts +23 -53
- package/esm/ui/MenuTypes.js +3 -0
- package/esm/ui/MonospaceTextField.d.ts +2 -1
- package/esm/ui/MonospaceTextField.js +23 -20
- package/esm/ui/PaletteContext.d.ts +10 -5
- package/esm/ui/PaletteContext.js +44 -6
- package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
- package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
- package/esm/ui/RefNameAutocomplete/index.js +8 -2
- package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/util.js +42 -1
- package/esm/ui/ResizeHandle.d.ts +3 -1
- package/esm/ui/ResizeHandle.js +44 -11
- package/esm/ui/ScrollChrome.d.ts +13 -0
- package/esm/ui/ScrollChrome.js +11 -0
- package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
- package/esm/ui/ScrollEdgeShadow.js +14 -35
- package/esm/ui/ScrollZoomToggle.d.ts +4 -27
- package/esm/ui/ScrollZoomToggle.js +34 -51
- package/esm/ui/SessionJsonPanel.d.ts +3 -0
- package/esm/ui/SessionJsonPanel.js +14 -0
- package/esm/ui/SettingsChangesTable.d.ts +1 -0
- package/esm/ui/SettingsChangesTable.js +49 -11
- package/esm/ui/ShareLinkField.d.ts +1 -3
- package/esm/ui/ShareLinkField.js +13 -40
- package/esm/ui/SizeSliderRow.d.ts +1 -3
- package/esm/ui/SizeSliderRow.js +4 -6
- package/esm/ui/SnackbarModel.js +79 -67
- package/esm/ui/StatusProgressBar.js +2 -2
- package/esm/ui/SvgColorLegend.d.ts +9 -4
- package/esm/ui/SvgColorLegend.js +82 -41
- package/esm/ui/VerticalScrollbar.d.ts +13 -34
- package/esm/ui/VerticalScrollbar.js +29 -83
- package/esm/ui/ViewLoadingScreen.d.ts +5 -4
- package/esm/ui/ViewLoadingScreen.js +8 -32
- package/esm/ui/colorScale.d.ts +92 -0
- package/esm/ui/colorScale.js +72 -0
- package/esm/ui/colors.d.ts +64 -0
- package/esm/ui/colors.js +230 -1
- package/esm/ui/hoverBoxStyle.d.ts +14 -2
- package/esm/ui/hoverBoxStyle.js +17 -2
- package/esm/ui/index.d.ts +12 -12
- package/esm/ui/index.js +14 -22
- package/esm/ui/launchViewMenu.js +15 -5
- package/esm/ui/legendMenuItem.d.ts +10 -32
- package/esm/ui/legendMenuItem.js +9 -36
- package/esm/ui/legendSpec.d.ts +15 -8
- package/esm/ui/legendSpec.js +14 -23
- package/esm/ui/makeSizeMenu.d.ts +0 -6
- package/esm/ui/makeSizeMenu.js +6 -30
- package/esm/ui/measureLegendText.js +1 -1
- package/esm/ui/menuItemAdornment.d.ts +9 -20
- package/esm/ui/menuItemAdornment.js +10 -32
- package/esm/ui/menuItems.d.ts +2 -7
- package/esm/ui/menuItems.js +1 -6
- package/esm/ui/multiTrackMenuItems.d.ts +6 -0
- package/esm/ui/palette.d.ts +118 -116
- package/esm/ui/palette.js +114 -75
- package/esm/ui/replaceViewAction.d.ts +1 -1
- package/esm/ui/replaceViewAction.js +1 -1
- package/esm/ui/theme.d.ts +43 -119
- package/esm/ui/theme.js +62 -78
- package/esm/ui/toggleMenuItems.d.ts +1 -3
- package/esm/ui/toggleMenuItems.js +6 -5
- package/esm/ui/useAssemblySelection.d.ts +4 -4
- package/esm/ui/viewHeaderHeight.d.ts +1 -0
- package/esm/ui/viewHeaderHeight.js +1 -0
- package/esm/util/Base1DUtils.d.ts +5 -3
- package/esm/util/Base1DUtils.js +14 -6
- package/esm/util/Base1DViewModel.d.ts +2 -1
- package/esm/util/Base1DViewModel.js +3 -2
- package/esm/util/SvgCanvas.d.ts +15 -13
- package/esm/util/SvgCanvas.js +76 -56
- package/esm/util/TimeTraveller.d.ts +3 -0
- package/esm/util/TimeTraveller.js +34 -2
- package/esm/util/aborting.d.ts +39 -0
- package/esm/util/aborting.js +88 -6
- package/esm/util/adapterMetadata.d.ts +1 -1
- package/esm/util/adapterMetadata.js +6 -5
- package/esm/util/addAndShowTrack.d.ts +2 -5
- package/esm/util/addAndShowTrack.js +5 -1
- package/esm/util/addRelativeUris.d.ts +17 -5
- package/esm/util/addRelativeUris.js +46 -10
- package/esm/util/addTrackFromWidget.d.ts +2 -5
- package/esm/util/addTrackFromWidget.js +5 -4
- package/esm/util/aggregateFieldName.d.ts +10 -0
- package/esm/util/aggregateFieldName.js +8 -0
- package/esm/util/analytics.js +46 -13
- package/esm/util/animationAllowed.d.ts +9 -0
- package/esm/util/animationAllowed.js +13 -0
- package/esm/util/applyRowResizeWheel.d.ts +10 -5
- package/esm/util/applyRowResizeWheel.js +10 -21
- package/esm/util/bandHeight.d.ts +10 -0
- package/esm/util/bandHeight.js +29 -0
- package/esm/util/bandLayout.d.ts +4 -4
- package/esm/util/bandLayout.js +4 -4
- package/esm/util/baseDisplayConfig.d.ts +8 -0
- package/esm/util/baseDisplayConfig.js +27 -0
- package/esm/util/bezierConnector.d.ts +4 -3
- package/esm/util/bezierConnector.js +38 -45
- package/esm/util/bgzfWorkerPool.d.ts +20 -74
- package/esm/util/bgzfWorkerPool.js +20 -74
- package/esm/util/binnedAggregate.d.ts +17 -0
- package/esm/util/binnedAggregate.js +275 -0
- package/esm/util/cacheBudgets.d.ts +22 -19
- package/esm/util/cacheBudgets.js +22 -19
- package/esm/util/cachedSetup.d.ts +16 -6
- package/esm/util/cachedSetup.js +108 -38
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -0
- package/esm/util/cellMatches.d.ts +23 -0
- package/esm/util/cellMatches.js +264 -0
- package/esm/util/cellsStep.d.ts +29 -0
- package/esm/util/cellsStep.js +437 -0
- package/esm/util/clampToContig.d.ts +17 -0
- package/esm/util/clampToContig.js +19 -0
- package/esm/util/coarseStripHTML.js +1 -2
- package/esm/util/color/cssColorsLevel4.d.ts +1 -0
- package/esm/util/color/cssColorsLevel4.js +1 -0
- package/esm/util/color/index.d.ts +5 -3
- package/esm/util/color/index.js +7 -4
- package/esm/util/colorBits.d.ts +3 -3
- package/esm/util/colorBits.js +19 -44
- package/esm/util/colorRamp.d.ts +49 -5
- package/esm/util/colorRamp.js +169 -18
- package/esm/util/colorScale.d.ts +156 -0
- package/esm/util/colorScale.js +243 -0
- package/esm/util/colorSchemes.d.ts +21 -0
- package/esm/util/colorSchemes.js +30 -0
- package/esm/util/copyToClipboard.js +8 -1
- package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
- package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
- package/esm/util/createSvgRasterCanvas.d.ts +10 -0
- package/esm/util/cssColorParse.d.ts +15 -0
- package/esm/util/cssColorParse.js +53 -0
- package/esm/util/diagonalizeRegions.d.ts +2 -3
- package/esm/util/diagonalizeRegions.js +8 -13
- package/esm/util/expandLooseSearchIndex.d.ts +19 -0
- package/esm/util/expandLooseSearchIndex.js +29 -0
- package/esm/util/featureTable.d.ts +224 -0
- package/esm/util/featureTable.js +366 -0
- package/esm/util/featureTransforms.d.ts +81 -0
- package/esm/util/featureTransforms.js +1231 -0
- package/esm/util/featureTypes.d.ts +24 -0
- package/esm/util/featureTypes.js +35 -0
- package/esm/util/fetchAndMaybeUnzip.js +16 -9
- package/esm/util/fetchContext.d.ts +7 -8
- package/esm/util/fetchContext.js +3 -3
- package/esm/util/fetchHub.d.ts +4 -2
- package/esm/util/fetchHub.js +2 -2
- package/esm/util/fetchPhases.d.ts +10 -10
- package/esm/util/fetchSeq.d.ts +2 -3
- package/esm/util/fetchSeq.js +2 -2
- package/esm/util/fieldReader.d.ts +17 -0
- package/esm/util/fieldReader.js +62 -0
- package/esm/util/formatBytes.js +1 -1
- package/esm/util/formatGuessers.d.ts +25 -14
- package/esm/util/formatGuessers.js +42 -27
- package/esm/util/formatRelativeTime.js +1 -1
- package/esm/util/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/getLocationUri.d.ts +2 -1
- package/esm/util/getLocationUri.js +8 -2
- package/esm/util/groupKeys.d.ts +76 -0
- package/esm/util/groupKeys.js +156 -0
- package/esm/util/highlights.d.ts +10 -6
- package/esm/util/highlights.js +12 -25
- package/esm/util/hooks.d.ts +31 -2
- package/esm/util/hooks.js +72 -3
- package/esm/util/index.d.ts +11 -11
- package/esm/util/index.js +11 -10
- package/esm/util/indexCandidates.d.ts +1 -31
- package/esm/util/indexCandidates.js +5 -63
- package/esm/util/installFetch.d.ts +77 -37
- package/esm/util/installFetch.js +65 -38
- package/esm/util/installInitAutorun.d.ts +14 -13
- package/esm/util/installInitAutorun.js +17 -17
- package/esm/util/installPrerequisiteFetch.d.ts +115 -0
- package/esm/util/installPrerequisiteFetch.js +111 -0
- package/esm/util/intervals.js +9 -4
- package/esm/util/io/index.js +22 -15
- package/esm/util/isDataCurrent.d.ts +7 -5
- package/esm/util/isDataCurrent.js +9 -6
- package/esm/util/isTextEntryFocused.d.ts +7 -0
- package/esm/util/isTextEntryFocused.js +16 -0
- package/esm/util/jexl.js +24 -21
- package/esm/util/jexlFilterRows.d.ts +89 -0
- package/esm/util/jexlFilterRows.js +252 -0
- package/esm/util/jexlFilters.d.ts +32 -57
- package/esm/util/jexlFilters.js +31 -29
- package/esm/util/jexlStrings.d.ts +3 -4
- package/esm/util/jexlStrings.js +2 -3
- package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
- package/esm/util/layouts/GranularRectLayout.js +25 -8
- package/esm/util/lazyAfterAttach.d.ts +13 -0
- package/esm/util/lazyAfterAttach.js +31 -0
- package/esm/util/lazyWithPreload.d.ts +19 -0
- package/esm/util/lazyWithPreload.js +27 -0
- package/esm/util/legendCandidates.d.ts +72 -0
- package/esm/util/legendCandidates.js +138 -0
- package/esm/util/locString.js +5 -2
- package/esm/util/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +885 -0
- package/esm/util/markEncodingTypes.d.ts +595 -0
- package/esm/util/markEncodingTypes.js +8 -0
- package/esm/util/mst-reflection.d.ts +2 -20
- package/esm/util/mst-reflection.js +3 -53
- package/esm/util/mstUtils.d.ts +31 -23
- package/esm/util/mstUtils.js +39 -24
- package/esm/util/numericUtils.d.ts +7 -0
- package/esm/util/numericUtils.js +16 -0
- package/esm/util/numericValue.d.ts +14 -0
- package/esm/util/numericValue.js +34 -0
- package/esm/util/openFeatureWidget.d.ts +5 -0
- package/esm/util/openFeatureWidget.js +2 -2
- package/esm/util/openViews.d.ts +17 -0
- package/esm/util/openViews.js +22 -0
- package/esm/util/parentWalk.d.ts +1 -1
- package/esm/util/parentWalk.js +1 -1
- package/esm/util/parseLineByLine.d.ts +4 -5
- package/esm/util/parseLineByLine.js +8 -14
- package/esm/util/pluginStore.d.ts +6 -8
- package/esm/util/pluginStore.js +17 -16
- package/esm/util/preloadComponent.d.ts +5 -0
- package/esm/util/preloadComponent.js +11 -0
- package/esm/util/progress.d.ts +22 -22
- package/esm/util/progress.js +27 -26
- package/esm/util/quantileExtent.d.ts +49 -0
- package/esm/util/quantileExtent.js +162 -0
- package/esm/util/range.d.ts +13 -9
- package/esm/util/range.js +17 -8
- package/esm/util/renameRegions.d.ts +26 -6
- package/esm/util/renameRegions.js +68 -54
- package/esm/util/renderToStaticMarkup.js +24 -14
- package/esm/util/rxjs.d.ts +23 -8
- package/esm/util/rxjs.js +61 -15
- package/esm/util/samplesTsv.d.ts +49 -0
- package/esm/util/samplesTsv.js +86 -0
- package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
- package/esm/util/scheduleDetachedDestroy.js +24 -0
- package/esm/util/scrollLatch.d.ts +1 -0
- package/esm/util/scrollLatch.js +8 -0
- package/esm/util/selectEncodedFeature.d.ts +16 -0
- package/esm/util/selectEncodedFeature.js +34 -0
- package/esm/util/sessionSharing.d.ts +7 -5
- package/esm/util/sessionSharing.js +23 -23
- package/esm/util/shapeNameList.d.ts +2 -0
- package/esm/util/shapeNameList.js +6 -0
- package/esm/util/shapeNames.d.ts +7 -0
- package/esm/util/shapeNames.js +11 -0
- package/esm/util/simpleFeature.d.ts +0 -1
- package/esm/util/springAnimate.js +1 -1
- package/esm/util/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +96 -0
- package/esm/util/stepTables.js +277 -0
- package/esm/util/svAlt.d.ts +145 -0
- package/esm/util/svAlt.js +364 -0
- package/esm/util/svgColorProps.d.ts +11 -0
- package/esm/util/svgColorProps.js +28 -1
- package/esm/util/systemColorScheme.d.ts +12 -0
- package/esm/util/systemColorScheme.js +27 -0
- package/esm/util/tabix.d.ts +19 -10
- package/esm/util/tabix.js +19 -14
- package/esm/util/thresholdScale.d.ts +91 -0
- package/esm/util/thresholdScale.js +166 -0
- package/esm/util/timeGate.d.ts +4 -5
- package/esm/util/timeGate.js +4 -5
- package/esm/util/trackConfigDelta.d.ts +26 -26
- package/esm/util/trackConfigDelta.js +63 -47
- package/esm/util/tracks.d.ts +120 -66
- package/esm/util/tracks.js +501 -151
- package/esm/util/translateTranscript.d.ts +44 -0
- package/esm/util/translateTranscript.js +102 -0
- package/esm/util/types/data.d.ts +0 -2
- package/esm/util/types/index.d.ts +121 -22
- package/esm/util/types/index.js +9 -0
- package/esm/util/types/mst.d.ts +3 -0
- package/esm/util/types/mst.js +4 -0
- package/esm/util/types/renameIds.d.ts +1 -0
- package/esm/util/types/renameIds.js +29 -0
- package/esm/util/types/services.d.ts +1 -1
- package/esm/util/unknownSnapshotKeys.d.ts +53 -0
- package/esm/util/unknownSnapshotKeys.js +76 -0
- package/esm/util/useFeatureSequence.js +5 -5
- package/esm/util/useFetch.d.ts +3 -4
- package/esm/util/useFetch.js +19 -10
- package/esm/util/useFetchPlugins.d.ts +6 -2
- package/esm/util/useFetchPlugins.js +7 -3
- package/esm/util/usePanZoom.js +10 -3
- package/esm/util/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- package/esm/util/useRafCommit.js +1 -0
- package/esm/util/useRowVirtualScroll.d.ts +6 -29
- package/esm/util/useRowVirtualScroll.js +8 -49
- package/esm/util/useVirtualScrollWheel.d.ts +20 -4
- package/esm/util/useVirtualScrollWheel.js +40 -74
- package/esm/util/viewHighlights.d.ts +3 -0
- package/esm/util/viewHighlights.js +5 -0
- package/esm/util/viewStatus.d.ts +47 -15
- package/esm/util/viewStatus.js +34 -0
- package/esm/util/wheelZoom.d.ts +7 -1
- package/esm/util/wheelZoom.js +85 -19
- package/esm/util/whenViewSettled.d.ts +55 -8
- package/esm/util/whenViewSettled.js +56 -7
- package/esm/util/withFeatureDetails.js +4 -0
- package/esm/util/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +75 -24
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
- package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
- package/esm/ReExports/BaseFeatureDetails.js +0 -10
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/ReExports/publicUtil.d.ts +0 -1
- package/esm/ReExports/publicUtil.js +0 -28
- package/esm/configuration/promotableDefaults.d.ts +0 -199
- package/esm/configuration/promotableDefaults.js +0 -326
- package/esm/configuration/promotablePin.d.ts +0 -55
- package/esm/configuration/promotablePin.js +0 -1
- package/esm/configuration/promotableResolve.d.ts +0 -108
- package/esm/configuration/promotableResolve.js +0 -117
- package/esm/configuration/promotableSlots.d.ts +0 -12
- package/esm/configuration/promotableSlots.js +0 -45
- package/esm/configuration/slotShape.d.ts +0 -12
- package/esm/configuration/slotShape.js +0 -84
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
- package/esm/ui/PinAdornment.d.ts +0 -5
- package/esm/ui/PinAdornment.js +0 -79
- package/esm/ui/SvgGradientLegend.d.ts +0 -26
- package/esm/ui/SvgGradientLegend.js +0 -26
- package/esm/ui/highlightChipReveal.d.ts +0 -32
- package/esm/ui/highlightChipReveal.js +0 -39
- package/esm/ui/promotableMenuItems.d.ts +0 -19
- package/esm/ui/promotableMenuItems.js +0 -89
- package/esm/ui/promotablePinCoverage.d.ts +0 -44
- package/esm/ui/promotablePinCoverage.js +0 -87
- package/esm/util/applyInitSettings.d.ts +0 -79
- package/esm/util/applyInitSettings.js +0 -91
- package/esm/util/openDisplays.d.ts +0 -23
- package/esm/util/openDisplays.js +0 -79
- package/esm/util/stopToken.d.ts +0 -211
- package/esm/util/stopToken.js +0 -438
- /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
package/esm/util/progress.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { StopToken, StopTokenChecker } from './stopToken.ts';
|
|
2
1
|
/**
|
|
3
2
|
* Indeterminate phase: set `label` on the status channel, run `fn`, then restore
|
|
4
|
-
* whatever phase encloses it — `''` when there is none. Pass `
|
|
3
|
+
* whatever phase encloses it — `''` when there is none. Pass `signal` and the
|
|
5
4
|
* phase becomes a cancellation boundary too: this is the labelled form of
|
|
6
|
-
* {@link
|
|
5
|
+
* {@link withAbortCheck}, so `fn` is checked on both sides of its await and
|
|
7
6
|
* neither check has to be remembered at the call site. The determinate
|
|
8
7
|
* counterpart is {@link withProgress}.
|
|
9
8
|
*
|
|
@@ -15,7 +14,7 @@ import type { StopToken, StopTokenChecker } from './stopToken.ts';
|
|
|
15
14
|
* fetching — `downloadPhase(label, location)` builds one — and a plain string
|
|
16
15
|
* everywhere else. It nests and retires identically either way.
|
|
17
16
|
*/
|
|
18
|
-
export declare function updateStatus<U>(msg: string | StatusPhase, cb: StatusCallback | undefined, fn: () => U | Promise<U>,
|
|
17
|
+
export declare function updateStatus<U>(msg: string | StatusPhase, cb: StatusCallback | undefined, fn: () => U | Promise<U>, signal?: AbortSignal): Promise<U>;
|
|
19
18
|
/**
|
|
20
19
|
* A determinate reading on the status channel: a phase label plus how far
|
|
21
20
|
* through it the operation is. The loading UI renders the message and a bar.
|
|
@@ -150,7 +149,7 @@ export interface StatusStream {
|
|
|
150
149
|
* the last label of a fetch that is over.
|
|
151
150
|
*
|
|
152
151
|
* It is not guarded by `isCurrent`: a run that has just finished is no longer
|
|
153
|
-
* current, and
|
|
152
|
+
* current, and its slot must still retire.
|
|
154
153
|
*/
|
|
155
154
|
clear: () => void;
|
|
156
155
|
}
|
|
@@ -238,7 +237,7 @@ export declare function throttleStatusEmits(emit: StatusCallback): (status: RpcS
|
|
|
238
237
|
* of a burst, not each one in turn.
|
|
239
238
|
*
|
|
240
239
|
* Both fetch families own one: `FetchMixin` for the LGV displays, and
|
|
241
|
-
* `
|
|
240
|
+
* `createAbortRotation` for the bare-autorun fetches (dotplot, synteny)
|
|
242
241
|
* that compose no fetch mixin — and a display that has both lends the mixin's
|
|
243
242
|
* to the rotation rather than opening a second on one field. A plain function
|
|
244
243
|
* rather than shared model state because the two families declare their status
|
|
@@ -298,13 +297,13 @@ declare function downloadStatusReporter(statusCallback: StatusCallback | undefin
|
|
|
298
297
|
* which: bytes for the index readers, blocks and expected-value chunks for
|
|
299
298
|
* `@gmod/hic`. All of them report `(current, total?)`.
|
|
300
299
|
*
|
|
301
|
-
* `
|
|
300
|
+
* `signal` makes the phase a cancellation boundary, exactly as it does on
|
|
302
301
|
* {@link updateStatus} — `fn` is checked on both sides of its await.
|
|
303
302
|
*
|
|
304
303
|
* A {@link StatusPhase} `label` carries its source onto the readings too, so a
|
|
305
304
|
* download that stalls part-way through still names the file it was reading.
|
|
306
305
|
*/
|
|
307
|
-
export declare function downloadStatus<T>(label: string | StatusPhase, statusCallback: StatusCallback | undefined, fn: (onProgress: ReturnType<typeof downloadStatusReporter>) => T | Promise<T>,
|
|
306
|
+
export declare function downloadStatus<T>(label: string | StatusPhase, statusCallback: StatusCallback | undefined, fn: (onProgress: ReturnType<typeof downloadStatusReporter>) => T | Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
308
307
|
/**
|
|
309
308
|
* One concurrent operation's contribution to a fan-out's shared status: what it
|
|
310
309
|
* is reporting right now, plus how much of each phase it has already finished
|
|
@@ -415,20 +414,22 @@ export declare function createStatusFanOut(statusCallback: StatusCallback | unde
|
|
|
415
414
|
*/
|
|
416
415
|
export type ProgressReporter = (current?: number) => void;
|
|
417
416
|
/**
|
|
418
|
-
* The single per-iteration callback for long
|
|
419
|
-
*
|
|
420
|
-
*
|
|
417
|
+
* The single per-iteration callback for long worker loops. The returned
|
|
418
|
+
* `report(current)` is called once per outer-loop iteration and does two jobs
|
|
419
|
+
* on each call:
|
|
421
420
|
*
|
|
422
|
-
* - checks
|
|
423
|
-
*
|
|
424
|
-
* of only at phase boundaries, and
|
|
421
|
+
* - checks `signal`, which sees only an abort that landed at the loop's last
|
|
422
|
+
* await, and
|
|
425
423
|
* - emits a {@link StatusWithProgress} through `statusCallback` at most once per
|
|
426
424
|
* `throttleMs`, so the main thread gets a live percentage without flooding
|
|
427
425
|
* the postMessage channel.
|
|
428
426
|
*
|
|
427
|
+
* `report()` never yields, so it does not make a loop interruptible. A loop
|
|
428
|
+
* that can run for seconds takes `createAbortBreakpoint` beside it.
|
|
429
|
+
*
|
|
429
430
|
* Both jobs are optional: with no `statusCallback`/`total` this is purely a
|
|
430
|
-
*
|
|
431
|
-
*
|
|
431
|
+
* cancellation tick, so a loop has exactly one inner callback whether or not
|
|
432
|
+
* it drives the progress UI.
|
|
432
433
|
*
|
|
433
434
|
* Emission is gated on wall-clock time (`throttleMs`) through {@link
|
|
434
435
|
* createTimeGate}, which thins the `Date.now()` reads as well as the emits —
|
|
@@ -436,24 +437,23 @@ export type ProgressReporter = (current?: number) => void;
|
|
|
436
437
|
* plain `for` and call `report()` once per item (it owns the counter), or
|
|
437
438
|
* `report(n)` for an explicit position.
|
|
438
439
|
*/
|
|
439
|
-
export declare function createProgressReporter({ label, total, statusCallback,
|
|
440
|
+
export declare function createProgressReporter({ label, total, statusCallback, signal, throttleMs, }: {
|
|
440
441
|
label?: string;
|
|
441
442
|
total?: number;
|
|
442
443
|
statusCallback?: (status: RpcStatus) => void;
|
|
443
|
-
|
|
444
|
-
stopTokenCheck?: StopTokenChecker;
|
|
444
|
+
signal?: AbortSignal;
|
|
445
445
|
throttleMs?: number;
|
|
446
446
|
}): ProgressReporter;
|
|
447
447
|
/**
|
|
448
448
|
* Run a measurable phase: shows `label` at 0%, hands `fn` a {@link
|
|
449
|
-
* ProgressReporter} to drive during the work, then checks the
|
|
449
|
+
* ProgressReporter} to drive during the work, then checks the signal once
|
|
450
450
|
* more and restores the enclosing phase. The determinate counterpart to
|
|
451
451
|
* `updateStatus`, and it nests the same way — see {@link openPhase}.
|
|
452
452
|
*/
|
|
453
|
-
export declare function withProgress<T>({ label, total, statusCallback,
|
|
453
|
+
export declare function withProgress<T>({ label, total, statusCallback, signal, }: {
|
|
454
454
|
label: string;
|
|
455
455
|
total: number;
|
|
456
456
|
statusCallback?: (status: RpcStatus) => void;
|
|
457
|
-
|
|
457
|
+
signal?: AbortSignal;
|
|
458
458
|
}, fn: (report: ProgressReporter) => T | Promise<T>): Promise<T>;
|
|
459
459
|
export {};
|
package/esm/util/progress.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { checkAbortSignal, withAbortCheck } from './aborting.js';
|
|
2
2
|
import { createTimeGate } from './timeGate.js';
|
|
3
3
|
const openPhases = new WeakMap();
|
|
4
4
|
/**
|
|
@@ -41,9 +41,9 @@ function openPhase(cb, label) {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Indeterminate phase: set `label` on the status channel, run `fn`, then restore
|
|
44
|
-
* whatever phase encloses it — `''` when there is none. Pass `
|
|
44
|
+
* whatever phase encloses it — `''` when there is none. Pass `signal` and the
|
|
45
45
|
* phase becomes a cancellation boundary too: this is the labelled form of
|
|
46
|
-
* {@link
|
|
46
|
+
* {@link withAbortCheck}, so `fn` is checked on both sides of its await and
|
|
47
47
|
* neither check has to be remembered at the call site. The determinate
|
|
48
48
|
* counterpart is {@link withProgress}.
|
|
49
49
|
*
|
|
@@ -55,7 +55,7 @@ function openPhase(cb, label) {
|
|
|
55
55
|
* fetching — `downloadPhase(label, location)` builds one — and a plain string
|
|
56
56
|
* everywhere else. It nests and retires identically either way.
|
|
57
57
|
*/
|
|
58
|
-
export async function updateStatus(msg, cb, fn,
|
|
58
|
+
export async function updateStatus(msg, cb, fn, signal) {
|
|
59
59
|
const endPhase = openPhase(cb, msg);
|
|
60
60
|
// pessimistic, so anything leaving this scope other than a value — a throw, a
|
|
61
61
|
// cancel — retires the phase as unfinished
|
|
@@ -65,7 +65,7 @@ export async function updateStatus(msg, cb, fn, stopToken) {
|
|
|
65
65
|
// forever — the error surfaces under a stale "Downloading file"
|
|
66
66
|
try {
|
|
67
67
|
cb?.(msg);
|
|
68
|
-
const result = await
|
|
68
|
+
const result = await withAbortCheck(signal, fn);
|
|
69
69
|
outcome = 'completed';
|
|
70
70
|
return result;
|
|
71
71
|
}
|
|
@@ -341,7 +341,7 @@ export function throttleStatusEmits(emit) {
|
|
|
341
341
|
* of a burst, not each one in turn.
|
|
342
342
|
*
|
|
343
343
|
* Both fetch families own one: `FetchMixin` for the LGV displays, and
|
|
344
|
-
* `
|
|
344
|
+
* `createAbortRotation` for the bare-autorun fetches (dotplot, synteny)
|
|
345
345
|
* that compose no fetch mixin — and a display that has both lends the mixin's
|
|
346
346
|
* to the rotation rather than opening a second on one field. A plain function
|
|
347
347
|
* rather than shared model state because the two families declare their status
|
|
@@ -531,14 +531,14 @@ function downloadStatusReporter(statusCallback, label) {
|
|
|
531
531
|
* which: bytes for the index readers, blocks and expected-value chunks for
|
|
532
532
|
* `@gmod/hic`. All of them report `(current, total?)`.
|
|
533
533
|
*
|
|
534
|
-
* `
|
|
534
|
+
* `signal` makes the phase a cancellation boundary, exactly as it does on
|
|
535
535
|
* {@link updateStatus} — `fn` is checked on both sides of its await.
|
|
536
536
|
*
|
|
537
537
|
* A {@link StatusPhase} `label` carries its source onto the readings too, so a
|
|
538
538
|
* download that stalls part-way through still names the file it was reading.
|
|
539
539
|
*/
|
|
540
|
-
export async function downloadStatus(label, statusCallback, fn,
|
|
541
|
-
return updateStatus(label, statusCallback, () => fn(downloadStatusReporter(statusCallback, label)),
|
|
540
|
+
export async function downloadStatus(label, statusCallback, fn, signal) {
|
|
541
|
+
return updateStatus(label, statusCallback, () => fn(downloadStatusReporter(statusCallback, label)), signal);
|
|
542
542
|
}
|
|
543
543
|
/** How much of `message` this slot has already finished. */
|
|
544
544
|
function finished(slot, message) {
|
|
@@ -751,20 +751,22 @@ function continuesPhase(previous, status) {
|
|
|
751
751
|
reading.current >= previous.current);
|
|
752
752
|
}
|
|
753
753
|
/**
|
|
754
|
-
* The single per-iteration callback for long
|
|
755
|
-
*
|
|
756
|
-
*
|
|
754
|
+
* The single per-iteration callback for long worker loops. The returned
|
|
755
|
+
* `report(current)` is called once per outer-loop iteration and does two jobs
|
|
756
|
+
* on each call:
|
|
757
757
|
*
|
|
758
|
-
* - checks
|
|
759
|
-
*
|
|
760
|
-
* of only at phase boundaries, and
|
|
758
|
+
* - checks `signal`, which sees only an abort that landed at the loop's last
|
|
759
|
+
* await, and
|
|
761
760
|
* - emits a {@link StatusWithProgress} through `statusCallback` at most once per
|
|
762
761
|
* `throttleMs`, so the main thread gets a live percentage without flooding
|
|
763
762
|
* the postMessage channel.
|
|
764
763
|
*
|
|
764
|
+
* `report()` never yields, so it does not make a loop interruptible. A loop
|
|
765
|
+
* that can run for seconds takes `createAbortBreakpoint` beside it.
|
|
766
|
+
*
|
|
765
767
|
* Both jobs are optional: with no `statusCallback`/`total` this is purely a
|
|
766
|
-
*
|
|
767
|
-
*
|
|
768
|
+
* cancellation tick, so a loop has exactly one inner callback whether or not
|
|
769
|
+
* it drives the progress UI.
|
|
768
770
|
*
|
|
769
771
|
* Emission is gated on wall-clock time (`throttleMs`) through {@link
|
|
770
772
|
* createTimeGate}, which thins the `Date.now()` reads as well as the emits —
|
|
@@ -772,13 +774,12 @@ function continuesPhase(previous, status) {
|
|
|
772
774
|
* plain `for` and call `report()` once per item (it owns the counter), or
|
|
773
775
|
* `report(n)` for an explicit position.
|
|
774
776
|
*/
|
|
775
|
-
export function createProgressReporter({ label = '', total, statusCallback,
|
|
776
|
-
const checker = stopTokenCheck ?? createStopTokenChecker(stopToken);
|
|
777
|
+
export function createProgressReporter({ label = '', total, statusCallback, signal, throttleMs = 100, }) {
|
|
777
778
|
const emitDue = createTimeGate();
|
|
778
779
|
let count = 0;
|
|
779
780
|
return (current = count) => {
|
|
780
781
|
count = current + 1;
|
|
781
|
-
|
|
782
|
+
checkAbortSignal(signal);
|
|
782
783
|
if (statusCallback !== undefined &&
|
|
783
784
|
total !== undefined &&
|
|
784
785
|
emitDue(throttleMs)) {
|
|
@@ -788,29 +789,29 @@ export function createProgressReporter({ label = '', total, statusCallback, stop
|
|
|
788
789
|
}
|
|
789
790
|
/**
|
|
790
791
|
* Run a measurable phase: shows `label` at 0%, hands `fn` a {@link
|
|
791
|
-
* ProgressReporter} to drive during the work, then checks the
|
|
792
|
+
* ProgressReporter} to drive during the work, then checks the signal once
|
|
792
793
|
* more and restores the enclosing phase. The determinate counterpart to
|
|
793
794
|
* `updateStatus`, and it nests the same way — see {@link openPhase}.
|
|
794
795
|
*/
|
|
795
|
-
export async function withProgress({ label, total, statusCallback,
|
|
796
|
+
export async function withProgress({ label, total, statusCallback, signal, }, fn) {
|
|
796
797
|
const report = createProgressReporter({
|
|
797
798
|
label,
|
|
798
799
|
total,
|
|
799
800
|
statusCallback,
|
|
800
|
-
|
|
801
|
+
signal,
|
|
801
802
|
});
|
|
802
803
|
const endPhase = openPhase(statusCallback, label);
|
|
803
804
|
// pessimistic for the same reason as `updateStatus`: a phase that leaves this
|
|
804
805
|
// scope any way other than returning did not finish its work
|
|
805
806
|
let outcome = 'failed';
|
|
806
807
|
try {
|
|
807
|
-
// inside the try, because `report` checks the
|
|
808
|
-
// so throws here on
|
|
808
|
+
// inside the try, because `report` checks the signal before it emits and
|
|
809
|
+
// so throws here on one already aborted. Outside, that threw past the
|
|
809
810
|
// close and left the phase open on the channel — a slot whose last word is a
|
|
810
811
|
// label is one `aggregateStatus` counts as in flight for the rest of the
|
|
811
812
|
// batch.
|
|
812
813
|
report(0);
|
|
813
|
-
const result = await
|
|
814
|
+
const result = await withAbortCheck(signal, () => fn(report));
|
|
814
815
|
outcome = 'completed';
|
|
815
816
|
return result;
|
|
816
817
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** The quantile "Clip outliers" clips at on a scale whose own default is the extremes. */
|
|
2
|
+
export declare const DEFAULT_CLIP_QUANTILE = 0.99;
|
|
3
|
+
/**
|
|
4
|
+
* #api
|
|
5
|
+
* The quantile a clip toggle writes: a scale's declared default where that
|
|
6
|
+
* clips, below 1, else {@link DEFAULT_CLIP_QUANTILE}.
|
|
7
|
+
*/
|
|
8
|
+
export declare function clipQuantileOf(declaredDefault: unknown): number;
|
|
9
|
+
/**
|
|
10
|
+
* #api
|
|
11
|
+
* The `k`th smallest of `a[0, n)`, permuting `a` in place. Exact, where a
|
|
12
|
+
* histogram collapses skewed contact counts into its bottom bucket, and O(n)
|
|
13
|
+
* where a sort of 4.5M counts measured ~1s. Median-of-three because Hi-C
|
|
14
|
+
* contacts arrive nearly sorted.
|
|
15
|
+
*/
|
|
16
|
+
export declare function selectNth(a: Float32Array, n: number, k: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* #api
|
|
19
|
+
* The least and greatest finite values of `values[0, count)`,
|
|
20
|
+
* `[Infinity, -Infinity]` where none is finite.
|
|
21
|
+
*/
|
|
22
|
+
export declare function finiteExtremes(values: ArrayLike<number>, count: number): [number, number];
|
|
23
|
+
/**
|
|
24
|
+
* #api
|
|
25
|
+
* The nearest-rank `quantile` of `a[0, n)`: the smallest value at least that
|
|
26
|
+
* share of them sit at or below, so a handful of values clips at their
|
|
27
|
+
* maximum. Permutes `a`; 0 where `n` is.
|
|
28
|
+
*/
|
|
29
|
+
export declare function quantileOf(a: Float32Array, n: number, quantile: number): number;
|
|
30
|
+
/**
|
|
31
|
+
* #api
|
|
32
|
+
* What the open ends of a scale follow over `values[0, count)`: at a
|
|
33
|
+
* `quantile` of 1 their finite extremes, and below it each end clipped at
|
|
34
|
+
* that quantile of the values on its side of 0, so one spike takes neither
|
|
35
|
+
* the axis nor the ramp, and a sparse tail of the other sign keeps its own
|
|
36
|
+
* end. An axis that starts at 0 adds it itself. Under 0.5 reads as 0.5,
|
|
37
|
+
* where the ends meet rather than cross. `scales.y.domainQuantile` and a
|
|
38
|
+
* colour's `domainQuantile` both name it. `[Infinity, -Infinity]` where
|
|
39
|
+
* nothing is finite.
|
|
40
|
+
*/
|
|
41
|
+
export declare function quantileExtent(values: ArrayLike<number>, count: number, quantile?: number): [number, number];
|
|
42
|
+
/**
|
|
43
|
+
* #api
|
|
44
|
+
* {@link quantileExtent} as a scale's open ends read it: over every finite
|
|
45
|
+
* value on a linear scale, and on a log scale over the positive ones, since a
|
|
46
|
+
* 0 or a negative met there would floor the domain at 1 and fold a domain
|
|
47
|
+
* below 1 flat. `[Infinity, -Infinity]` where the scale reads nothing.
|
|
48
|
+
*/
|
|
49
|
+
export declare function scaleExtent(values: ArrayLike<number>, count: number, scale: string, quantile?: number): [number, number];
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/** The quantile "Clip outliers" clips at on a scale whose own default is the extremes. */
|
|
2
|
+
export const DEFAULT_CLIP_QUANTILE = 0.99;
|
|
3
|
+
/**
|
|
4
|
+
* #api
|
|
5
|
+
* The quantile a clip toggle writes: a scale's declared default where that
|
|
6
|
+
* clips, below 1, else {@link DEFAULT_CLIP_QUANTILE}.
|
|
7
|
+
*/
|
|
8
|
+
export function clipQuantileOf(declaredDefault) {
|
|
9
|
+
return typeof declaredDefault === 'number' && declaredDefault < 1
|
|
10
|
+
? declaredDefault
|
|
11
|
+
: DEFAULT_CLIP_QUANTILE;
|
|
12
|
+
}
|
|
13
|
+
function swap(a, i, j) {
|
|
14
|
+
const t = a[i];
|
|
15
|
+
a[i] = a[j];
|
|
16
|
+
a[j] = t;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* #api
|
|
20
|
+
* The `k`th smallest of `a[0, n)`, permuting `a` in place. Exact, where a
|
|
21
|
+
* histogram collapses skewed contact counts into its bottom bucket, and O(n)
|
|
22
|
+
* where a sort of 4.5M counts measured ~1s. Median-of-three because Hi-C
|
|
23
|
+
* contacts arrive nearly sorted.
|
|
24
|
+
*/
|
|
25
|
+
export function selectNth(a, n, k) {
|
|
26
|
+
let lo = 0;
|
|
27
|
+
let hi = n - 1;
|
|
28
|
+
while (lo < hi) {
|
|
29
|
+
const mid = (lo + hi) >>> 1;
|
|
30
|
+
if (a[mid] < a[lo]) {
|
|
31
|
+
swap(a, mid, lo);
|
|
32
|
+
}
|
|
33
|
+
if (a[hi] < a[lo]) {
|
|
34
|
+
swap(a, hi, lo);
|
|
35
|
+
}
|
|
36
|
+
if (a[hi] < a[mid]) {
|
|
37
|
+
swap(a, hi, mid);
|
|
38
|
+
}
|
|
39
|
+
const pivot = a[mid];
|
|
40
|
+
let i = lo;
|
|
41
|
+
let j = hi;
|
|
42
|
+
while (i <= j) {
|
|
43
|
+
while (a[i] < pivot) {
|
|
44
|
+
i++;
|
|
45
|
+
}
|
|
46
|
+
while (a[j] > pivot) {
|
|
47
|
+
j--;
|
|
48
|
+
}
|
|
49
|
+
if (i <= j) {
|
|
50
|
+
swap(a, i, j);
|
|
51
|
+
i++;
|
|
52
|
+
j--;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (k <= j) {
|
|
56
|
+
hi = j;
|
|
57
|
+
}
|
|
58
|
+
else if (k >= i) {
|
|
59
|
+
lo = i;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return a[k];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return a[k];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* #api
|
|
69
|
+
* The least and greatest finite values of `values[0, count)`,
|
|
70
|
+
* `[Infinity, -Infinity]` where none is finite.
|
|
71
|
+
*/
|
|
72
|
+
export function finiteExtremes(values, count) {
|
|
73
|
+
let min = Infinity;
|
|
74
|
+
let max = -Infinity;
|
|
75
|
+
for (let i = 0; i < count; i++) {
|
|
76
|
+
const v = values[i];
|
|
77
|
+
if (Number.isFinite(v)) {
|
|
78
|
+
if (v < min) {
|
|
79
|
+
min = v;
|
|
80
|
+
}
|
|
81
|
+
if (v > max) {
|
|
82
|
+
max = v;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return [min, max];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* #api
|
|
90
|
+
* The nearest-rank `quantile` of `a[0, n)`: the smallest value at least that
|
|
91
|
+
* share of them sit at or below, so a handful of values clips at their
|
|
92
|
+
* maximum. Permutes `a`; 0 where `n` is.
|
|
93
|
+
*/
|
|
94
|
+
export function quantileOf(a, n, quantile) {
|
|
95
|
+
return n === 0
|
|
96
|
+
? 0
|
|
97
|
+
: selectNth(a, n, Math.min(n - 1, Math.max(0, Math.ceil(quantile * n) - 1)));
|
|
98
|
+
}
|
|
99
|
+
function lowQuantileOf(a, n, quantile) {
|
|
100
|
+
return n === 0
|
|
101
|
+
? 0
|
|
102
|
+
: selectNth(a, n, Math.max(0, Math.min(n - 1, n - Math.ceil(quantile * n))));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* #api
|
|
106
|
+
* What the open ends of a scale follow over `values[0, count)`: at a
|
|
107
|
+
* `quantile` of 1 their finite extremes, and below it each end clipped at
|
|
108
|
+
* that quantile of the values on its side of 0, so one spike takes neither
|
|
109
|
+
* the axis nor the ramp, and a sparse tail of the other sign keeps its own
|
|
110
|
+
* end. An axis that starts at 0 adds it itself. Under 0.5 reads as 0.5,
|
|
111
|
+
* where the ends meet rather than cross. `scales.y.domainQuantile` and a
|
|
112
|
+
* colour's `domainQuantile` both name it. `[Infinity, -Infinity]` where
|
|
113
|
+
* nothing is finite.
|
|
114
|
+
*/
|
|
115
|
+
export function quantileExtent(values, count, quantile = 1) {
|
|
116
|
+
if (!(quantile < 1)) {
|
|
117
|
+
return finiteExtremes(values, count);
|
|
118
|
+
}
|
|
119
|
+
const q = Math.max(0.5, quantile);
|
|
120
|
+
const positive = new Float32Array(count);
|
|
121
|
+
const negative = new Float32Array(count);
|
|
122
|
+
let np = 0;
|
|
123
|
+
let nn = 0;
|
|
124
|
+
for (let i = 0; i < count; i++) {
|
|
125
|
+
const v = values[i];
|
|
126
|
+
if (Number.isFinite(v)) {
|
|
127
|
+
if (v >= 0) {
|
|
128
|
+
positive[np++] = v;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
negative[nn++] = v;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (np + nn === 0) {
|
|
136
|
+
return [Infinity, -Infinity];
|
|
137
|
+
}
|
|
138
|
+
const low = nn > 0 ? lowQuantileOf(negative, nn, q) : lowQuantileOf(positive, np, q);
|
|
139
|
+
const high = np > 0 ? quantileOf(positive, np, q) : quantileOf(negative, nn, q);
|
|
140
|
+
return [Math.min(low, high), high];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* #api
|
|
144
|
+
* {@link quantileExtent} as a scale's open ends read it: over every finite
|
|
145
|
+
* value on a linear scale, and on a log scale over the positive ones, since a
|
|
146
|
+
* 0 or a negative met there would floor the domain at 1 and fold a domain
|
|
147
|
+
* below 1 flat. `[Infinity, -Infinity]` where the scale reads nothing.
|
|
148
|
+
*/
|
|
149
|
+
export function scaleExtent(values, count, scale, quantile = 1) {
|
|
150
|
+
if (scale !== 'log') {
|
|
151
|
+
return quantileExtent(values, count, quantile);
|
|
152
|
+
}
|
|
153
|
+
const positive = new Float32Array(count);
|
|
154
|
+
let np = 0;
|
|
155
|
+
for (let i = 0; i < count; i++) {
|
|
156
|
+
const v = values[i];
|
|
157
|
+
if (v > 0 && Number.isFinite(v)) {
|
|
158
|
+
positive[np++] = v;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return quantileExtent(positive, np, quantile);
|
|
162
|
+
}
|
package/esm/util/range.d.ts
CHANGED
|
@@ -20,9 +20,15 @@ export declare function doesIntersect2(left1: number, right1: number, left2: num
|
|
|
20
20
|
/**
|
|
21
21
|
* Compute the expanded fetch range a tabix adapter must "redispatch" to when
|
|
22
22
|
* features found in a query extend past the requested window. Returns the union
|
|
23
|
-
* of the query with the bounds of every
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* of the query with the bounds of every line `expands` admits, or `undefined`
|
|
24
|
+
* when nothing extends past the query (no redispatch needed).
|
|
25
|
+
*
|
|
26
|
+
* **A predicate, not a set of types**, because the useful question is not what a
|
|
27
|
+
* record is called. The bound exists to reach a record's *children*, so what
|
|
28
|
+
* disqualifies a record is having none — and in GFF3 that is answerable exactly,
|
|
29
|
+
* from whether the record carries an `ID` for a `Parent` to reference. A type
|
|
30
|
+
* blocklist can only ever approximate it, and it is the caller's format that
|
|
31
|
+
* knows how: this file reads no column but the coordinates.
|
|
26
32
|
*
|
|
27
33
|
* Feature coordinates arrive interbase, matching the query: @gmod/tabix applies
|
|
28
34
|
* the index's coordinate offset before invoking the line callback, so a GFF/GTF
|
|
@@ -30,15 +36,13 @@ export declare function doesIntersect2(left1: number, right1: number, left2: num
|
|
|
30
36
|
*
|
|
31
37
|
* Seeding the accumulator with the query bounds is what makes the result a
|
|
32
38
|
* union rather than just the feature bounds. A redispatch narrower than the
|
|
33
|
-
* original window would drop
|
|
34
|
-
*
|
|
35
|
-
* those types are deliberately excluded from the bounds.
|
|
39
|
+
* original window would drop an excluded line that the first fetch found inside
|
|
40
|
+
* the query but that falls outside the expanded range.
|
|
36
41
|
*/
|
|
37
|
-
export declare function calculateRedispatchRange
|
|
42
|
+
export declare function calculateRedispatchRange<T extends {
|
|
38
43
|
start: number;
|
|
39
44
|
end: number;
|
|
40
|
-
|
|
41
|
-
}[], dontRedispatchSet: Set<string>, queryStart: number, queryEnd: number): {
|
|
45
|
+
}>(features: T[], expands: (feature: T) => boolean, queryStart: number, queryEnd: number): {
|
|
42
46
|
start: number;
|
|
43
47
|
end: number;
|
|
44
48
|
} | undefined;
|
package/esm/util/range.js
CHANGED
|
@@ -45,9 +45,15 @@ export function doesIntersect2(left1, right1, left2, right2) {
|
|
|
45
45
|
/**
|
|
46
46
|
* Compute the expanded fetch range a tabix adapter must "redispatch" to when
|
|
47
47
|
* features found in a query extend past the requested window. Returns the union
|
|
48
|
-
* of the query with the bounds of every
|
|
49
|
-
*
|
|
50
|
-
*
|
|
48
|
+
* of the query with the bounds of every line `expands` admits, or `undefined`
|
|
49
|
+
* when nothing extends past the query (no redispatch needed).
|
|
50
|
+
*
|
|
51
|
+
* **A predicate, not a set of types**, because the useful question is not what a
|
|
52
|
+
* record is called. The bound exists to reach a record's *children*, so what
|
|
53
|
+
* disqualifies a record is having none — and in GFF3 that is answerable exactly,
|
|
54
|
+
* from whether the record carries an `ID` for a `Parent` to reference. A type
|
|
55
|
+
* blocklist can only ever approximate it, and it is the caller's format that
|
|
56
|
+
* knows how: this file reads no column but the coordinates.
|
|
51
57
|
*
|
|
52
58
|
* Feature coordinates arrive interbase, matching the query: @gmod/tabix applies
|
|
53
59
|
* the index's coordinate offset before invoking the line callback, so a GFF/GTF
|
|
@@ -55,15 +61,18 @@ export function doesIntersect2(left1, right1, left2, right2) {
|
|
|
55
61
|
*
|
|
56
62
|
* Seeding the accumulator with the query bounds is what makes the result a
|
|
57
63
|
* union rather than just the feature bounds. A redispatch narrower than the
|
|
58
|
-
* original window would drop
|
|
59
|
-
*
|
|
60
|
-
* those types are deliberately excluded from the bounds.
|
|
64
|
+
* original window would drop an excluded line that the first fetch found inside
|
|
65
|
+
* the query but that falls outside the expanded range.
|
|
61
66
|
*/
|
|
62
|
-
export function calculateRedispatchRange(features,
|
|
67
|
+
export function calculateRedispatchRange(features, expands, queryStart, queryEnd) {
|
|
63
68
|
let minStart = queryStart;
|
|
64
69
|
let maxEnd = queryEnd;
|
|
70
|
+
// bounds first: only a line reaching past the current bound can widen it, so
|
|
71
|
+
// the predicate, which may scan the line's text, runs on those few lines and
|
|
72
|
+
// not on every line in the window
|
|
65
73
|
for (const feature of features) {
|
|
66
|
-
if (
|
|
74
|
+
if ((feature.start < minStart || feature.end > maxEnd) &&
|
|
75
|
+
expands(feature)) {
|
|
67
76
|
if (feature.start < minStart) {
|
|
68
77
|
minStart = feature.start;
|
|
69
78
|
}
|
|
@@ -1,21 +1,41 @@
|
|
|
1
1
|
import type { StatusCallback } from './progress.ts';
|
|
2
|
-
import type { StopToken } from './stopToken.ts';
|
|
3
2
|
import type { AssemblyManager, Region } from './types/index.ts';
|
|
4
3
|
import type { Region as MUIRegion } from './types/mst.ts';
|
|
5
4
|
import type { Instance } from '@jbrowse/mobx-state-tree';
|
|
6
5
|
export declare function renameRegionIfNeeded(refNameMap: Record<string, string> | undefined, region: Region | Instance<typeof MUIRegion>, getSeqAdapterRefName?: (refName: string) => string): Region & {
|
|
7
6
|
originalRefName?: string;
|
|
8
7
|
};
|
|
9
|
-
|
|
10
|
-
assemblyName?: string;
|
|
8
|
+
interface RenameArgs {
|
|
11
9
|
regions?: Region[];
|
|
12
|
-
|
|
10
|
+
signal?: AbortSignal;
|
|
13
11
|
adapterConfig: Record<string, unknown>;
|
|
14
12
|
sessionId: string;
|
|
15
13
|
statusCallback?: StatusCallback;
|
|
16
|
-
}
|
|
17
|
-
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Rename for a request about one genome, which is every request but a
|
|
17
|
+
* comparative one. The call's genome is its regions' genome, and renaming
|
|
18
|
+
* writes it as the call's `assemblyName`, the one field a call names its
|
|
19
|
+
* genome in: `RpcMethodType.serializeArguments` turns it into the reference a
|
|
20
|
+
* BAM/CRAM or scan adapter is built with. A region on another assembly is
|
|
21
|
+
* refused: a request over a synteny adapter renames with
|
|
22
|
+
* {@link renameComparativeRegions}.
|
|
23
|
+
*/
|
|
24
|
+
export declare function renameRegionsIfNeeded<ARGTYPE extends RenameArgs>(assemblyManager: AssemblyManager, args: ARGTYPE): Promise<ARGTYPE & {
|
|
25
|
+
assemblyName: string | undefined;
|
|
18
26
|
regions: (Region & {
|
|
19
27
|
originalRefName?: string;
|
|
20
28
|
})[];
|
|
21
29
|
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Rename for a comparative request (synteny, dotplot, chords), whose regions
|
|
32
|
+
* sit on two or more assemblies and are each renamed against their own. Such a
|
|
33
|
+
* request has no genome of its own, so it names none and no reference rides
|
|
34
|
+
* on it; a synteny adapter reads no reference.
|
|
35
|
+
*/
|
|
36
|
+
export declare function renameComparativeRegions<ARGTYPE extends RenameArgs>(assemblyManager: AssemblyManager, args: ARGTYPE): Promise<ARGTYPE & {
|
|
37
|
+
regions: (Region & {
|
|
38
|
+
originalRefName?: string;
|
|
39
|
+
})[];
|
|
40
|
+
}>;
|
|
41
|
+
export {};
|