@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/index.js
CHANGED
|
@@ -12,7 +12,7 @@ export { capitalizeFirst, pluralize, shorten, shorten2, truncateMiddle, } from '
|
|
|
12
12
|
export { formatBytes } from './formatBytes.js';
|
|
13
13
|
export { getFillProps, getStrokeProps, stripAlpha } from './svgColorProps.js';
|
|
14
14
|
export { fetchAndMaybeUnzip, fetchAndMaybeUnzipText, isGzip, } from './fetchAndMaybeUnzip.js';
|
|
15
|
-
export { AuthNeededError, addOrReplaceView, canReplaceView, isAbstractMenuManager, isAppRootModel, isAuthNeededException, isBlobLocation, isDisplayModel, isFileHandleLocation, isLocalPathLocation, isRootModelWithInternetAccounts, isSelectionContainer, isSessionModel, isSessionServices, isSessionModelWithConfigEditing, isSessionModelWithConnectionEditing, isSessionModelWithConnections, isSessionModelWithWidgets, isSessionWithAddAssembly, isSessionWithAddSessionTrack, isSessionWithAddTracks, isSessionWithPublishTrackConf, isSessionWithDeleteTrackConf, isSessionWithPermanentPlugins, isSessionWithSessionPlugins, isSessionWithSessionTracks, isSessionWithShareURL, isSessionWithViewReplacement, isTrackModel, isTrackViewModel, isUriLocation, isViewContainer, isViewModel, } from './types/index.js';
|
|
15
|
+
export { AuthNeededError, addOrReplaceView, canReplaceView, isAbstractMenuManager, isAppRootModel, isAuthNeededException, isBlobLocation, isDisplayModel, isFileHandleLocation, isLocalPathLocation, isRootModelWithInternetAccounts, isSelectionContainer, isSessionModel, isSessionServices, isSessionModelWithConfigEditing, isSessionModelWithConnectionEditing, isSessionModelWithConnections, isSessionModelWithWidgets, isSessionWithAddAssembly, isSessionWithAddSessionTrack, isSessionWithAddTracks, isSessionWithPublishTrackConf, isSessionWithDeleteTrackConf, isSessionWithMultipleViews, isSessionWithPermanentPlugins, isSessionWithSessionPlugins, isSessionWithSessionTracks, isSessionWithShareURL, isSessionWithViewReplacement, isTrackModel, isTrackViewModel, isUriLocation, isViewContainer, isViewModel, } from './types/index.js';
|
|
16
16
|
export { getPluginUpdate, installablePlugins, installedVersionFromUrl, isPluginInstalled, resolvePlugin, resolveStorePluginRefs, resolveStoreRefs, } from './pluginStore.js';
|
|
17
17
|
export { createProgressReporter, createStatusFanOut, createStatusWindow, downloadStatus, progressLabel, statusFraction, statusMessageText, statusProgressLabel, statusReading, statusSource, throttleStatusEmits, updateStatus, withProgress, } from './progress.js';
|
|
18
18
|
export { calculateRedispatchRange, doesIntersect2, intersection2, } from './range.js';
|
|
@@ -29,11 +29,11 @@ export { MAX_ZOOM_RATE_PER_MS, SCROLL_ZOOM_FACTOR_DIVISOR, ZOOM_ACTIVE_WINDOW_MS
|
|
|
29
29
|
export { avg, clamp, getDisplayStr, getNumberGrouping, max, maxFinite, min, minmax, polarToCartesian, radToDeg, reducePrecision, setNumberGrouping, sum, toLocale, } from './numericUtils.js';
|
|
30
30
|
export { bpSpanPx, bpToPx, bytesForRegions, featureSpanPx, getBpDisplayStr, getTickDisplayStr, parseBpString, } from './bpUtils.js';
|
|
31
31
|
export { gatherOverlaps, mergeIntervals, } from './intervals.js';
|
|
32
|
-
export { clampToContig } from './clampToContig.js';
|
|
33
|
-
export { animationAllowed } from './animationAllowed.js';
|
|
32
|
+
export { clampToContig, clampToListedContig } from './clampToContig.js';
|
|
33
|
+
export { MORPH_DURATION_MS, animationAllowed, easeInOutCubic, morphClockMs, } from './animationAllowed.js';
|
|
34
34
|
export { springAnimate } from './springAnimate.js';
|
|
35
35
|
export { localStorageAvailable, localStorageGetBoolean, localStorageGetItem, localStorageGetJSON, localStorageGetNumber, localStorageGetStringArray, localStorageRemoveItem, localStorageSetBoolean, localStorageSetItem, localStorageSetJSON, localStorageSetNumber, notifyLocalStorageKey, subscribeToLocalStorageKey, } from './localStorage.js';
|
|
36
|
-
export { renameRegionIfNeeded, renameRegionsIfNeeded } from './renameRegions.js';
|
|
36
|
+
export { renameComparativeRegions, renameRegionIfNeeded, renameRegionsIfNeeded, } from './renameRegions.js';
|
|
37
37
|
export { addAndShowTrack } from './addAndShowTrack.js';
|
|
38
38
|
export { addTrackFromWidget, containerDisplaysAssembly, finishAddTrack, } from './addTrackFromWidget.js';
|
|
39
39
|
export { namesTemporaryAssembly } from './temporaryAssembly.js';
|
|
@@ -44,7 +44,6 @@ export { indexedDBAvailable, isElectron, isNode, rIC } from './environment.js';
|
|
|
44
44
|
export { isWebWorker } from './isWebWorker.js';
|
|
45
45
|
export { sessionStorageAvailable, sessionStorageGetItem, sessionStorageRemoveItem, sessionStorageSetItem, } from './sessionStorage.js';
|
|
46
46
|
export { isObject } from './objectUtils.js';
|
|
47
|
-
export { openPromotableDisplays } from './openDisplays.js';
|
|
48
47
|
export { applyOrderWithin, reorder, reorderWithin, } from './reorder.js';
|
|
49
48
|
export { getStr } from './getStr.js';
|
|
50
49
|
export { downloadPhase, getLocationUri, resolveUri } from './getLocationUri.js';
|
|
@@ -53,7 +52,7 @@ export { isRpcResult } from './rpc.js';
|
|
|
53
52
|
export { aesDecrypt, aesEncrypt, sha256, sha256Base64, sha256Base64Url, toBase64, toBase64Url, } from './crypto.js';
|
|
54
53
|
export { notifyFeatureDetailsMiss, openFeatureWidget, } from './openFeatureWidget.js';
|
|
55
54
|
export { withFeatureDetails } from './withFeatureDetails.js';
|
|
56
|
-
export { canonicalizeViewRefName, findParentThat, findParentThatIs, getAssemblyHost, getContainingDisplay, getContainingTrack, getContainingView, getEnv, getRenderingServices, getSession, hashCode, objectHash, } from './mstUtils.js';
|
|
55
|
+
export { canonicalizeViewRefName, findParentThat, findParentThatIs, getAssemblyHost, getContainingDisplay, getContainingTrack, getContainingView, getEnv, getRenderingServices, launchOrReplaceView, getSession, hashCode, objectHash, } from './mstUtils.js';
|
|
57
56
|
export { getDialogHost, getNotificationSink, getPaletteHost, getRpcHost, getSessionServices, } from './sessionServices.js';
|
|
58
57
|
// this is recommended in a later comment in
|
|
59
58
|
// https://github.com/electron/electron/issues/2288 for detecting electron in a
|
|
@@ -91,7 +90,6 @@ export { revlist } from './revlist.js';
|
|
|
91
90
|
// without it that is `(0, PR.useLocalStorage) is not a function` when the panel
|
|
92
91
|
// renders. The implementations never went anywhere -- only these lines did.
|
|
93
92
|
export { useCreateOnce, useDebounce, useFinalUnmount, useLocalStorage, useWidthSetter, } from './hooks.js';
|
|
94
|
-
export { renderToStaticMarkup } from './renderToStaticMarkup.js';
|
|
95
93
|
export { codonTable, defaultCodonTable, generateCodonTable, } from './geneticCodes.js';
|
|
96
94
|
export { IUPAC_MOTIF_REGEX, isPalindromic, iupacToRegex, reverseComplementIupac, } from './iupac.js';
|
|
97
95
|
export { parseMotifList, } from './parseMotifList.js';
|
|
@@ -121,6 +119,7 @@ export function isSupportedIndexingAdapter(type = '') {
|
|
|
121
119
|
// needing insertion order builds its own Map (see tree-sidebar's CLAUDE.md).
|
|
122
120
|
export function groupBy(array, predicate) {
|
|
123
121
|
const result = Object.create(null);
|
|
122
|
+
// eslint-disable-next-line unicorn/prefer-group-by -- Object.groupBy types its result Partial, which would widen every caller's Object.values to `T[] | undefined`
|
|
124
123
|
for (const value of array) {
|
|
125
124
|
const t = predicate(value);
|
|
126
125
|
result[t] ??= [];
|
|
@@ -137,17 +136,19 @@ export function testAdapter(fileName, regex, adapterHint, expected) {
|
|
|
137
136
|
export { default as SimpleFeature, isFeature, } from './simpleFeature.js';
|
|
138
137
|
export { saveAs } from './FileSaver/index.js';
|
|
139
138
|
export { saveSvgAsImage, svgHtmlToPngBlob, } from '../svg/saveSvgAsImage.js';
|
|
140
|
-
export { createStatusChannel,
|
|
139
|
+
export { createStatusChannel, createAbortRotation, } from './createAbortRotation.js';
|
|
141
140
|
// `installFetch` is deliberately NOT re-exported here: it reaches `getSession`
|
|
142
141
|
// through `fetchContext.ts`, which imports this barrel, so exporting it makes
|
|
143
142
|
// the barrel initialize itself. Import it from `@jbrowse/core/util/installFetch`.
|
|
144
143
|
export { createSharedSetup } from './cachedSetup.js';
|
|
144
|
+
export { scheduleDetachedDestroy } from './scheduleDetachedDestroy.js';
|
|
145
145
|
export { isDataCurrent } from './isDataCurrent.js';
|
|
146
146
|
export { handleFetchError, isAbortException, makeAbortError, } from './aborting.js';
|
|
147
147
|
export { linkify } from './linkify.js';
|
|
148
|
+
export { isGeneLikeType, isSequenceMatchType } from './featureTypes.js';
|
|
148
149
|
export { locStringsToRegions } from './locStringsToRegions.js';
|
|
149
150
|
export { UnknownRefNameError, assembleLocString, assembleLocStringRaw, assembleLocStrings, compareLocStrings, compareLocs, parseLocString, parseLocStringOneBased, stringify, } from './locString.js';
|
|
150
|
-
export {
|
|
151
|
+
export { checkAbortSignal, createAbortBreakpoint, withAbortCheck, } from './aborting.js';
|
|
151
152
|
export { adapterNeedsAddTrackComponent, addAddTrackComponent, } from './addTrackComponent.js';
|
|
152
153
|
export { adapterConfigFromSpec } from './formatGuessers.js';
|
|
153
154
|
export { UNKNOWN, UNSUPPORTED, addAdapterGuesser, addTrackTypeGuesser, clearFileFromCache, ensureFileHandleReady, expandLooseTrackConfig, findFileHandleIds, generateUnknownTrackConf, generateUnsupportedTrackConf, getBlob, getBlobMap, getConfAssemblyNames, getFileFromCache, getFileName, getRpcSessionId, getTrackAssemblyNames, getTrackName, guessAdapter, guessTrackConf, guessTrackType, hasFileHandlesInCache, hideTrackGeneric, isLooseTrackConfig, makeIndex, makeIndexType, restoreFileHandles, restoreFileHandlesFromSnapshot, setBlobMap, setFileInCache, showTrackGeneric, storeBlobLocation, storeFileHandleLocation, stripFileExtension, stripTrackIds, toggleTrackGeneric, } from './tracks.js';
|
|
@@ -155,5 +156,5 @@ export { getFileHandle, isFileSystemAccessSupported, storeFileHandle, verifyPerm
|
|
|
155
156
|
export { IntervalTree } from './IntervalTree.js';
|
|
156
157
|
export { cmpStr } from './cmpStr.js';
|
|
157
158
|
export { diffTrackConfig, flattenTrackConfigDelta, mergeTrackConfig, } from './trackConfigDelta.js';
|
|
158
|
-
export { BEZIER_CONNECTOR_MAX_REACH_PX, bezierConnectorPath, } from './bezierConnector.js';
|
|
159
|
+
export { BEZIER_CONNECTOR_MAX_REACH_PX, CUBIC_APEX_RATIO, bezierConnectorPath, } from './bezierConnector.js';
|
|
159
160
|
export { diagonalizeRegions, } from './diagonalizeRegions.js';
|
|
@@ -1,35 +1,5 @@
|
|
|
1
1
|
import type { FileLocation } from './types/data.ts';
|
|
2
|
-
|
|
3
|
-
* Every conventional spelling of an index file, for the docs that describe this
|
|
4
|
-
* behavior. Kept beside {@link indexCandidateNames}, which is the list actually
|
|
5
|
-
* probed, so the two are edited together.
|
|
6
|
-
*/
|
|
7
|
-
export declare const indexSpellings: {
|
|
8
|
-
name: string;
|
|
9
|
-
writtenBy: string;
|
|
10
|
-
}[];
|
|
11
|
-
/**
|
|
12
|
-
* The index filenames worth looking for beside `fileName`, best guess first.
|
|
13
|
-
*
|
|
14
|
-
* One data file has several names its index might carry, and picking only the
|
|
15
|
-
* first left everyone else with a missing-file error naming a path they never
|
|
16
|
-
* wrote:
|
|
17
|
-
*
|
|
18
|
-
* - `<file>.bai` / `.crai` / `.tbi` is what samtools and tabix write
|
|
19
|
-
* - `<file>.csi` is what htslib writes for a reference over 512 Mb, and on
|
|
20
|
-
* request at any size
|
|
21
|
-
* - `reads.bai` beside `reads.bam` is what Picard and GATK write, in place of
|
|
22
|
-
* samtools' `reads.bam.bai`
|
|
23
|
-
*
|
|
24
|
-
* Empty for a file type that carries no sibling index (BigWig, BigBed, hic),
|
|
25
|
-
* which is how a caller knows not to go looking.
|
|
26
|
-
*
|
|
27
|
-
* `jbrowse-cli` answers the same question in `siblingSidecar`
|
|
28
|
-
* (`commands/add-track-utils/adapter-utils.ts`) rather than calling this: it
|
|
29
|
-
* carries no `@jbrowse/core` dependency, so `npm i -g @jbrowse/cli` stays a CLI
|
|
30
|
-
* rather than a copy of the app. Change one, change the other.
|
|
31
|
-
*/
|
|
32
|
-
export declare function indexCandidateNames(fileName: string): string[];
|
|
2
|
+
export { indexCandidateNames, indexSpellings } from '@jbrowse/add-track-core';
|
|
33
3
|
/**
|
|
34
4
|
* `location` with its filename replaced, i.e. the sibling of a data file.
|
|
35
5
|
*
|
|
@@ -1,66 +1,8 @@
|
|
|
1
|
+
import { indexCandidateNames } from '@jbrowse/add-track-core';
|
|
1
2
|
import { getFileName } from './getFileName.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* probed, so the two are edited together.
|
|
6
|
-
*/
|
|
7
|
-
export const indexSpellings = [
|
|
8
|
-
{
|
|
9
|
-
name: '`<file>.tbi`, `<file>.bai`, `<file>.crai`',
|
|
10
|
-
writtenBy: 'samtools, tabix',
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
name: '`<file>.csi`',
|
|
14
|
-
writtenBy: 'htslib, for a reference over 512 Mb and on request at any size',
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: '`reads.bai` beside `reads.bam`',
|
|
18
|
-
writtenBy: 'Picard, GATK',
|
|
19
|
-
},
|
|
20
|
-
];
|
|
21
|
-
/**
|
|
22
|
-
* The index filenames worth looking for beside `fileName`, best guess first.
|
|
23
|
-
*
|
|
24
|
-
* One data file has several names its index might carry, and picking only the
|
|
25
|
-
* first left everyone else with a missing-file error naming a path they never
|
|
26
|
-
* wrote:
|
|
27
|
-
*
|
|
28
|
-
* - `<file>.bai` / `.crai` / `.tbi` is what samtools and tabix write
|
|
29
|
-
* - `<file>.csi` is what htslib writes for a reference over 512 Mb, and on
|
|
30
|
-
* request at any size
|
|
31
|
-
* - `reads.bai` beside `reads.bam` is what Picard and GATK write, in place of
|
|
32
|
-
* samtools' `reads.bam.bai`
|
|
33
|
-
*
|
|
34
|
-
* Empty for a file type that carries no sibling index (BigWig, BigBed, hic),
|
|
35
|
-
* which is how a caller knows not to go looking.
|
|
36
|
-
*
|
|
37
|
-
* `jbrowse-cli` answers the same question in `siblingSidecar`
|
|
38
|
-
* (`commands/add-track-utils/adapter-utils.ts`) rather than calling this: it
|
|
39
|
-
* carries no `@jbrowse/core` dependency, so `npm i -g @jbrowse/cli` stays a CLI
|
|
40
|
-
* rather than a copy of the app. Change one, change the other.
|
|
41
|
-
*/
|
|
42
|
-
export function indexCandidateNames(fileName) {
|
|
43
|
-
const lower = fileName.toLowerCase();
|
|
44
|
-
if (lower.endsWith('.bam')) {
|
|
45
|
-
return [
|
|
46
|
-
`${fileName}.bai`,
|
|
47
|
-
`${fileName}.csi`,
|
|
48
|
-
fileName.replace(/\.bam$/i, '.bai'),
|
|
49
|
-
];
|
|
50
|
-
}
|
|
51
|
-
if (lower.endsWith('.cram')) {
|
|
52
|
-
return [`${fileName}.crai`, fileName.replace(/\.cram$/i, '.crai')];
|
|
53
|
-
}
|
|
54
|
-
// the tabix family is spelled by its compression, not its content: a .gz here
|
|
55
|
-
// is a bgzipped VCF/GFF/BED/SAM, all of which index the same two ways. `.bgz`
|
|
56
|
-
// is the same file under the name htslib's own tools give it, so it takes the
|
|
57
|
-
// same candidates — every format guesser accepts `\.b?gz$`, and matching only
|
|
58
|
-
// `.gz` left a `calls.vcf.bgz` with no detection at all
|
|
59
|
-
if (/\.b?gz$/.test(lower)) {
|
|
60
|
-
return [`${fileName}.tbi`, `${fileName}.csi`];
|
|
61
|
-
}
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
3
|
+
// defined in `@jbrowse/add-track-core`, which is framework-free so `jbrowse-cli`
|
|
4
|
+
// reads the same list; re-exported because this subpath serves them to plugins
|
|
5
|
+
export { indexCandidateNames, indexSpellings } from '@jbrowse/add-track-core';
|
|
64
6
|
/**
|
|
65
7
|
* `location` with its filename replaced, i.e. the sibling of a data file.
|
|
66
8
|
*
|
|
@@ -73,7 +15,7 @@ export function siblingLocation(location, fileName) {
|
|
|
73
15
|
const replaceLast = (path) =>
|
|
74
16
|
// the separator is kept: a Windows local path uses backslashes and a URI
|
|
75
17
|
// never does, so rebuilding with '/' would corrupt one of them
|
|
76
|
-
path.replace(/[^/\\]*$/, fileName);
|
|
18
|
+
path.replace(/[^/\\]*$/, () => fileName);
|
|
77
19
|
if (location.locationType === 'UriLocation') {
|
|
78
20
|
return { ...location, uri: replaceLast(location.uri) };
|
|
79
21
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ActiveFetch, StatusReporter } from './
|
|
1
|
+
import type { ActiveFetch, StatusReporter, AbortRotation } from './createAbortRotation.ts';
|
|
2
2
|
import type { FetchContext } from './fetchContext.ts';
|
|
3
3
|
import type { FetchPhases } from './fetchPhases.ts';
|
|
4
4
|
import type { IStateTreeNode } from '@jbrowse/mobx-state-tree';
|
|
@@ -23,12 +23,17 @@ export interface FetchLifecycle {
|
|
|
23
23
|
setError: (error?: unknown) => void;
|
|
24
24
|
/**
|
|
25
25
|
* Runs synchronously as the fetch starts, after the rotation has superseded
|
|
26
|
-
* whatever it replaced: the loading flag (`FetchMixin`'s `
|
|
27
|
-
*
|
|
26
|
+
* whatever it replaced: the loading flag (`FetchMixin`'s `activeSignal`,
|
|
27
|
+
* through `fetchMixinLifecycle`), and anything a display blanks
|
|
28
28
|
* because it has no freshness signature to keep stale data honest with
|
|
29
29
|
* (chord's refName map).
|
|
30
|
+
*
|
|
31
|
+
* Takes the signal rather than the whole {@link ActiveFetch}: publishing it is
|
|
32
|
+
* the only thing any implementation does with the fetch, and the guard and
|
|
33
|
+
* the status slot are the skeleton's to hand out — through `ctx`, where a
|
|
34
|
+
* `run` gets them pre-wired.
|
|
30
35
|
*/
|
|
31
|
-
onBegin?: (
|
|
36
|
+
onBegin?: (signal: AbortSignal) => void;
|
|
32
37
|
/**
|
|
33
38
|
* Runs in the `finally`, before the rotation's `end()`. `current` is this
|
|
34
39
|
* run's own guard, already evaluated: a **superseded** run must not clear the
|
|
@@ -50,7 +55,7 @@ export interface FetchLifecycle {
|
|
|
50
55
|
* the loading flag on an abort. The rules only pay for themselves by being the
|
|
51
56
|
* same everywhere, so they live here and the differences are parameters.
|
|
52
57
|
*
|
|
53
|
-
* `active` comes from a {@link
|
|
58
|
+
* `active` comes from a {@link createAbortRotation} `begin()` the caller
|
|
54
59
|
* already made, because who owns the rotation is one of the real differences: a
|
|
55
60
|
* display's *primary* fetch rotates through `FetchMixin`, so `cancelFetch` can
|
|
56
61
|
* reach it, while every other fetch's rotation lives in its installer's closure
|
|
@@ -80,7 +85,7 @@ export interface FetchSkeletonHost extends IStateTreeNode {
|
|
|
80
85
|
reloadCounter: number;
|
|
81
86
|
/**
|
|
82
87
|
* The states where this host deliberately fetches nothing, read only by the
|
|
83
|
-
*
|
|
88
|
+
* retry contract check. A decline there is not a dead Retry.
|
|
84
89
|
*/
|
|
85
90
|
fetchInert: boolean;
|
|
86
91
|
/**
|
|
@@ -97,19 +102,11 @@ export interface FetchSkeletonHost extends IStateTreeNode {
|
|
|
97
102
|
*/
|
|
98
103
|
fetchCanceled?: boolean;
|
|
99
104
|
}
|
|
100
|
-
|
|
105
|
+
interface InstallFetchOptionsBase<TArgs, TResult> extends FetchPhases<TArgs, TResult, FetchContext>, FetchLifecycle {
|
|
101
106
|
/** autorun name, for the MobX devtools/spy stream */
|
|
102
107
|
name: string;
|
|
103
108
|
/** how long to coalesce reruns once the body has started work once */
|
|
104
109
|
delay: number;
|
|
105
|
-
/**
|
|
106
|
-
* Where this fetch's status lands. A display passes itself — its status
|
|
107
|
-
* fields are part of its own API, and one composing `FetchMixin` lends the
|
|
108
|
-
* model-wide window so this fetch takes a slot on the one field beside the
|
|
109
|
-
* display's other operations rather than opening a second writer over it.
|
|
110
|
-
* Anything with one operation to narrate passes a `createStatusChannel`.
|
|
111
|
-
*/
|
|
112
|
-
report: StatusReporter;
|
|
113
110
|
/**
|
|
114
111
|
* An extra skip above `prepare`, reported as `gated` rather than `declined`:
|
|
115
112
|
* the skeleton decided before the family's own gate was consulted, so it is
|
|
@@ -129,7 +126,7 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
|
|
|
129
126
|
* also be invalidated by `reload()`, or Retry re-runs the body straight into
|
|
130
127
|
* the same decline and the button is dead. Every layer that has one made
|
|
131
128
|
* that pairing structural in the end — the global family after arc shipped
|
|
132
|
-
* the bug (`GlobalFetchMixin.reload` drops `
|
|
129
|
+
* the bug (`GlobalFetchMixin.reload` drops `loadedFetchKey` in the same
|
|
133
130
|
* action as the bump) — and this is that move for the skeleton: a run whose
|
|
134
131
|
* `reloadCounter` has advanced since the run that last ISSUED a fetch ignores
|
|
135
132
|
* this gate, so nothing has to remember to clear anything. The multi-way
|
|
@@ -145,13 +142,17 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
|
|
|
145
142
|
*
|
|
146
143
|
* Omit it where the fetch holds no committed state to compare against — most
|
|
147
144
|
* of them, whose `prepare` returns args unconditionally.
|
|
145
|
+
*
|
|
146
|
+
* A value, compared by `isDataCurrent`: the settings a fetch was issued
|
|
147
|
+
* under go in as the object the worker receives, never as a serialized
|
|
148
|
+
* spelling of it.
|
|
148
149
|
*/
|
|
149
|
-
fetchKey?: (args: TArgs) =>
|
|
150
|
+
fetchKey?: (args: TArgs) => unknown;
|
|
150
151
|
/**
|
|
151
|
-
* The key of the data already committed, when the host keeps one —
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
152
|
+
* The key of the data already committed, when the host keeps one —
|
|
153
|
+
* `KeyedFetchMixin` stamps `loadedFetchKey`, which its `dataCurrent` reads
|
|
154
|
+
* too, so a second stamp would be one more thing to disagree with it.
|
|
155
|
+
* Omitted, the skeleton stamps its own at commit.
|
|
155
156
|
*
|
|
156
157
|
* **Either way the stamp is observable**, and the read is tracked. Zoom A→B
|
|
157
158
|
* issues a fetch for B; zoom back to A before B commits and the re-run
|
|
@@ -159,9 +160,23 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
|
|
|
159
160
|
* write is what wakes the autorun to fetch A again. A closure variable would
|
|
160
161
|
* leave data B under viewport A until the next input moved.
|
|
161
162
|
*/
|
|
162
|
-
|
|
163
|
+
loadedKey?: () => unknown;
|
|
164
|
+
/**
|
|
165
|
+
* The predicate form of the freshness gate, for a fetch whose "I have exactly
|
|
166
|
+
* this already" is not key equality: the density tier holds bins over a
|
|
167
|
+
* buffered read and answers a viewport those bins *contain*, which no key can
|
|
168
|
+
* spell. Same rules as `fetchKey` — declined runs report `declined`, and a
|
|
169
|
+
* `reloadCounter` advanced since the last issued fetch overrides it — so the
|
|
170
|
+
* comparison lives here and not in `prepare`, where a reload could not reach
|
|
171
|
+
* it. Runs inside the autorun, so what it reads is tracked: read the
|
|
172
|
+
* committed state off an observable, and the commit that changes the answer
|
|
173
|
+
* wakes the declined run.
|
|
174
|
+
*
|
|
175
|
+
* Either this or `fetchKey`, not both.
|
|
176
|
+
*/
|
|
177
|
+
heldAnswers?: (args: TArgs) => boolean;
|
|
163
178
|
/**
|
|
164
|
-
* Install the two
|
|
179
|
+
* Install the two display-contract checks under this name. Omitted
|
|
165
180
|
* by a **secondary** fetch on a host whose primary foundation already
|
|
166
181
|
* installed them: `assertDisplayContract` would report the second install as
|
|
167
182
|
* the double-attach it is built to catch, and a second retry check would
|
|
@@ -169,26 +184,51 @@ export interface InstallFetchOptions<TArgs, TResult> extends FetchPhases<TArgs,
|
|
|
169
184
|
*/
|
|
170
185
|
contract?: string;
|
|
171
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* The rotation half is either/or: `report` says where a rotation this installer
|
|
189
|
+
* creates for itself reports, and `rotation` lends the host's own instead — a
|
|
190
|
+
* display composing `FetchMixin` passes its `fetchRotation`, so `cancelFetch`
|
|
191
|
+
* and `cancelFetchByUser` reach the fetch this installs rather than a second
|
|
192
|
+
* rotation they cannot see. A lent rotation already carries its status window,
|
|
193
|
+
* so `report` would be dead beside it — the same either/or `StatusReporter`
|
|
194
|
+
* itself is a union for.
|
|
195
|
+
*/
|
|
196
|
+
export type InstallFetchOptions<TArgs, TResult> = InstallFetchOptionsBase<TArgs, TResult> & ({
|
|
197
|
+
/**
|
|
198
|
+
* Where this fetch's status lands. A display passes itself — its status
|
|
199
|
+
* fields are part of its own API, and one composing `FetchMixin` lends
|
|
200
|
+
* the model-wide window so this fetch takes a slot on the one field
|
|
201
|
+
* beside the display's other operations rather than opening a second
|
|
202
|
+
* writer over it. Anything with one operation to narrate passes a
|
|
203
|
+
* `createStatusChannel`.
|
|
204
|
+
*/
|
|
205
|
+
report: StatusReporter;
|
|
206
|
+
rotation?: never;
|
|
207
|
+
} | {
|
|
208
|
+
/** the host's own latest-wins rotation, lent whole — see above */
|
|
209
|
+
rotation: AbortRotation;
|
|
210
|
+
report?: never;
|
|
211
|
+
});
|
|
172
212
|
/**
|
|
173
213
|
* A whole fetch, installed: the rotation, the leading-edge autorun, the
|
|
174
214
|
* unconditional trigger reads, the gates, and {@link runFetchOnce} under them.
|
|
175
215
|
*
|
|
176
|
-
* Every fetch in the tree is this shape except one — the prerequisite
|
|
177
|
-
* (HiC's header, the multi-sample sample list),
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
* the
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
216
|
+
* Every fetch in the tree is this shape except one family — the prerequisite
|
|
217
|
+
* reads (HiC's header, the multi-sample sample list), the two keyed families
|
|
218
|
+
* (`installGlobalFetchAutorun` and `installComparativeFetchAutorun`, which lend
|
|
219
|
+
* `FetchMixin`'s rotation through the `rotation` option so `cancelFetch` and
|
|
220
|
+
* the Cancel button reach the fetch they install), the circular view's chord
|
|
221
|
+
* fetch, the breakpoint overlay fetch and the multi-way synteny display's two
|
|
222
|
+
* DEPENDENT fetches (lane genes, lane links, each gated on the key its own
|
|
223
|
+
* commit stamps) all take it. The
|
|
224
|
+
* exception is the per-region family's `FetchMixin.runFetch`: its trigger is
|
|
225
|
+
* `planRegionFetch`'s autorun and its commits stream per region through
|
|
226
|
+
* `ctx.commitRegion`, so it holds `runFetchOnce` directly and the autorun above
|
|
227
|
+
* it is that foundation's.
|
|
185
228
|
*
|
|
186
229
|
* What a caller supplies is exactly what differs between them: which reads wake
|
|
187
230
|
* it (`prepare`, plus `gate`), what a round trip commits, where the loading
|
|
188
231
|
* flag lives (`onBegin` / `onEnd`) and where the status goes (`report`).
|
|
189
|
-
*
|
|
190
|
-
* Returns the rotation's `cancel`, for a family whose model owns the user-facing
|
|
191
|
-
* Cancel button: the flag alone is not a cancel — nothing rotates the token, the
|
|
192
|
-
* stopped RPC stays current, and it commits over the load the user just stopped.
|
|
193
232
|
*/
|
|
194
|
-
export declare function installFetch<TArgs, TResult>(self: FetchSkeletonHost,
|
|
233
|
+
export declare function installFetch<TArgs, TResult>(self: FetchSkeletonHost, opts: InstallFetchOptions<TArgs, TResult>): void;
|
|
234
|
+
export {};
|
package/esm/util/installFetch.js
CHANGED
|
@@ -2,7 +2,7 @@ import { addDisposer, isAlive } from '@jbrowse/mobx-state-tree';
|
|
|
2
2
|
import { observable, runInAction, untracked } from 'mobx';
|
|
3
3
|
import { assertDisplayContract, makeRetryContractCheck, } from '../pluggableElementTypes/models/assertDisplayContract.js';
|
|
4
4
|
import { handleFetchError } from './aborting.js';
|
|
5
|
-
import {
|
|
5
|
+
import { createAbortRotation } from './createAbortRotation.js';
|
|
6
6
|
import { makeFetchContext } from './fetchContext.js';
|
|
7
7
|
import { isDataCurrent } from './isDataCurrent.js';
|
|
8
8
|
import { leadingEdgeAutorun } from './leadingEdgeAutorun.js';
|
|
@@ -18,7 +18,7 @@ import { leadingEdgeAutorun } from './leadingEdgeAutorun.js';
|
|
|
18
18
|
* the loading flag on an abort. The rules only pay for themselves by being the
|
|
19
19
|
* same everywhere, so they live here and the differences are parameters.
|
|
20
20
|
*
|
|
21
|
-
* `active` comes from a {@link
|
|
21
|
+
* `active` comes from a {@link createAbortRotation} `begin()` the caller
|
|
22
22
|
* already made, because who owns the rotation is one of the real differences: a
|
|
23
23
|
* display's *primary* fetch rotates through `FetchMixin`, so `cancelFetch` can
|
|
24
24
|
* reach it, while every other fetch's rotation lives in its installer's closure
|
|
@@ -30,13 +30,13 @@ import { leadingEdgeAutorun } from './leadingEdgeAutorun.js';
|
|
|
30
30
|
* flow, and so an action, which MobX runs untracked already.
|
|
31
31
|
*/
|
|
32
32
|
export async function runFetchOnce(self, active, args, { run, commit, setError, onBegin, onEnd, }) {
|
|
33
|
-
const {
|
|
33
|
+
const { signal, isCurrent, statusCallback, end } = active;
|
|
34
34
|
// synchronous, so it lands while this run is by construction the current one
|
|
35
35
|
setError(undefined);
|
|
36
|
-
onBegin?.(
|
|
36
|
+
onBegin?.(signal);
|
|
37
37
|
try {
|
|
38
38
|
const result = await run(args, makeFetchContext(self, {
|
|
39
|
-
|
|
39
|
+
signal,
|
|
40
40
|
isStale: () => !isCurrent(),
|
|
41
41
|
statusCallback,
|
|
42
42
|
}));
|
|
@@ -52,20 +52,18 @@ export async function runFetchOnce(self, active, args, { run, commit, setError,
|
|
|
52
52
|
finally {
|
|
53
53
|
// Both `onEnd` implementations are MST actions on `self`, and a display
|
|
54
54
|
// destroyed mid-fetch — a track closed, a display type switched out from
|
|
55
|
-
// under a load — still resumes here. `beforeDestroy` already
|
|
56
|
-
//
|
|
55
|
+
// under a load — still resumes here. `beforeDestroy` already aborted the
|
|
56
|
+
// signal, so the bookkeeping is moot on a dead node; calling the action
|
|
57
57
|
// anyway only warns.
|
|
58
58
|
if (isAlive(self)) {
|
|
59
59
|
onEnd?.(isCurrent());
|
|
60
60
|
}
|
|
61
|
-
// last, because it closes the guard `onEnd` reads
|
|
62
|
-
// because a superseded run's status slot goes on voting for a phase that
|
|
63
|
-
// is over until it is retired
|
|
61
|
+
// last, because it closes the guard `onEnd` reads
|
|
64
62
|
end();
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
65
|
/**
|
|
68
|
-
* The two
|
|
66
|
+
* The two contract checks every fetch installer owes, together because they are
|
|
69
67
|
* the same doctrine: one reports a foundation attached twice, the other reports
|
|
70
68
|
* a `reload()` the gate still declines — the dead Retry button.
|
|
71
69
|
*/
|
|
@@ -73,38 +71,63 @@ function installContractChecks(self, contract) {
|
|
|
73
71
|
assertDisplayContract(self, contract);
|
|
74
72
|
return makeRetryContractCheck(self);
|
|
75
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* The rotation for an installation that was lent none: created here, so
|
|
76
|
+
* disposed here — a lent one is the host's, and resetting its status window
|
|
77
|
+
* would drop a write the host's other operations are still owed.
|
|
78
|
+
*/
|
|
79
|
+
function ownRotation(self, report) {
|
|
80
|
+
const rotation = createAbortRotation(self, report);
|
|
81
|
+
addDisposer(self, () => {
|
|
82
|
+
rotation.dispose();
|
|
83
|
+
});
|
|
84
|
+
return rotation;
|
|
85
|
+
}
|
|
76
86
|
/**
|
|
77
87
|
* A whole fetch, installed: the rotation, the leading-edge autorun, the
|
|
78
88
|
* unconditional trigger reads, the gates, and {@link runFetchOnce} under them.
|
|
79
89
|
*
|
|
80
|
-
* Every fetch in the tree is this shape except one — the prerequisite
|
|
81
|
-
* (HiC's header, the multi-sample sample list),
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* the
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
90
|
+
* Every fetch in the tree is this shape except one family — the prerequisite
|
|
91
|
+
* reads (HiC's header, the multi-sample sample list), the two keyed families
|
|
92
|
+
* (`installGlobalFetchAutorun` and `installComparativeFetchAutorun`, which lend
|
|
93
|
+
* `FetchMixin`'s rotation through the `rotation` option so `cancelFetch` and
|
|
94
|
+
* the Cancel button reach the fetch they install), the circular view's chord
|
|
95
|
+
* fetch, the breakpoint overlay fetch and the multi-way synteny display's two
|
|
96
|
+
* DEPENDENT fetches (lane genes, lane links, each gated on the key its own
|
|
97
|
+
* commit stamps) all take it. The
|
|
98
|
+
* exception is the per-region family's `FetchMixin.runFetch`: its trigger is
|
|
99
|
+
* `planRegionFetch`'s autorun and its commits stream per region through
|
|
100
|
+
* `ctx.commitRegion`, so it holds `runFetchOnce` directly and the autorun above
|
|
101
|
+
* it is that foundation's.
|
|
89
102
|
*
|
|
90
103
|
* What a caller supplies is exactly what differs between them: which reads wake
|
|
91
104
|
* it (`prepare`, plus `gate`), what a round trip commits, where the loading
|
|
92
105
|
* flag lives (`onBegin` / `onEnd`) and where the status goes (`report`).
|
|
93
|
-
*
|
|
94
|
-
* Returns the rotation's `cancel`, for a family whose model owns the user-facing
|
|
95
|
-
* Cancel button: the flag alone is not a cancel — nothing rotates the token, the
|
|
96
|
-
* stopped RPC stays current, and it commits over the load the user just stopped.
|
|
97
106
|
*/
|
|
98
|
-
export function installFetch(self,
|
|
107
|
+
export function installFetch(self, opts) {
|
|
108
|
+
const { name, delay, gate, contract, fetchKey, loadedKey, heldAnswers, prepare, run, commit, setError, onBegin, onEnd, } = opts;
|
|
99
109
|
const noteFetchAutorunRun = contract === undefined ? undefined : installContractChecks(self, contract);
|
|
100
|
-
const
|
|
110
|
+
const lent = opts.rotation;
|
|
111
|
+
const rotation = lent === undefined ? ownRotation(self, opts.report) : lent;
|
|
101
112
|
// The `reloadCounter` this installation last issued a fetch at. Per
|
|
102
113
|
// installation and per instance, so a host with several fetches gives each its
|
|
103
114
|
// own — and a closure rather than model state, because nothing outside reads
|
|
104
115
|
// it and a volatile would be one more thing a host has to declare.
|
|
105
116
|
let issuedEpoch;
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
// The skeleton's own stamp exists only where there is a key to stamp — a
|
|
118
|
+
// fetch with no `fetchKey` never reads it, so allocating one would only feed
|
|
119
|
+
// it `undefined` on every commit. Shallow, because the deep enhancer would
|
|
120
|
+
// swap a stamped key object for an observable copy of it.
|
|
121
|
+
const stamp = loadedKey === undefined && fetchKey !== undefined
|
|
122
|
+
? observable.box(undefined, { deep: false })
|
|
123
|
+
: undefined;
|
|
124
|
+
const heldKey = loadedKey ?? (() => stamp?.get());
|
|
125
|
+
// the freshness gate in whichever form the caller declared it
|
|
126
|
+
const held = heldAnswers !== undefined
|
|
127
|
+
? heldAnswers
|
|
128
|
+
: fetchKey !== undefined
|
|
129
|
+
? (args) => isDataCurrent(heldKey(), fetchKey(args))
|
|
130
|
+
: undefined;
|
|
108
131
|
const commitAndStamp = stamp
|
|
109
132
|
? (result, args) => {
|
|
110
133
|
runInAction(() => {
|
|
@@ -113,9 +136,6 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
|
|
|
113
136
|
});
|
|
114
137
|
}
|
|
115
138
|
: commit;
|
|
116
|
-
addDisposer(self, () => {
|
|
117
|
-
rotation.dispose();
|
|
118
|
-
});
|
|
119
139
|
leadingEdgeAutorun(self,
|
|
120
140
|
// #region voidTracking
|
|
121
141
|
() => {
|
|
@@ -128,13 +148,23 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
|
|
|
128
148
|
// Cancel would be a one-way door with a Retry button on it. Order, not
|
|
129
149
|
// just position: counter first, then this, then the gates.
|
|
130
150
|
const canceled = self.fetchCanceled === true;
|
|
151
|
+
// Above the gate, not only above `prepare`: teardown mutates the
|
|
152
|
+
// observables this body reads before the disposers run, and every `gate`
|
|
153
|
+
// but the breakpoint view's reaches the containing view or track through a
|
|
154
|
+
// parent walk (`host.initialized`, `isMinimized`, `getContainingView`),
|
|
155
|
+
// which throws once the node has left the tree. This catches the destroyed
|
|
156
|
+
// node; the detached-and-still-alive window (ADR-069) is covered only by
|
|
157
|
+
// the walk's own cache. Nothing is reported for a dead node — there is no
|
|
158
|
+
// Retry button left to be dead, and the check would read three more
|
|
159
|
+
// members of a corpse to decide it.
|
|
160
|
+
if (!isAlive(self)) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
131
163
|
if (canceled || gate?.() === false) {
|
|
132
164
|
noteFetchAutorunRun?.('gated');
|
|
133
165
|
return false;
|
|
134
166
|
}
|
|
135
|
-
|
|
136
|
-
// and getContainingView on a detached node warns then throws.
|
|
137
|
-
const args = isAlive(self) ? prepare() : undefined;
|
|
167
|
+
const args = prepare();
|
|
138
168
|
if (args === undefined) {
|
|
139
169
|
noteFetchAutorunRun?.('declined');
|
|
140
170
|
return false;
|
|
@@ -145,9 +175,7 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
|
|
|
145
175
|
// consuming the retry here costs nothing — while a reload landing
|
|
146
176
|
// mid-flight is answered by the re-run the counter read above already
|
|
147
177
|
// guarantees.
|
|
148
|
-
if (
|
|
149
|
-
isDataCurrent(heldKey(), fetchKey(args)) &&
|
|
150
|
-
reloadEpoch === issuedEpoch) {
|
|
178
|
+
if (held !== undefined && held(args) && reloadEpoch === issuedEpoch) {
|
|
151
179
|
noteFetchAutorunRun?.('declined');
|
|
152
180
|
return false;
|
|
153
181
|
}
|
|
@@ -174,5 +202,4 @@ export function installFetch(self, { name, delay, report, gate, contract, fetchK
|
|
|
174
202
|
},
|
|
175
203
|
// #endregion
|
|
176
204
|
{ name, delay });
|
|
177
|
-
return rotation.cancel;
|
|
178
205
|
}
|