@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1476 -265
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -3
- 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 +16 -9
- 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 +50 -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/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 +2 -2
- 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 +528 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +488 -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 +527 -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 +24 -11
- package/esm/configuration/index.js +15 -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/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 +46 -16
- package/esm/pluggableElementTypes/DisplayType.js +22 -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/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 +1 -1
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +65 -27
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +72 -10
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +85 -16
- package/esm/pluggableElementTypes/models/BaseViewModel.js +53 -10
- 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 -49
- 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/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/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 +1 -1
- package/esm/util/cachedSetup.js +2 -2
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -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/{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 +80 -0
- package/esm/util/featureTransforms.js +1579 -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/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/groupKeys.d.ts +77 -0
- package/esm/util/groupKeys.js +155 -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/io/index.js +19 -14
- 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 +20 -27
- package/esm/util/jexlFilters.js +23 -11
- 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/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +845 -0
- package/esm/util/markEncodingTypes.d.ts +588 -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/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +82 -0
- package/esm/util/stepTables.js +243 -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 +13 -8
- package/esm/util/tabix.js +17 -12
- 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 +121 -40
- package/esm/util/tracks.js +497 -112
- 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 +51 -0
- package/esm/util/unknownSnapshotKeys.js +82 -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/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- 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/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +70 -20
- 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
|
@@ -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.
|
|
@@ -2,17 +2,15 @@
|
|
|
2
2
|
* Resolves the reference sequence an adapter reads from.
|
|
3
3
|
*
|
|
4
4
|
* **The assembly is the source, and a hand-written `sequenceAdapter` slot is an
|
|
5
|
-
* anti-pattern.**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* anti-pattern.** A reference-reading adapter is built with the sequence of the
|
|
6
|
+
* assembly the request that created it named (dataAdapterCache), so no config
|
|
7
|
+
* has to copy a sequence adapter into a track. The slot survives as an escape
|
|
8
|
+
* hatch for reading some *other* sequence, and setting it pins the track to
|
|
9
|
+
* that source even when the assembly's own sequence changes — so it wins only
|
|
10
|
+
* when explicitly present, and `jbrowse validate` warns about it.
|
|
11
11
|
*
|
|
12
12
|
* In core rather than beside one of its callers because the field it reads is
|
|
13
|
-
* `BaseAdapter`'s.
|
|
14
|
-
* `@jbrowse/core/*` re-export, and a name published there is load-bearing ABI —
|
|
15
|
-
* `abi.test.ts`/`abiBaseline.json` fails a removal from it.
|
|
13
|
+
* `BaseAdapter`'s.
|
|
16
14
|
*
|
|
17
15
|
* `configured` is passed in rather than read here so each adapter reads its own
|
|
18
16
|
* slot through its own config type.
|
|
@@ -20,7 +18,7 @@
|
|
|
20
18
|
export async function getSequenceSubAdapter(adapter, configured) {
|
|
21
19
|
const config = configured ?? adapter.sequenceAdapterConfig;
|
|
22
20
|
if (!config) {
|
|
23
|
-
throw new Error(
|
|
21
|
+
throw new Error(`${adapter.config.type} was built with no reference: the request that created it named no assembly, and no \`sequenceAdapter\` slot is set`);
|
|
24
22
|
}
|
|
25
23
|
const result = await adapter.getSubAdapter?.(config);
|
|
26
24
|
if (!result) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import PluggableElementBase from './PluggableElementBase.ts';
|
|
2
2
|
import type { AnyConfigurationSchemaType } from '../configuration/index.ts';
|
|
3
|
-
import type {
|
|
3
|
+
import type { AdapterClassFor } from '../data_adapters/BaseAdapter/index.ts';
|
|
4
4
|
export interface AdapterMetadata {
|
|
5
5
|
category?: string;
|
|
6
6
|
hiddenFromGUI?: boolean;
|
|
@@ -25,9 +25,9 @@ export interface AdapterMetadata {
|
|
|
25
25
|
}
|
|
26
26
|
/** Expand a raw adapter config snapshot (plain JSON) to its canonical form. */
|
|
27
27
|
export type NormalizeSnapshot = (snap: Record<string, unknown>) => Record<string, unknown>;
|
|
28
|
-
export default class AdapterType extends PluggableElementBase {
|
|
29
|
-
getAdapterClass: () => Promise<
|
|
30
|
-
configSchema:
|
|
28
|
+
export default class AdapterType<SCHEMA extends AnyConfigurationSchemaType = any> extends PluggableElementBase {
|
|
29
|
+
getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
|
|
30
|
+
configSchema: SCHEMA;
|
|
31
31
|
adapterCapabilities: string[];
|
|
32
32
|
adapterMetadata?: AdapterMetadata;
|
|
33
33
|
private declaredNormalizeSnapshot?;
|
|
@@ -42,7 +42,7 @@ export default class AdapterType extends PluggableElementBase {
|
|
|
42
42
|
* declaring the shorthand once gets both. It used to be a second, separate
|
|
43
43
|
* registration, and five in-tree adapters had only the schema half
|
|
44
44
|
* (`MafTabixAdapter`, `BgzipMafAdapter`, `BgzipTaffyAdapter`,
|
|
45
|
-
* `
|
|
45
|
+
* `MultiGenomePAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
|
|
46
46
|
* because loading such a config from a URL goes through the schema. Only
|
|
47
47
|
* `normalizeAdapterSnapshots` consults *this*, so what broke was `localFiles`
|
|
48
48
|
* in the embedded products: the shorthand stayed unexpanded, `uri` never
|
|
@@ -61,15 +61,15 @@ export default class AdapterType extends PluggableElementBase {
|
|
|
61
61
|
locationKey?: string;
|
|
62
62
|
constructor(stuff: {
|
|
63
63
|
name: string;
|
|
64
|
-
configSchema:
|
|
64
|
+
configSchema: SCHEMA;
|
|
65
65
|
displayName?: string;
|
|
66
66
|
adapterCapabilities?: string[];
|
|
67
67
|
adapterMetadata?: AdapterMetadata;
|
|
68
68
|
normalizeSnapshot?: NormalizeSnapshot;
|
|
69
69
|
locationKey?: string;
|
|
70
70
|
} & ({
|
|
71
|
-
getAdapterClass: () => Promise<
|
|
71
|
+
getAdapterClass: () => Promise<AdapterClassFor<SCHEMA>>;
|
|
72
72
|
} | {
|
|
73
|
-
AdapterClass:
|
|
73
|
+
AdapterClass: AdapterClassFor<SCHEMA>;
|
|
74
74
|
}));
|
|
75
75
|
}
|
|
@@ -17,7 +17,7 @@ export default class AdapterType extends PluggableElementBase {
|
|
|
17
17
|
* declaring the shorthand once gets both. It used to be a second, separate
|
|
18
18
|
* registration, and five in-tree adapters had only the schema half
|
|
19
19
|
* (`MafTabixAdapter`, `BgzipMafAdapter`, `BgzipTaffyAdapter`,
|
|
20
|
-
* `
|
|
20
|
+
* `MultiGenomePAFAdapter`, `MCScanBlocksAdapter`) — which reads as working,
|
|
21
21
|
* because loading such a config from a URL goes through the schema. Only
|
|
22
22
|
* `normalizeAdapterSnapshots` consults *this*, so what broke was `localFiles`
|
|
23
23
|
* in the embedded products: the shorthand stayed unexpanded, `uri` never
|
|
@@ -1,19 +1,42 @@
|
|
|
1
|
-
import
|
|
1
|
+
import LazyStateModelElement from './LazyStateModelElement.ts';
|
|
2
2
|
import type { AnyConfigurationSchemaType } from '../configuration/index.ts';
|
|
3
3
|
import type { AnyReactComponentType } from '../util/index.ts';
|
|
4
4
|
import type { IAnyModelType } from '@jbrowse/mobx-state-tree';
|
|
5
|
-
export
|
|
6
|
-
|
|
5
|
+
export type DisplayEntry = Record<string, unknown>;
|
|
6
|
+
/**
|
|
7
|
+
* A display type retired into this one. Configs and sessions naming it load
|
|
8
|
+
* as this display, the entry rewritten by `migrate` first: the settings the
|
|
9
|
+
* old type's picture needs, and its own spelling of any slot value, which
|
|
10
|
+
* `values` lists by slot so the published JSON schema and `jbrowse validate`
|
|
11
|
+
* admit it. A session track's entry keeps the retired type after its lifted
|
|
12
|
+
* settings are folded onto it, so `migrate` must leave an entry it already
|
|
13
|
+
* rewrote as it found it.
|
|
14
|
+
*/
|
|
15
|
+
export interface RetiredDisplayType {
|
|
16
|
+
type: string;
|
|
17
|
+
migrate?: (entry: DisplayEntry) => DisplayEntry;
|
|
18
|
+
values?: Readonly<Record<string, readonly unknown[]>>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Display-instance props an old session carries that are config slots now.
|
|
22
|
+
* `lift` answers the slots they become, which the session migration writes
|
|
23
|
+
* into the track's config; `keys` lists them, so the instance sheds them and
|
|
24
|
+
* `jbrowse validate` reports them as stale rather than dead.
|
|
25
|
+
*/
|
|
26
|
+
export interface RetiredDisplayState {
|
|
27
|
+
keys: readonly string[];
|
|
28
|
+
lift: (instance: DisplayEntry) => DisplayEntry;
|
|
29
|
+
}
|
|
30
|
+
export default class DisplayType extends LazyStateModelElement {
|
|
31
|
+
protected readonly group = "display";
|
|
7
32
|
configSchema: AnyConfigurationSchemaType;
|
|
8
33
|
ReactComponent: AnyReactComponentType;
|
|
9
34
|
/**
|
|
10
|
-
* The track type the display
|
|
35
|
+
* The track type the display attaches to, or several: a display that reads
|
|
36
|
+
* a field any feature adapter serves (the Manhattan plot's `score`) belongs
|
|
37
|
+
* to every track type whose adapters serve it.
|
|
11
38
|
*/
|
|
12
|
-
trackType: string;
|
|
13
|
-
subDisplay?: {
|
|
14
|
-
type: string;
|
|
15
|
-
[key: string]: unknown;
|
|
16
|
-
};
|
|
39
|
+
trackType: string | string[];
|
|
17
40
|
/**
|
|
18
41
|
* The view type the display is associated with
|
|
19
42
|
*/
|
|
@@ -22,19 +45,26 @@ export default class DisplayType extends PluggableElementBase {
|
|
|
22
45
|
* Help text describing the display type
|
|
23
46
|
*/
|
|
24
47
|
helpText?: string;
|
|
48
|
+
/**
|
|
49
|
+
* What the track's adapter must declare it can answer for this display to
|
|
50
|
+
* be offered on the track: a graph display draws only from an adapter that
|
|
51
|
+
* cuts a subgraph (`['getSubgraph']`), so a track whose adapter cannot is
|
|
52
|
+
* not given one.
|
|
53
|
+
*/
|
|
54
|
+
adapterCapabilities: readonly string[];
|
|
55
|
+
retiredTypes: readonly RetiredDisplayType[];
|
|
56
|
+
retiredState?: RetiredDisplayState;
|
|
25
57
|
constructor(stuff: {
|
|
26
58
|
name: string;
|
|
27
|
-
stateModel: IAnyModelType;
|
|
28
|
-
trackType: string;
|
|
59
|
+
stateModel: IAnyModelType | (() => Promise<IAnyModelType>);
|
|
60
|
+
trackType: string | string[];
|
|
29
61
|
viewType: string;
|
|
30
62
|
displayName?: string;
|
|
31
|
-
subDisplay?: {
|
|
32
|
-
type: string;
|
|
33
|
-
[key: string]: unknown;
|
|
34
|
-
};
|
|
35
63
|
configSchema: AnyConfigurationSchemaType;
|
|
36
64
|
ReactComponent: AnyReactComponentType;
|
|
37
65
|
helpText?: string;
|
|
38
|
-
|
|
66
|
+
adapterCapabilities?: readonly string[];
|
|
67
|
+
retiredTypes?: readonly RetiredDisplayType[];
|
|
68
|
+
retiredState?: RetiredDisplayState;
|
|
39
69
|
});
|
|
40
70
|
}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
export default class DisplayType extends
|
|
3
|
-
|
|
1
|
+
import LazyStateModelElement from './LazyStateModelElement.js';
|
|
2
|
+
export default class DisplayType extends LazyStateModelElement {
|
|
3
|
+
group = 'display';
|
|
4
4
|
configSchema;
|
|
5
5
|
ReactComponent;
|
|
6
6
|
/**
|
|
7
|
-
* The track type the display
|
|
7
|
+
* The track type the display attaches to, or several: a display that reads
|
|
8
|
+
* a field any feature adapter serves (the Manhattan plot's `score`) belongs
|
|
9
|
+
* to every track type whose adapters serve it.
|
|
8
10
|
*/
|
|
9
11
|
trackType;
|
|
10
|
-
/*
|
|
11
|
-
* Indicates that this display type can be a "sub-display" of another type of
|
|
12
|
-
* display, e.g. in AlignmentsDisplay, has Pileup and SNPCoverage subDisplays
|
|
13
|
-
*/
|
|
14
|
-
subDisplay;
|
|
15
12
|
/**
|
|
16
13
|
* The view type the display is associated with
|
|
17
14
|
*/
|
|
@@ -20,14 +17,27 @@ export default class DisplayType extends PluggableElementBase {
|
|
|
20
17
|
* Help text describing the display type
|
|
21
18
|
*/
|
|
22
19
|
helpText;
|
|
20
|
+
/**
|
|
21
|
+
* What the track's adapter must declare it can answer for this display to
|
|
22
|
+
* be offered on the track: a graph display draws only from an adapter that
|
|
23
|
+
* cuts a subgraph (`['getSubgraph']`), so a track whose adapter cannot is
|
|
24
|
+
* not given one.
|
|
25
|
+
*/
|
|
26
|
+
adapterCapabilities;
|
|
27
|
+
retiredTypes;
|
|
28
|
+
retiredState;
|
|
23
29
|
constructor(stuff) {
|
|
24
|
-
super(
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
super({
|
|
31
|
+
...stuff,
|
|
32
|
+
aliases: stuff.retiredTypes?.map(r => r.type),
|
|
33
|
+
});
|
|
27
34
|
this.configSchema = stuff.configSchema;
|
|
28
35
|
this.ReactComponent = stuff.ReactComponent;
|
|
29
36
|
this.trackType = stuff.trackType;
|
|
30
37
|
this.viewType = stuff.viewType;
|
|
31
38
|
this.helpText = stuff.helpText;
|
|
39
|
+
this.adapterCapabilities = stuff.adapterCapabilities ?? [];
|
|
40
|
+
this.retiredTypes = stuff.retiredTypes ?? [];
|
|
41
|
+
this.retiredState = stuff.retiredState;
|
|
32
42
|
}
|
|
33
43
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import PluggableElementBase from './PluggableElementBase.ts';
|
|
2
|
+
import type { IAnyModelType } from '@jbrowse/mobx-state-tree';
|
|
3
|
+
/**
|
|
4
|
+
* A pluggable element whose state model may arrive through a dynamic import.
|
|
5
|
+
* Code that can run before any instance exists — session preloading, pruning,
|
|
6
|
+
* union membership — checks `isStateModelLoaded` before reading `stateModel`.
|
|
7
|
+
*/
|
|
8
|
+
export default abstract class LazyStateModelElement extends PluggableElementBase {
|
|
9
|
+
protected abstract readonly group: 'view' | 'display';
|
|
10
|
+
abstract ReactComponent: unknown;
|
|
11
|
+
private loadedStateModel?;
|
|
12
|
+
private stateModelPromise?;
|
|
13
|
+
private pendingStateModelExtensions;
|
|
14
|
+
stateModelLoader?: () => Promise<IAnyModelType>;
|
|
15
|
+
onStateModelLoaded?: () => void;
|
|
16
|
+
constructor(stuff: {
|
|
17
|
+
name: string;
|
|
18
|
+
displayName?: string;
|
|
19
|
+
aliases?: string[];
|
|
20
|
+
stateModel: IAnyModelType | (() => Promise<IAnyModelType>);
|
|
21
|
+
});
|
|
22
|
+
get stateModel(): IAnyModelType;
|
|
23
|
+
set stateModel(stateModel: IAnyModelType);
|
|
24
|
+
get isStateModelLoaded(): boolean;
|
|
25
|
+
assertStateModelLoaded(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Also starts the component's download, which rendering would otherwise
|
|
28
|
+
* request only after the model exists and the element mounts.
|
|
29
|
+
*/
|
|
30
|
+
loadStateModel(): Promise<IAnyModelType>;
|
|
31
|
+
extendStateModel(extend: (stateModel: IAnyModelType) => IAnyModelType): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { preloadComponent } from '../util/preloadComponent.js';
|
|
2
|
+
import PluggableElementBase from './PluggableElementBase.js';
|
|
3
|
+
/**
|
|
4
|
+
* A pluggable element whose state model may arrive through a dynamic import.
|
|
5
|
+
* Code that can run before any instance exists — session preloading, pruning,
|
|
6
|
+
* union membership — checks `isStateModelLoaded` before reading `stateModel`.
|
|
7
|
+
*/
|
|
8
|
+
export default class LazyStateModelElement extends PluggableElementBase {
|
|
9
|
+
loadedStateModel;
|
|
10
|
+
stateModelPromise;
|
|
11
|
+
pendingStateModelExtensions = [];
|
|
12
|
+
// named `stateModel` + `Loader` because pluggableMstType probes
|
|
13
|
+
// `${fieldName}Loader` generically
|
|
14
|
+
stateModelLoader;
|
|
15
|
+
// set by PluginManager.addElementType: runs Core-extendPluggableElement once
|
|
16
|
+
// the loader resolves, so a callback reading `stateModel` sees a model
|
|
17
|
+
onStateModelLoaded;
|
|
18
|
+
constructor(stuff) {
|
|
19
|
+
super(stuff);
|
|
20
|
+
if (typeof stuff.stateModel === 'function') {
|
|
21
|
+
this.stateModelLoader = stuff.stateModel;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.loadedStateModel = stuff.stateModel;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Throws before the loader resolves, so a plugin composing an unloaded
|
|
28
|
+
// model fails here rather than as an opaque MST error.
|
|
29
|
+
get stateModel() {
|
|
30
|
+
this.assertStateModelLoaded();
|
|
31
|
+
return this.loadedStateModel;
|
|
32
|
+
}
|
|
33
|
+
set stateModel(stateModel) {
|
|
34
|
+
this.loadedStateModel = stateModel;
|
|
35
|
+
}
|
|
36
|
+
get isStateModelLoaded() {
|
|
37
|
+
return this.loadedStateModel !== undefined;
|
|
38
|
+
}
|
|
39
|
+
assertStateModelLoaded() {
|
|
40
|
+
if (this.loadedStateModel === undefined) {
|
|
41
|
+
const getter = this.group === 'view' ? 'getViewType' : 'getDisplayType';
|
|
42
|
+
throw new Error(`state model for ${this.group} type ${this.name} is not loaded yet — await ${getter}('${this.name}').loadStateModel() first`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Also starts the component's download, which rendering would otherwise
|
|
47
|
+
* request only after the model exists and the element mounts.
|
|
48
|
+
*/
|
|
49
|
+
loadStateModel() {
|
|
50
|
+
preloadComponent(this.ReactComponent);
|
|
51
|
+
if (this.loadedStateModel !== undefined) {
|
|
52
|
+
return Promise.resolve(this.loadedStateModel);
|
|
53
|
+
}
|
|
54
|
+
if (!this.stateModelLoader) {
|
|
55
|
+
throw new Error(`${this.group} type ${this.name} has neither a state model nor a loader`);
|
|
56
|
+
}
|
|
57
|
+
this.stateModelPromise ??= this.stateModelLoader().then(loaded => {
|
|
58
|
+
let stateModel = loaded;
|
|
59
|
+
for (const extend of this.pendingStateModelExtensions) {
|
|
60
|
+
stateModel = extend(stateModel);
|
|
61
|
+
}
|
|
62
|
+
this.pendingStateModelExtensions = [];
|
|
63
|
+
this.loadedStateModel = stateModel;
|
|
64
|
+
this.onStateModelLoaded?.();
|
|
65
|
+
return this.stateModel;
|
|
66
|
+
});
|
|
67
|
+
return this.stateModelPromise;
|
|
68
|
+
}
|
|
69
|
+
extendStateModel(extend) {
|
|
70
|
+
if (this.loadedStateModel !== undefined) {
|
|
71
|
+
this.loadedStateModel = extend(this.loadedStateModel);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.pendingStateModelExtensions.push(extend);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -6,11 +6,9 @@ export default abstract class PluggableElementBase {
|
|
|
6
6
|
* or config names one. Each entry is a legacy `type` value previously used.
|
|
7
7
|
*
|
|
8
8
|
* Lets an element own its renames instead of a central migration file, so a
|
|
9
|
-
* plugin can be renamed out of tree. A
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* rename, a type narrow) use `addDisplayConfigMigration` instead — see that
|
|
13
|
-
* helper for why.
|
|
9
|
+
* plugin can be renamed out of tree. A display declares its renames as
|
|
10
|
+
* `retiredTypes`, which also say what the old type's entries become, and
|
|
11
|
+
* answers these from them.
|
|
14
12
|
*/
|
|
15
13
|
aliases?: string[];
|
|
16
14
|
constructor(args?: {
|
|
@@ -6,11 +6,9 @@ export default class PluggableElementBase {
|
|
|
6
6
|
* or config names one. Each entry is a legacy `type` value previously used.
|
|
7
7
|
*
|
|
8
8
|
* Lets an element own its renames instead of a central migration file, so a
|
|
9
|
-
* plugin can be renamed out of tree. A
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* rename, a type narrow) use `addDisplayConfigMigration` instead — see that
|
|
13
|
-
* helper for why.
|
|
9
|
+
* plugin can be renamed out of tree. A display declares its renames as
|
|
10
|
+
* `retiredTypes`, which also say what the old type's entries become, and
|
|
11
|
+
* answers these from them.
|
|
14
12
|
*/
|
|
15
13
|
aliases;
|
|
16
14
|
constructor(args) {
|
|
@@ -71,6 +71,16 @@ export default abstract class RpcMethodType<MethodName extends string = string>
|
|
|
71
71
|
pluginManager: PluginManager;
|
|
72
72
|
constructor(pluginManager: PluginManager);
|
|
73
73
|
serializeArguments(args: object): Promise<Record<string, unknown>>;
|
|
74
|
+
/**
|
|
75
|
+
* The reference sequence of the genome a call names in `assemblyName`, as a
|
|
76
|
+
* sibling of `adapterConfig`. The worker keys and builds a reference-reading
|
|
77
|
+
* adapter with it (dataAdapterCache), and this is the one place it comes
|
|
78
|
+
* from: a per-genome renaming method's regions have already become its
|
|
79
|
+
* `assemblyName` by the time super is reached, a header call names its own,
|
|
80
|
+
* and a comparative method names none. Ahead of the location walk, which
|
|
81
|
+
* converts and authorizes what the worker opens.
|
|
82
|
+
*/
|
|
83
|
+
private attachReference;
|
|
74
84
|
protected renameRegions<T extends RenameRegionsArgs>(args: T): Promise<T>;
|
|
75
85
|
/**
|
|
76
86
|
* The root model to resolve internet accounts against, but only while it is
|
|
@@ -109,7 +119,7 @@ export default abstract class RpcMethodType<MethodName extends string = string>
|
|
|
109
119
|
* is not cosmetic, because the two handles every method receives are the two
|
|
110
120
|
* an author who did not write them down never forwards.
|
|
111
121
|
*
|
|
112
|
-
* `CoreGetExportData` is the worked example: the
|
|
122
|
+
* `CoreGetExportData` is the worked example: the signal and status
|
|
113
123
|
* callback arrived on every call and its `execute` destructured neither, so
|
|
114
124
|
* the Save-track-data dialog's cancel did nothing and its progress never moved
|
|
115
125
|
* on the adapter-export branch. Nothing was mistyped — the fields simply were
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { isAlive, isStateTreeNode } from '@jbrowse/mobx-state-tree';
|
|
2
|
+
import { untracked } from 'mobx';
|
|
3
|
+
import { getSequenceAdapterConfigByName } from '../assemblyManager/getSequenceAdapterConfig.js';
|
|
2
4
|
import { renameRegionsIfNeeded } from '../util/index.js';
|
|
3
5
|
import { resolveUriLocation } from '../util/io/index.js';
|
|
4
6
|
import { unwrapRpcResult } from '../util/rpc.js';
|
|
@@ -64,17 +66,12 @@ function isCloneable(thing) {
|
|
|
64
66
|
}
|
|
65
67
|
// Values that structuredClone handles natively and that must pass through
|
|
66
68
|
// ownArgs unchanged: `Object.entries` on them yields `[]`, so naive cloning
|
|
67
|
-
// would collapse them to plain `{}` (
|
|
68
|
-
// would silently stop working, a typed array would lose its data).
|
|
69
|
+
// would collapse them to plain `{}` (a typed array would lose its data).
|
|
69
70
|
function isStructuredClonePassthrough(thing) {
|
|
70
71
|
return (thing instanceof File ||
|
|
71
72
|
thing instanceof Blob ||
|
|
72
73
|
thing instanceof ArrayBuffer ||
|
|
73
|
-
//
|
|
74
|
-
// collapses to {} and SAB-based stop tokens silently stop working. Nothing
|
|
75
|
-
// we ship mints one (see `stopToken.ts`, "Which path runs where"), so this
|
|
76
|
-
// arm is correctness for an isolated embedding host and nothing else —
|
|
77
|
-
// keep it, but it is not a hot path and never was.
|
|
74
|
+
// not an ArrayBuffer subclass
|
|
78
75
|
(typeof SharedArrayBuffer !== 'undefined' &&
|
|
79
76
|
thing instanceof SharedArrayBuffer) ||
|
|
80
77
|
ArrayBuffer.isView(thing) ||
|
|
@@ -96,7 +93,7 @@ function isStructuredClonePassthrough(thing) {
|
|
|
96
93
|
// DataCloneError on every call a display makes.
|
|
97
94
|
//
|
|
98
95
|
// So: non-cloneable leaves (functions, Errors) and structured-clone natives
|
|
99
|
-
// (typed arrays, Blobs
|
|
96
|
+
// (typed arrays, Blobs...) pass through by reference
|
|
100
97
|
// unchanged. A genuinely non-cloneable value that leaked in by mistake is still
|
|
101
98
|
// caught — at the worker postMessage boundary, which is a real structuredClone.
|
|
102
99
|
function ownArgs(thing, seen = new WeakMap()) {
|
|
@@ -171,12 +168,31 @@ export default class RpcMethodType extends PluggableElementBase {
|
|
|
171
168
|
this.pluginManager = pluginManager;
|
|
172
169
|
}
|
|
173
170
|
async serializeArguments(args) {
|
|
174
|
-
const augmented = await this.augmentLocationObjects(args);
|
|
171
|
+
const augmented = await this.augmentLocationObjects(this.attachReference(args));
|
|
175
172
|
return {
|
|
176
173
|
...augmented,
|
|
177
174
|
blobMap: getBlobMap(),
|
|
178
175
|
};
|
|
179
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* The reference sequence of the genome a call names in `assemblyName`, as a
|
|
179
|
+
* sibling of `adapterConfig`. The worker keys and builds a reference-reading
|
|
180
|
+
* adapter with it (dataAdapterCache), and this is the one place it comes
|
|
181
|
+
* from: a per-genome renaming method's regions have already become its
|
|
182
|
+
* `assemblyName` by the time super is reached, a header call names its own,
|
|
183
|
+
* and a comparative method names none. Ahead of the location walk, which
|
|
184
|
+
* converts and authorizes what the worker opens.
|
|
185
|
+
*/
|
|
186
|
+
attachReference(args) {
|
|
187
|
+
const { assemblyName } = args;
|
|
188
|
+
const assemblyManager = this.pluginManager.rootModel?.session?.assemblyManager;
|
|
189
|
+
if (!assemblyName || !assemblyManager) {
|
|
190
|
+
return args;
|
|
191
|
+
}
|
|
192
|
+
// eslint-disable-next-line no-restricted-syntax -- EFFECT INPUT: the reference only rides along on the RPC this call sends; the autorun that reached here (the synteny swap check) branches on the call's result, not on this read
|
|
193
|
+
const sequenceAdapter = untracked(() => getSequenceAdapterConfigByName(assemblyManager, assemblyName));
|
|
194
|
+
return sequenceAdapter ? { ...args, sequenceAdapter } : args;
|
|
195
|
+
}
|
|
180
196
|
async renameRegions(args) {
|
|
181
197
|
const { rootModel } = this.pluginManager;
|
|
182
198
|
return renameRegionsIfNeeded(rootModel.session.assemblyManager, args);
|