@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
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A density source's intervals over one region, the payload of the density
|
|
3
|
+
* tier that stands in for the features a gated fetch refused: features per bin
|
|
4
|
+
* for a `make-density` sidecar, whatever the bigWig measures otherwise, each
|
|
5
|
+
* value a level over its span so a zoomed read means the same thing. Absolute
|
|
6
|
+
* genomic coordinates.
|
|
7
|
+
*/
|
|
8
|
+
export interface FeatureDensity {
|
|
9
|
+
starts: Uint32Array;
|
|
10
|
+
ends: Uint32Array;
|
|
11
|
+
scores: Float32Array;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The slot a feature adapter spreads to take a density sidecar — a
|
|
15
|
+
* quantitative sub-adapter (typically a BigWig of feature starts per bin) the
|
|
16
|
+
* display reads at the view's bp/px in place of features the region-too-large
|
|
17
|
+
* gate refused. Mirrors MAF's `summaryAdapter`: on the adapter, so the tier
|
|
18
|
+
* names the file it summarizes.
|
|
19
|
+
*/
|
|
20
|
+
export declare const densityAdapterConfigSchemaFields: {
|
|
21
|
+
/**
|
|
22
|
+
* #slot
|
|
23
|
+
*/
|
|
24
|
+
readonly densityAdapter: {
|
|
25
|
+
readonly type: 'maybeFrozen';
|
|
26
|
+
readonly description: 'optional quantitative sub-adapter (e.g. a BigWigAdapter over a features-per-bin bigWig) drawn as a density band where the region is too large to fetch features; leave it unset to disable';
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Whether the `densityAdapter` slot holds something a sub-adapter can be built
|
|
31
|
+
* from. Beside the slot because both ends of the tier ask it and they have to
|
|
32
|
+
* agree: the display, deciding the band stands in, and `getFeatureDensity`,
|
|
33
|
+
* resolving the sidecar. They disagreed — the display took any object, the
|
|
34
|
+
* adapter wanted a type — so the shorthand every location slot accepts
|
|
35
|
+
* (`{ uri }`) turned the band on for a read that answered `undefined`, which
|
|
36
|
+
* commits nothing, and the phase then waited on bins no read would ever bring.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isSubAdapterConfig(value: unknown): value is Record<string, unknown> & {
|
|
39
|
+
type: string;
|
|
40
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The slot a feature adapter spreads to take a density sidecar — a
|
|
3
|
+
* quantitative sub-adapter (typically a BigWig of feature starts per bin) the
|
|
4
|
+
* display reads at the view's bp/px in place of features the region-too-large
|
|
5
|
+
* gate refused. Mirrors MAF's `summaryAdapter`: on the adapter, so the tier
|
|
6
|
+
* names the file it summarizes.
|
|
7
|
+
*/
|
|
8
|
+
export const densityAdapterConfigSchemaFields = {
|
|
9
|
+
/**
|
|
10
|
+
* #slot
|
|
11
|
+
*/
|
|
12
|
+
densityAdapter: {
|
|
13
|
+
type: 'maybeFrozen',
|
|
14
|
+
description: 'optional quantitative sub-adapter (e.g. a BigWigAdapter over a features-per-bin bigWig) drawn as a density band where the region is too large to fetch features; leave it unset to disable',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Whether the `densityAdapter` slot holds something a sub-adapter can be built
|
|
19
|
+
* from. Beside the slot because both ends of the tier ask it and they have to
|
|
20
|
+
* agree: the display, deciding the band stands in, and `getFeatureDensity`,
|
|
21
|
+
* resolving the sidecar. They disagreed — the display took any object, the
|
|
22
|
+
* adapter wanted a type — so the shorthand every location slot accepts
|
|
23
|
+
* (`{ uri }`) turned the band on for a read that answered `undefined`, which
|
|
24
|
+
* commits nothing, and the phase then waited on bins no read would ever bring.
|
|
25
|
+
*/
|
|
26
|
+
export function isSubAdapterConfig(value) {
|
|
27
|
+
return (typeof value === 'object' &&
|
|
28
|
+
value !== null &&
|
|
29
|
+
'type' in value &&
|
|
30
|
+
typeof value.type === 'string');
|
|
31
|
+
}
|
|
@@ -1,15 +1,35 @@
|
|
|
1
1
|
import type PluginManager from '../../PluginManager.ts';
|
|
2
|
-
import type {
|
|
2
|
+
import type { AnyConfigurationSchemaType } from '../../configuration/index.ts';
|
|
3
3
|
import type { getSubAdapterType } from '../dataAdapterCache.ts';
|
|
4
4
|
import type { AnyDataAdapter } from './util.ts';
|
|
5
|
+
import type { Instance } from '@jbrowse/mobx-state-tree';
|
|
5
6
|
export { type AnyDataAdapter, isFeatureAdapter, isRefNameAliasAdapter, isRegionsAdapter, isSequenceAdapter, isTextSearchAdapter, } from './util.ts';
|
|
6
|
-
export type { BaseOptions,
|
|
7
|
+
export type { BaseOptions, BaseTextSearchArgs, LodTier, SearchType, ZoomRange, } from './types.ts';
|
|
7
8
|
export { BaseAdapter } from './BaseAdapter.ts';
|
|
8
9
|
export { cachedSetup } from '../../util/cachedSetup.ts';
|
|
9
10
|
export { BaseFeatureDataAdapter } from './BaseFeatureDataAdapter.ts';
|
|
11
|
+
export { type FeatureDensity, densityAdapterConfigSchemaFields, isSubAdapterConfig, } from './featureDensity.ts';
|
|
10
12
|
export { BaseSequenceAdapter } from './BaseSequenceAdapter.ts';
|
|
11
13
|
export type { BaseTextSearchAdapter } from './BaseTextSearchAdapter.ts';
|
|
12
14
|
export type { Alias, BaseRefNameAliasAdapter, } from './BaseRefNameAliasAdapter.ts';
|
|
13
15
|
export type { RegionsAdapter } from './RegionsAdapter.ts';
|
|
14
16
|
export type { CytobandAdapter } from './CytobandAdapter.ts';
|
|
15
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The adapter class that goes with SCHEMA — the class whose `config` is that
|
|
19
|
+
* schema's node. `AdapterType` is generic over the schema so registering the
|
|
20
|
+
* two together checks that they are the same adapter's; the pairing is
|
|
21
|
+
* otherwise only a shared `type` string, and nothing reports a class reading
|
|
22
|
+
* slots its declared schema never had.
|
|
23
|
+
*
|
|
24
|
+
* see
|
|
25
|
+
* https://www.typescriptlang.org/docs/handbook/2/classes.html#abstract-construct-signatures
|
|
26
|
+
* for why this is the abstract construct signature
|
|
27
|
+
*/
|
|
28
|
+
export type AdapterClassFor<SCHEMA> = new (config: SCHEMA extends AnyConfigurationSchemaType ? Instance<SCHEMA> : any, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager, sequenceAdapterConfig?: Record<string, unknown>) => AnyDataAdapter;
|
|
29
|
+
/**
|
|
30
|
+
* An adapter class with its schema forgotten, which is what the registry holds
|
|
31
|
+
* and `dataAdapterCache` constructs: the config node it has in hand came from
|
|
32
|
+
* the `AdapterType` the same `type` name resolved to, and that lookup is the
|
|
33
|
+
* only thing tying the two together.
|
|
34
|
+
*/
|
|
35
|
+
export type AnyAdapter = AdapterClassFor<any>;
|
|
@@ -2,4 +2,5 @@ export { isFeatureAdapter, isRefNameAliasAdapter, isRegionsAdapter, isSequenceAd
|
|
|
2
2
|
export { BaseAdapter } from './BaseAdapter.js';
|
|
3
3
|
export { cachedSetup } from '../../util/cachedSetup.js';
|
|
4
4
|
export { BaseFeatureDataAdapter } from './BaseFeatureDataAdapter.js';
|
|
5
|
+
export { densityAdapterConfigSchemaFields, isSubAdapterConfig, } from './featureDensity.js';
|
|
5
6
|
export { BaseSequenceAdapter } from './BaseSequenceAdapter.js';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { BaseOptions } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* #api
|
|
4
|
+
* One row an adapter lists: `name` is a value of the listing's field, and
|
|
5
|
+
* `label` and `color` are what the adapter names and colours that row with.
|
|
6
|
+
*/
|
|
7
|
+
export interface ListedRowSource {
|
|
8
|
+
name: string;
|
|
9
|
+
label?: string;
|
|
10
|
+
color?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* #api
|
|
14
|
+
* Every row an adapter has, in its own order, whatever the loaded regions hold,
|
|
15
|
+
* so a row display gives a row with nothing in view its place, label and
|
|
16
|
+
* colour.
|
|
17
|
+
*/
|
|
18
|
+
export interface RowSourceListing {
|
|
19
|
+
/** The feature field the listed names are values of: `source` on a multi-BigWig, `alignments` on a MAF, whose per-species record is keyed by them. */
|
|
20
|
+
field: string;
|
|
21
|
+
sources: ListedRowSource[];
|
|
22
|
+
/** A guide tree over the names, as Newick, where the adapter ships one. */
|
|
23
|
+
tree?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* #api
|
|
27
|
+
* An adapter that lists its rows without reading a region: a multi-BigWig its
|
|
28
|
+
* files, a MAF its species.
|
|
29
|
+
*/
|
|
30
|
+
export interface RowSourceLister {
|
|
31
|
+
listRowSources(opts?: BaseOptions): Promise<RowSourceListing>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* #api
|
|
35
|
+
* Whether an adapter implements {@link RowSourceLister}.
|
|
36
|
+
*/
|
|
37
|
+
export declare function listsRowSources(adapter: object): adapter is RowSourceLister;
|
|
@@ -3,8 +3,40 @@ import type { RectifiedQuantitativeStats } from '../../util/stats.ts';
|
|
|
3
3
|
import type { AugmentedRegion as Region } from '../../util/types/index.ts';
|
|
4
4
|
import type { BaseOptions } from './types.ts';
|
|
5
5
|
import type { Observable } from 'rxjs';
|
|
6
|
+
/**
|
|
7
|
+
* What a caller that will *judge* the density knows and the probe does not: how
|
|
8
|
+
* wide a window has to be before its count can settle that judgement, and when
|
|
9
|
+
* a count has settled it. Supplying it turns the ladder below from "grow until
|
|
10
|
+
* the estimate is precise" into "grow until the verdict is decided", which at
|
|
11
|
+
* whole-genome zoom is one window instead of thirteen.
|
|
12
|
+
*
|
|
13
|
+
* The probe stays ignorant of what the budget means — `plugins/canvas`'s
|
|
14
|
+
* `densityProbeGate` owns both numbers, so the comparison that refuses a region
|
|
15
|
+
* lives beside the one the banner re-derives rather than in a second copy here.
|
|
16
|
+
*/
|
|
17
|
+
export interface DensityProbeGate {
|
|
18
|
+
/** First window to sample: the narrowest one whose count can settle it. */
|
|
19
|
+
initialInterval: number;
|
|
20
|
+
/** Whether this many admitted features in this many bp decides the verdict. */
|
|
21
|
+
settled: (admitted: number, sampledBp: number) => boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The adapter options a probe forwards, plus the two things only its caller
|
|
25
|
+
* knows. Named rather than trailing positionals: `BaseOptions` has no required
|
|
26
|
+
* member, so every one of its slots structurally accepts anything, and an
|
|
27
|
+
* `admit` handed to the `opts` slot typechecks and then never filters.
|
|
28
|
+
*/
|
|
29
|
+
export interface DensityProbeOptions extends BaseOptions {
|
|
30
|
+
/**
|
|
31
|
+
* The caller's feature-admission predicate (config filters, type gates, ...).
|
|
32
|
+
* See the note on the growth/report asymmetry below.
|
|
33
|
+
*/
|
|
34
|
+
admit?: (feature: Feature) => boolean;
|
|
35
|
+
/** Stop as soon as the verdict is decided rather than when it is precise. */
|
|
36
|
+
gate?: DensityProbeGate;
|
|
37
|
+
}
|
|
6
38
|
export declare function aggregateQuantitativeStats(stats: RectifiedQuantitativeStats[]): RectifiedQuantitativeStats;
|
|
7
|
-
export declare function calculateFeatureDensityStats(region: Region, getFeatures: (region: Region, opts?: BaseOptions) => Observable<Feature>,
|
|
39
|
+
export declare function calculateFeatureDensityStats(region: Region, getFeatures: (region: Region, opts?: BaseOptions) => Observable<Feature>, { admit, gate, ...opts }?: DensityProbeOptions): Promise<{
|
|
8
40
|
featureDensity: number;
|
|
9
41
|
}>;
|
|
10
42
|
export { blankStats } from '../../util/stats.ts';
|
|
@@ -19,13 +19,16 @@ export function aggregateQuantitativeStats(stats) {
|
|
|
19
19
|
...(meanMaxs.length > 0 ? { scoreMeanMax: max(meanMaxs) } : {}),
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
-
//
|
|
23
|
-
// avoids the region edges where coverage often tapers.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
// Where the probe samples, as a fraction into the region. The primary point
|
|
23
|
+
// avoids the region edges, where coverage often tapers.
|
|
24
|
+
const DENSITY_SAMPLE_POINT = 0.25;
|
|
25
|
+
const DENSITY_CONFIRM_POINT = 0.7;
|
|
26
|
+
// A sample window of `interval` bp centered `at` into the region. Clamped to the
|
|
27
|
+
// region bounds so it never samples features outside the region being measured
|
|
28
|
+
// (the left edge clamps to the region start, not to the chromosome origin).
|
|
29
|
+
function sampleWindow(region, interval, at) {
|
|
27
30
|
const { start, end } = region;
|
|
28
|
-
const sampleCenter = start
|
|
31
|
+
const sampleCenter = start + (end - start) * at;
|
|
29
32
|
return {
|
|
30
33
|
start: Math.max(start, Math.round(sampleCenter - interval / 2)),
|
|
31
34
|
end: Math.min(end, Math.round(sampleCenter + interval / 2)),
|
|
@@ -49,20 +52,56 @@ function sampleWindow(region, interval) {
|
|
|
49
52
|
// count would make a selective filter double the window over and over until it
|
|
50
53
|
// spanned the whole region — turning the cheap pre-fetch probe into a second
|
|
51
54
|
// full download for exactly the views that need it most.
|
|
52
|
-
export async function calculateFeatureDensityStats(region, getFeatures,
|
|
55
|
+
export async function calculateFeatureDensityStats(region, getFeatures, { admit, gate, ...opts } = {}) {
|
|
53
56
|
const refLen = region.end - region.start;
|
|
54
57
|
const t0 = performance.now();
|
|
55
|
-
let interval = DENSITY_SAMPLE_INITIAL_INTERVAL;
|
|
58
|
+
let interval = Math.max(DENSITY_SAMPLE_INITIAL_INTERVAL, gate?.initialInterval ?? 0);
|
|
59
|
+
const sampleAt = async (at) => {
|
|
60
|
+
const { start, end } = sampleWindow(region, interval, at);
|
|
61
|
+
const features = await firstValueFrom(getFeatures({ ...region, start, end }, opts).pipe(toArray()));
|
|
62
|
+
return {
|
|
63
|
+
sampledBp: end - start,
|
|
64
|
+
raw: features.length,
|
|
65
|
+
admitted: admit ? features.filter(admit).length : features.length,
|
|
66
|
+
};
|
|
67
|
+
};
|
|
56
68
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
57
69
|
while (true) {
|
|
58
|
-
const {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
const { sampledBp, raw, admitted } = await sampleAt(DENSITY_SAMPLE_POINT);
|
|
71
|
+
// The verdict is already decided by a margin, so a precise density would
|
|
72
|
+
// only make it more decided. Tested on the admitted count, which is the
|
|
73
|
+
// population the caller judges — the raw count below governs window growth
|
|
74
|
+
// for the reason in the note above, and the two must not be swapped.
|
|
75
|
+
//
|
|
76
|
+
// A second point has to agree before the probe answers a verdict the old
|
|
77
|
+
// ladder could not have reached — and `raw` is exactly what separates the
|
|
78
|
+
// two. A window already holding DENSITY_SAMPLE_MIN_FEATURES is one the exit
|
|
79
|
+
// below would have answered from anyway, so there is nothing new to confirm
|
|
80
|
+
// and this falls through to it for the same number. Under that count the
|
|
81
|
+
// ladder would have kept widening, diluting a local cluster, and answering
|
|
82
|
+
// here instead is what lets a sparse track with a cluster at the fixed
|
|
83
|
+
// sample point read as dense and banner at that zoom until the user
|
|
84
|
+
// force-loads.
|
|
85
|
+
//
|
|
86
|
+
// So the confirmation is owed only by the case that is new, which is also
|
|
87
|
+
// the case that is cheap: every dense annotation track measured clears
|
|
88
|
+
// DENSITY_SAMPLE_MIN_FEATURES in its first window and pays nothing. A
|
|
89
|
+
// disagreement is not a verdict — the ladder simply carries on.
|
|
90
|
+
if (gate?.settled(admitted, sampledBp) &&
|
|
91
|
+
raw < DENSITY_SAMPLE_MIN_FEATURES) {
|
|
92
|
+
const other = await sampleAt(DENSITY_CONFIRM_POINT);
|
|
93
|
+
if (gate.settled(other.admitted, other.sampledBp)) {
|
|
94
|
+
// the lower of two agreeing readings, so the count the banner quotes is
|
|
95
|
+
// never the high one of a pair
|
|
96
|
+
return {
|
|
97
|
+
featureDensity: Math.min(admitted / sampledBp, other.admitted / other.sampledBp),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
62
101
|
// Enough features to be meaningful, or the window already spans the whole
|
|
63
102
|
// region (growing further can't sample more) — report density over the bp
|
|
64
103
|
// actually sampled, not the nominal interval.
|
|
65
|
-
if (
|
|
104
|
+
if (raw >= DENSITY_SAMPLE_MIN_FEATURES || sampledBp >= refLen) {
|
|
66
105
|
return { featureDensity: admitted / sampledBp };
|
|
67
106
|
}
|
|
68
107
|
// Sparse region or slow adapter: sampling ran past the time budget without
|
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
import type { StatusCallback } from '../../util/progress.ts';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export type { ZoomRange } from './zoomRange.ts';
|
|
3
|
+
export type LodTier = 'fine' | 'coarse';
|
|
4
4
|
export interface BaseOptions {
|
|
5
|
-
|
|
5
|
+
signal?: AbortSignal;
|
|
6
6
|
bpPerPx?: number;
|
|
7
7
|
sessionId?: string;
|
|
8
|
-
trackInstanceId?: string;
|
|
9
|
-
signal?: AbortSignal;
|
|
10
8
|
statusCallback?: StatusCallback;
|
|
9
|
+
notices?: string[];
|
|
11
10
|
headers?: Record<string, string>;
|
|
12
|
-
statsEstimationMode?: boolean;
|
|
13
11
|
assemblyName?: string;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export interface BaseOptionsWithRegions extends BaseOptions {
|
|
18
|
-
regions?: Region[];
|
|
12
|
+
lodMode?: LodTier;
|
|
13
|
+
haplotypes?: string[];
|
|
14
|
+
topLevelOnly?: boolean;
|
|
19
15
|
}
|
|
20
16
|
export type SearchType = 'full' | 'prefix' | 'exact';
|
|
21
17
|
export interface BaseTextSearchArgs {
|
|
22
18
|
queryString: string;
|
|
23
19
|
searchType?: SearchType;
|
|
24
|
-
|
|
20
|
+
signal?: AbortSignal;
|
|
25
21
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #api
|
|
3
|
+
* The bp/px interval, `[minBpPerPx, maxBpPerPx)`, over which an adapter with
|
|
4
|
+
* zoom levels answers a fetch from the same level it answered `opts.bpPerPx`
|
|
5
|
+
* from. A display holding the answer refetches when the view leaves it.
|
|
6
|
+
*/
|
|
7
|
+
export interface ZoomRange {
|
|
8
|
+
minBpPerPx: number;
|
|
9
|
+
maxBpPerPx: number;
|
|
10
|
+
}
|
|
@@ -4,7 +4,7 @@ import { BaseAdapter } from '../BaseAdapter/index.js';
|
|
|
4
4
|
export default class CytobandAdapter extends BaseAdapter {
|
|
5
5
|
async getData(opts) {
|
|
6
6
|
const conf = this.getConf('cytobandLocation');
|
|
7
|
-
if (conf
|
|
7
|
+
if (!conf) {
|
|
8
8
|
return [];
|
|
9
9
|
}
|
|
10
10
|
const text = await fetchAndMaybeUnzipText(openLocation(conf, this.pluginManager), opts, 'Downloading cytobands');
|
|
@@ -25,17 +25,13 @@
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
declare const configSchema: import("../../configuration/configurationSchema.ts").ConfigurationSchemaType<{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*/
|
|
28
|
+
type: {
|
|
29
|
+
type: "string";
|
|
30
|
+
} & {
|
|
31
|
+
defaultValue: string;
|
|
32
|
+
};
|
|
34
33
|
readonly cytobandLocation: {
|
|
35
|
-
|
|
36
|
-
readonly defaultValue: {
|
|
37
|
-
readonly uri: "/path/to/cytoband.txt.gz";
|
|
38
|
-
};
|
|
34
|
+
type: "maybeFileLocation";
|
|
39
35
|
};
|
|
40
|
-
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined>>;
|
|
36
|
+
}, import("../../configuration/configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, true, import("../../configuration/requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>;
|
|
41
37
|
export default configSchema;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConfigurationSchema } from '../../configuration/index.js';
|
|
1
|
+
import { ConfigurationSchema, expandUriShorthand, } from '../../configuration/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* #config CytobandAdapter
|
|
4
4
|
*
|
|
@@ -33,10 +33,7 @@ const configSchema = ConfigurationSchema('CytobandAdapter', {
|
|
|
33
33
|
* May be gzipped. Configured on an assembly, not on a track.
|
|
34
34
|
*/
|
|
35
35
|
cytobandLocation: {
|
|
36
|
-
type: '
|
|
37
|
-
defaultValue: {
|
|
38
|
-
uri: '/path/to/cytoband.txt.gz',
|
|
39
|
-
},
|
|
36
|
+
type: 'maybeFileLocation',
|
|
40
37
|
},
|
|
41
38
|
}, {
|
|
42
39
|
explicitlyTyped: true,
|
|
@@ -52,17 +49,6 @@ const configSchema = ConfigurationSchema('CytobandAdapter', {
|
|
|
52
49
|
* }
|
|
53
50
|
* ```
|
|
54
51
|
*/
|
|
55
|
-
preProcessSnapshot: snap =>
|
|
56
|
-
// populate from just snap.uri
|
|
57
|
-
return snap.uri
|
|
58
|
-
? {
|
|
59
|
-
...snap,
|
|
60
|
-
cytobandLocation: {
|
|
61
|
-
uri: snap.uri,
|
|
62
|
-
baseUri: snap.baseUri,
|
|
63
|
-
},
|
|
64
|
-
}
|
|
65
|
-
: snap;
|
|
66
|
-
},
|
|
52
|
+
preProcessSnapshot: snap => expandUriShorthand(snap, 'cytobandLocation'),
|
|
67
53
|
});
|
|
68
54
|
export default configSchema;
|
|
@@ -4,12 +4,29 @@ import type { AnyDataAdapter } from './BaseAdapter/index.ts';
|
|
|
4
4
|
import type { SnapshotIn } from '@jbrowse/mobx-state-tree';
|
|
5
5
|
type ConfigSnap = SnapshotIn<AnyConfigurationSchemaType>;
|
|
6
6
|
export declare function adapterConfigCacheKey(conf?: Record<string, unknown>): string;
|
|
7
|
+
/**
|
|
8
|
+
* #api
|
|
9
|
+
* The `adapterCapabilities` entry of an adapter that reads the reference
|
|
10
|
+
* sequence of the assembly it is displayed against: BAM and SAM for mismatches
|
|
11
|
+
* without an MD tag, CRAM to rebuild bases, GC content and the reference scans
|
|
12
|
+
* for everything they answer. Such an adapter is built with that reference and
|
|
13
|
+
* keyed on it as well as on its config, so one config shown on two genomes is
|
|
14
|
+
* two instances, each reading its own, and an instance never changes reference
|
|
15
|
+
* for its life. Every other adapter keys on its config alone: a synteny adapter
|
|
16
|
+
* is fetched from each of its assemblies and reads no reference.
|
|
17
|
+
*/
|
|
18
|
+
export declare const READS_REFERENCE = "readsReference";
|
|
7
19
|
interface AdapterCacheEntry {
|
|
8
20
|
dataAdapter: AnyDataAdapter;
|
|
9
21
|
sessionIds: Set<string>;
|
|
10
22
|
}
|
|
11
|
-
/**
|
|
12
|
-
|
|
23
|
+
/**
|
|
24
|
+
* instantiate a data adapter, or return a cached one with the same config.
|
|
25
|
+
* `sequenceAdapter` is the reference of the genome the request names; a
|
|
26
|
+
* {@link READS_REFERENCE} type is keyed on it and built with it, any other
|
|
27
|
+
* type ignores it
|
|
28
|
+
*/
|
|
29
|
+
export declare function getAdapter(pluginManager: PluginManager, sessionId: string, adapterConfigSnapshot: SnapshotIn<AnyConfigurationSchemaType>, sequenceAdapter?: Record<string, unknown>): Promise<AdapterCacheEntry>;
|
|
13
30
|
/**
|
|
14
31
|
* this is a callback that is passed to adapters that allows them to get any
|
|
15
32
|
* sub-adapters that they need internally, staying with the same worker session
|
|
@@ -3,6 +3,25 @@ export function adapterConfigCacheKey(conf = {}) {
|
|
|
3
3
|
const { adapterId } = conf;
|
|
4
4
|
return typeof adapterId === 'string' && adapterId ? adapterId : idMaker(conf);
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* #api
|
|
8
|
+
* The `adapterCapabilities` entry of an adapter that reads the reference
|
|
9
|
+
* sequence of the assembly it is displayed against: BAM and SAM for mismatches
|
|
10
|
+
* without an MD tag, CRAM to rebuild bases, GC content and the reference scans
|
|
11
|
+
* for everything they answer. Such an adapter is built with that reference and
|
|
12
|
+
* keyed on it as well as on its config, so one config shown on two genomes is
|
|
13
|
+
* two instances, each reading its own, and an instance never changes reference
|
|
14
|
+
* for its life. Every other adapter keys on its config alone: a synteny adapter
|
|
15
|
+
* is fetched from each of its assemblies and reads no reference.
|
|
16
|
+
*/
|
|
17
|
+
export const READS_REFERENCE = 'readsReference';
|
|
18
|
+
function readsReference(pluginManager, adapterConfig) {
|
|
19
|
+
const type = adapterConfig?.type;
|
|
20
|
+
return (typeof type === 'string' &&
|
|
21
|
+
pluginManager
|
|
22
|
+
.getAdapterType(type)
|
|
23
|
+
.adapterCapabilities.includes(READS_REFERENCE));
|
|
24
|
+
}
|
|
6
25
|
// Pruned by storeWithEvict (rejections) and by freeAdapterResources, which the
|
|
7
26
|
// CoreFreeResources RPC reaches when the last track holding an adapter config is
|
|
8
27
|
// closed (releaseAdapterSession). There is still no size bound: an adapter
|
|
@@ -16,7 +35,7 @@ function storeWithEvict(key, p) {
|
|
|
16
35
|
adapterCache[key] = p;
|
|
17
36
|
return p;
|
|
18
37
|
}
|
|
19
|
-
async function getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot) {
|
|
38
|
+
async function getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot, keyedSequence) {
|
|
20
39
|
const adapterType = adapterConfigSnapshot?.type;
|
|
21
40
|
if (!adapterType) {
|
|
22
41
|
throw new Error(`could not determine adapter type from adapter config snapshot ${JSON.stringify(adapterConfigSnapshot)}`);
|
|
@@ -25,23 +44,38 @@ async function getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot) {
|
|
|
25
44
|
// instantiate the data adapter's config schema so it gets its defaults,
|
|
26
45
|
// callbacks, etc
|
|
27
46
|
const adapterConfig = dataAdapterType.configSchema.create(adapterConfigSnapshot, { pluginManager });
|
|
28
|
-
|
|
47
|
+
// a sub-adapter reads the reference its parent was built with
|
|
48
|
+
const getSubAdapter = conf => getAdapter(pluginManager, sessionId, conf, keyedSequence);
|
|
29
49
|
const CLASS = await dataAdapterType.getAdapterClass();
|
|
30
|
-
const dataAdapter = new CLASS(adapterConfig, getSubAdapter, pluginManager);
|
|
50
|
+
const dataAdapter = new CLASS(adapterConfig, getSubAdapter, pluginManager, keyedSequence);
|
|
31
51
|
return {
|
|
32
52
|
dataAdapter,
|
|
33
53
|
sessionIds: new Set([sessionId]),
|
|
34
54
|
};
|
|
35
55
|
}
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
|
|
56
|
+
/**
|
|
57
|
+
* look up the cached entry for a config, creating and storing it if absent.
|
|
58
|
+
* Keyed synchronously, so concurrent callers share one pending entry
|
|
59
|
+
*/
|
|
60
|
+
function getOrCreateEntry(pluginManager, sessionId, adapterConfigSnapshot, sequenceAdapter) {
|
|
61
|
+
const keyedSequence = sequenceAdapter && readsReference(pluginManager, adapterConfigSnapshot)
|
|
62
|
+
? sequenceAdapter
|
|
63
|
+
: undefined;
|
|
64
|
+
const configKey = adapterConfigCacheKey(adapterConfigSnapshot);
|
|
65
|
+
const cacheKey = keyedSequence
|
|
66
|
+
? `${configKey}|${adapterConfigCacheKey(keyedSequence)}`
|
|
67
|
+
: configKey;
|
|
39
68
|
return (adapterCache[cacheKey] ??
|
|
40
|
-
storeWithEvict(cacheKey, getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot)));
|
|
69
|
+
storeWithEvict(cacheKey, getAdapterPre(pluginManager, sessionId, adapterConfigSnapshot, keyedSequence)));
|
|
41
70
|
}
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
|
|
71
|
+
/**
|
|
72
|
+
* instantiate a data adapter, or return a cached one with the same config.
|
|
73
|
+
* `sequenceAdapter` is the reference of the genome the request names; a
|
|
74
|
+
* {@link READS_REFERENCE} type is keyed on it and built with it, any other
|
|
75
|
+
* type ignores it
|
|
76
|
+
*/
|
|
77
|
+
export async function getAdapter(pluginManager, sessionId, adapterConfigSnapshot, sequenceAdapter) {
|
|
78
|
+
const ret = await getOrCreateEntry(pluginManager, sessionId, adapterConfigSnapshot, sequenceAdapter);
|
|
45
79
|
ret.sessionIds.add(sessionId);
|
|
46
80
|
return ret;
|
|
47
81
|
}
|
|
@@ -7,10 +7,12 @@ export interface GetFeatureAdapterArgs {
|
|
|
7
7
|
sequenceAdapter?: Record<string, unknown>;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Resolve a feature data adapter
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* Resolve a feature data adapter — the single resolution path for every RPC
|
|
11
|
+
* that reads features. An RPC passes its whole args (`{ ...args, pluginManager
|
|
12
|
+
* }`) so the `sequenceAdapter` serialization attached reaches the cache without
|
|
13
|
+
* being named, and a reference-reading type comes back built for that genome.
|
|
14
|
+
* Returns undefined when the config resolves to a non-feature adapter, so
|
|
15
|
+
* callers that can degrade (e.g. getRefNames → []) decide how; use
|
|
14
16
|
* {@link getFeatureAdapterOrThrow} when a feature adapter is required.
|
|
15
17
|
*/
|
|
16
18
|
export declare function getFeatureAdapter({ pluginManager, sessionId, adapterConfig, sequenceAdapter, }: GetFeatureAdapterArgs): Promise<BaseFeatureDataAdapter | undefined>;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { isFeatureAdapter } from './BaseAdapter/index.js';
|
|
2
2
|
import { getAdapter } from './dataAdapterCache.js';
|
|
3
3
|
/**
|
|
4
|
-
* Resolve a feature data adapter
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Resolve a feature data adapter — the single resolution path for every RPC
|
|
5
|
+
* that reads features. An RPC passes its whole args (`{ ...args, pluginManager
|
|
6
|
+
* }`) so the `sequenceAdapter` serialization attached reaches the cache without
|
|
7
|
+
* being named, and a reference-reading type comes back built for that genome.
|
|
8
|
+
* Returns undefined when the config resolves to a non-feature adapter, so
|
|
9
|
+
* callers that can degrade (e.g. getRefNames → []) decide how; use
|
|
8
10
|
* {@link getFeatureAdapterOrThrow} when a feature adapter is required.
|
|
9
11
|
*/
|
|
10
12
|
export async function getFeatureAdapter({ pluginManager, sessionId, adapterConfig, sequenceAdapter, }) {
|
|
11
|
-
const { dataAdapter } = await getAdapter(pluginManager, sessionId, adapterConfig);
|
|
12
|
-
|
|
13
|
-
featureAdapter?.setSequenceAdapterConfig(sequenceAdapter);
|
|
14
|
-
return featureAdapter;
|
|
13
|
+
const { dataAdapter } = await getAdapter(pluginManager, sessionId, adapterConfig, sequenceAdapter);
|
|
14
|
+
return isFeatureAdapter(dataAdapter) ? dataAdapter : undefined;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* {@link getFeatureAdapter} for the common case where the RPC cannot proceed
|
|
@@ -3,17 +3,15 @@ import type { BaseAdapter, BaseSequenceAdapter } from './BaseAdapter/index.ts';
|
|
|
3
3
|
* Resolves the reference sequence an adapter reads from.
|
|
4
4
|
*
|
|
5
5
|
* **The assembly is the source, and a hand-written `sequenceAdapter` slot is an
|
|
6
|
-
* anti-pattern.**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* anti-pattern.** A reference-reading adapter is built with the sequence of the
|
|
7
|
+
* assembly the request that created it named (dataAdapterCache), so no config
|
|
8
|
+
* has to copy a sequence adapter into a track. The slot survives as an escape
|
|
9
|
+
* hatch for reading some *other* sequence, and setting it pins the track to
|
|
10
|
+
* that source even when the assembly's own sequence changes — so it wins only
|
|
11
|
+
* when explicitly present, and `jbrowse validate` warns about it.
|
|
12
12
|
*
|
|
13
13
|
* In core rather than beside one of its callers because the field it reads is
|
|
14
|
-
* `BaseAdapter`'s.
|
|
15
|
-
* `@jbrowse/core/*` re-export, and a name published there is load-bearing ABI —
|
|
16
|
-
* `abi.test.ts`/`abiBaseline.json` fails a removal from it.
|
|
14
|
+
* `BaseAdapter`'s.
|
|
17
15
|
*
|
|
18
16
|
* `configured` is passed in rather than read here so each adapter reads its own
|
|
19
17
|
* slot through its own config type.
|