@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
|
@@ -1,29 +1,143 @@
|
|
|
1
1
|
import type { FileLocation } from '../util/types/index.ts';
|
|
2
|
+
import type { IsAny } from '../util/types/isAny.ts';
|
|
2
3
|
import type { ConfigurationSchemaDefinition, ConfigurationSchemaOptions, ConfigurationSchemaType } from './configurationSchema.ts';
|
|
3
4
|
import type { BuiltinSlotTypeName } from './configurationSlot.ts';
|
|
4
|
-
import type { ISimpleType, IStateTreeNode, Instance, SnapshotOut } from '@jbrowse/mobx-state-tree';
|
|
5
|
-
export type
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* The
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `
|
|
14
|
-
*
|
|
15
|
-
* `
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export type
|
|
5
|
+
import type { IAnyType, IArrayType, IOptionalIType, ISimpleType, IStateTreeNode, Instance, SnapshotOut } from '@jbrowse/mobx-state-tree';
|
|
6
|
+
export type ConfigurationSchemaForModel<MODEL> = IsAny<MODEL> extends true ? AnyConfigurationSchemaType : MODEL extends IStateTreeNode<infer T> ? T extends AnyConfigurationSchemaType ? T : T extends IOptionalIType<infer INNER extends AnyConfigurationSchemaType, any> ? INNER : AnyConfigurationSchemaType : never;
|
|
7
|
+
/**
|
|
8
|
+
* A schema's definition as **stored**: the author's own entries over the ones
|
|
9
|
+
* its `baseConfiguration` contributed, the type-level twin of
|
|
10
|
+
* `mergeSchemaDefinition`. The base arrives already merged with its own base,
|
|
11
|
+
* so one level here covers a chain of any depth.
|
|
12
|
+
*
|
|
13
|
+
* A flat mapped type over the union of both key sets, not
|
|
14
|
+
* `Omit<BASE, keyof D> & D`: an intersection's `keyof` is a union of key sets,
|
|
15
|
+
* and mapping over a union that includes `string` — which
|
|
16
|
+
* `ConfigurationSchemaDefinition`'s index signature contributes — collapses
|
|
17
|
+
* back to an index signature, which is the thing `ConfigNodeProps` exists to
|
|
18
|
+
* get rid of.
|
|
19
|
+
*/
|
|
20
|
+
export type MergeConfigDef<D, BASE> = BASE extends ConfigurationSchemaType<infer BD, any> ? {
|
|
21
|
+
[K in keyof BD | keyof D]: NormalizeSlotDef<K extends keyof D ? K extends keyof BD ? MergeSlotDef<BD[K], D[K]> : D[K] : K extends keyof BD ? BD[K] : never>;
|
|
22
|
+
} : {
|
|
23
|
+
[K in keyof D]: NormalizeSlotDef<D[K]>;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A redeclared slot merges field-by-field over the base's; a sub-schema or a
|
|
27
|
+
* constant keeps replace semantics, matching `mergeSchemaDefinition`'s
|
|
28
|
+
* `isSlotDefinitionEntry` guard.
|
|
29
|
+
*/
|
|
30
|
+
type MergeSlotDef<BASE_ENTRY, ENTRY> = BASE_ENTRY extends {
|
|
31
|
+
type: string;
|
|
32
|
+
} ? ENTRY extends {
|
|
33
|
+
type: string;
|
|
34
|
+
} ? Omit<BASE_ENTRY, keyof ENTRY> & ENTRY : ENTRY : ENTRY;
|
|
35
|
+
/**
|
|
36
|
+
* What the type level reads off a slot definition: the slot's `type`, a
|
|
37
|
+
* `stringEnum`'s `model`, and whether a `defaultValue` is there at all — widened
|
|
38
|
+
* off its literal. The description, `advanced`, `contextVariable` and the
|
|
39
|
+
* literal default are documentation and runtime, and carrying them makes two
|
|
40
|
+
* schemas that differ only in one of them mutually unassignable: a subclass
|
|
41
|
+
* raising `height` from 100 to 250 stopped satisfying a parameter pinned to its
|
|
42
|
+
* base. `SlotValueRawFromDef` re-widens a scalar default anyway, and reaches
|
|
43
|
+
* `any` for everything else, so nothing downstream loses precision.
|
|
44
|
+
*/
|
|
45
|
+
type NormalizeSlotDef<E> = E extends AnyConfigurationSchemaType ? E : E extends {
|
|
46
|
+
type: infer T;
|
|
47
|
+
} ? {
|
|
48
|
+
type: T;
|
|
49
|
+
} & (E extends {
|
|
50
|
+
model: infer M;
|
|
51
|
+
} ? {
|
|
52
|
+
model: M;
|
|
53
|
+
} : unknown) & (E extends {
|
|
54
|
+
defaultValue: infer V;
|
|
55
|
+
} ? {
|
|
56
|
+
defaultValue: WidenDefaultValue<V>;
|
|
57
|
+
} : unknown) : E;
|
|
58
|
+
type WidenDefaultValue<V> = [V] extends [boolean] ? boolean : [V] extends [string] ? string : [V] extends [number] ? number : unknown;
|
|
59
|
+
type ConfigNodeValue<DEF> = IsAny<DEF> extends true ? any : DEF extends AnyConfigurationSchemaType ? DEF['Type'] : DEF extends IArrayType<any> | IOptionalIType<IArrayType<any>, any> ? DEF['Type'] : DEF extends string ? string : DEF extends number ? number : SlotValueRawFromDef<DEF>;
|
|
60
|
+
/**
|
|
61
|
+
* The slots a config node presents, read off the schema's own DEFINITION rather
|
|
62
|
+
* than the `Record<string, any>` `makeConfigurationSchemaModel` assembles its
|
|
63
|
+
* MST props from. Those props carry an index signature, so every
|
|
64
|
+
* `node.anything` resolves to `any`; mapping the definition instead is what
|
|
65
|
+
* makes `node.colorr` a compile error.
|
|
66
|
+
*
|
|
67
|
+
* A plain mapped type, and it has to stay one. Wrapping it in a conditional —
|
|
68
|
+
* to answer early for a widened definition, say — makes TypeScript measure
|
|
69
|
+
* DEFINITION as covariant instead of invariant, and it refuses a failed
|
|
70
|
+
* covariant check on a type argument outright where a failed invariant one
|
|
71
|
+
* falls back to comparing the two schemas structurally. Structural is the
|
|
72
|
+
* comparison that matters: a subclass schema's node has every slot the base's
|
|
73
|
+
* does, while its *definition* restates `defaultValue` and `description` and so
|
|
74
|
+
* matches nothing. The widened case belongs on `AnyConfigurationModel`.
|
|
75
|
+
*/
|
|
76
|
+
export type ConfigNodeProps<DEFINITION> = {
|
|
77
|
+
[K in keyof DEFINITION]: ConfigNodeValue<DEFINITION[K]>;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* The two write actions every config node carries, which `setConf` is the
|
|
81
|
+
* spelling of. A type alias rather than an interface because it annotates the
|
|
82
|
+
* `.actions` block: MST constrains that to `ModelActions`, an index signature
|
|
83
|
+
* of functions, and only a type alias of an object literal gets the implicit
|
|
84
|
+
* index signature that satisfies it.
|
|
85
|
+
*/
|
|
86
|
+
export type ConfigNodeActions = {
|
|
87
|
+
setSubschema: (slotName: string, data: unknown) => unknown;
|
|
88
|
+
setSlot: (slotName: string, value: unknown) => void;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* MST's node brand, restated. A config node carries its own schema here by
|
|
92
|
+
* polymorphic `this`, and `ConfigurationSchemaForModel` walks it back out —
|
|
93
|
+
* which is what every `getConf` / `readConfObject` / `setConf` slot-name
|
|
94
|
+
* constraint hangs off, so losing it switches the read-side check off with no
|
|
95
|
+
* error anywhere. `scripts/audit-config-read-types.ts` is the only thing that
|
|
96
|
+
* reports that; run it after touching this.
|
|
97
|
+
*
|
|
98
|
+
* Structurally identical to `IStateTreeNode<IT>`, but an alias rather than an
|
|
99
|
+
* interface: TypeScript infers an implicit index signature for an intersection
|
|
100
|
+
* only when every constituent is an alias or a mapped type, and that is what
|
|
101
|
+
* leaves a concrete config node — whose props are a mapped type with no index
|
|
102
|
+
* signature of its own — assignable to `AnyConfigurationModel`.
|
|
103
|
+
*/
|
|
104
|
+
export type ConfigNodeBrand<IT extends IAnyType> = {
|
|
105
|
+
readonly $treenode?: any;
|
|
106
|
+
readonly $__mstStateTreeNodeType__?: [IT] | [any];
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* The identifier a schema's `explicitIdentifier` installs, folded into the
|
|
110
|
+
* definition as if it were a declared string slot — which is what it is at
|
|
111
|
+
* runtime, `makeConfigurationSchemaModel` just builds it from the options rather
|
|
112
|
+
* than from the table. Folding it in rather than intersecting it onto `Type`
|
|
113
|
+
* keeps it out of `ConfigurationSchemaType`'s parameter list: as a parameter it
|
|
114
|
+
* reads as invariant (it lands in a `Record<K, …>` key position), which stops a
|
|
115
|
+
* concrete schema widening to `AnyConfigurationSchemaType`. Inheritance comes
|
|
116
|
+
* free, since `MergeConfigDef` already folds the base's whole definition in.
|
|
117
|
+
*/
|
|
118
|
+
export interface IdentifierSlotDef {
|
|
119
|
+
type: 'string';
|
|
120
|
+
defaultValue: '';
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The `type` prop an `explicitlyTyped` schema installs, folded into the
|
|
124
|
+
* definition the same way and for the same reasons. Separate from
|
|
125
|
+
* `IdentifierSlotDef` despite the identical shape, because the runtime prop is
|
|
126
|
+
* `types.literal(modelName)` and this is where that would be said if the model
|
|
127
|
+
* name ever became a type parameter.
|
|
128
|
+
*/
|
|
129
|
+
export interface TypeSlotDef {
|
|
130
|
+
type: 'string';
|
|
131
|
+
defaultValue: '';
|
|
132
|
+
}
|
|
133
|
+
export type ConfigurationSlotName<SCHEMA> = IsAny<SCHEMA> extends true ? string : SCHEMA extends ConfigurationSchemaType<infer D, any> ? keyof D & string : never;
|
|
20
134
|
/**
|
|
21
135
|
* The names a config snapshot for `SCHEMA` may use — its own slots, its
|
|
22
136
|
* sub-schemas recursively, its identifier and everything it inherits — with
|
|
23
137
|
* every value left `unknown`.
|
|
24
138
|
*
|
|
25
139
|
* Names are the whole point of it. A slot value can be its own type, a `jexl:`
|
|
26
|
-
* callback string, or (for a
|
|
140
|
+
* callback string, or (for a `maybe*` slot) absent, and nothing here tries to
|
|
27
141
|
* check that; a *name* the schema does not declare is dropped on the way in
|
|
28
142
|
* without a word, so `preferance` is a setting that reads as applied and never
|
|
29
143
|
* applies. Against an object literal — which is how an embedder writes one —
|
|
@@ -31,14 +145,7 @@ export type ConfigurationSlotName<SCHEMA> = SCHEMA extends undefined ? never : S
|
|
|
31
145
|
*/
|
|
32
146
|
export type ConfigurationSnapshot<SCHEMA> = SCHEMA extends undefined ? never : SCHEMA extends ConfigurationSchemaType<infer D, any> ? {
|
|
33
147
|
[K in keyof D]?: D[K] extends ConfigurationSchemaType<any, any> ? ConfigurationSnapshot<D[K]> : unknown;
|
|
34
|
-
}
|
|
35
|
-
[K in GetExplicitIdentifier<SCHEMA>]?: string;
|
|
36
|
-
} & (GetBase<SCHEMA> extends ConfigurationSchemaType<any, any> ? ConfigurationSnapshot<GetBase<SCHEMA>> : unknown) : unknown;
|
|
37
|
-
type SlotValueResolvedFromDef<DEF> = DEF extends {
|
|
38
|
-
promotedBase: undefined;
|
|
39
|
-
} ? SlotValueRawFromDef<DEF> : DEF extends {
|
|
40
|
-
promotedBase: unknown;
|
|
41
|
-
} ? Exclude<SlotValueRawFromDef<DEF>, undefined> : SlotValueRawFromDef<DEF>;
|
|
148
|
+
} : unknown;
|
|
42
149
|
/**
|
|
43
150
|
* The value each builtin slot `type` reads as — the type-level twin of
|
|
44
151
|
* `slotTypes` in `configurationSlot.ts`, which is the same list as MST models.
|
|
@@ -54,21 +161,24 @@ type SlotValueResolvedFromDef<DEF> = DEF extends {
|
|
|
54
161
|
*/
|
|
55
162
|
interface SlotValueByType {
|
|
56
163
|
stringArray: string[];
|
|
164
|
+
expressionArray: string[];
|
|
57
165
|
stringArrayMap: Record<string, string[]>;
|
|
58
166
|
numberMap: Record<string, number>;
|
|
167
|
+
stringMap: Record<string, string>;
|
|
59
168
|
fileLocation: FileLocation;
|
|
169
|
+
maybeFileLocation: FileLocation | undefined;
|
|
60
170
|
maybeNumber: number | undefined;
|
|
61
171
|
maybeBoolean: boolean | undefined;
|
|
62
172
|
maybeColor: string | undefined;
|
|
173
|
+
maybeString: string | undefined;
|
|
63
174
|
/**
|
|
64
175
|
* `frozen` and its `maybe*` form are `any` deliberately — arbitrary dynamic
|
|
65
176
|
* JSON whose shape the caller asserts at the read boundary. `unknown` would
|
|
66
177
|
* only add cast ceremony on values that are legitimately dynamic.
|
|
67
178
|
*
|
|
68
179
|
* Stated here rather than left to the `defaultValue` fallback, which reaches
|
|
69
|
-
* `any` for these only by accident:
|
|
70
|
-
*
|
|
71
|
-
* always the `undefined` sentinel.
|
|
180
|
+
* `any` for these only by accident: no `frozen` slot in the repo happens to
|
|
181
|
+
* default to a scalar.
|
|
72
182
|
*/
|
|
73
183
|
frozen: any;
|
|
74
184
|
maybeFrozen: any;
|
|
@@ -77,7 +187,9 @@ interface SlotValueByType {
|
|
|
77
187
|
boolean: boolean;
|
|
78
188
|
string: string;
|
|
79
189
|
text: string;
|
|
190
|
+
featureField: string;
|
|
80
191
|
color: string;
|
|
192
|
+
colorArray: string[];
|
|
81
193
|
}
|
|
82
194
|
/**
|
|
83
195
|
* The two tables name the same builtin slot types, checked rather than
|
|
@@ -99,18 +211,37 @@ type SlotValueRawFromDef<DEF> = DEF extends AnyConfigurationSchemaType ? AnyConf
|
|
|
99
211
|
model: ISimpleType<infer T extends string>;
|
|
100
212
|
} ? DEF extends {
|
|
101
213
|
type: 'maybeStringEnum';
|
|
102
|
-
} ? T | undefined :
|
|
214
|
+
} ? T | undefined : DEF extends {
|
|
215
|
+
type: 'stringEnumArray';
|
|
216
|
+
} ? T[] : T : DEF extends {
|
|
103
217
|
type: infer T extends keyof SlotValueByType;
|
|
104
218
|
} ? SlotValueByType[T] : DEF extends {
|
|
105
219
|
defaultValue: infer V;
|
|
106
220
|
} ? [V] extends [boolean] ? boolean : [V] extends [string] ? string : [V] extends [number] ? number : any : any;
|
|
107
|
-
|
|
108
|
-
|
|
221
|
+
type SubSchemaOf<SCHEMA, K> = IsAny<SCHEMA> extends true ? any : SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? D[K] : never : never;
|
|
222
|
+
type SubSchemaSlotPath<SCHEMA> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? IsAny<D> extends true ? readonly string[] : {
|
|
223
|
+
[K in keyof D & string]: D[K] extends AnyConfigurationSchemaType ? readonly [K, ConfigurationSlotName<D[K]>] | readonly [K, ...SubSchemaSlotPath<D[K]>] : D[K] extends IAnyType | {
|
|
224
|
+
type: 'frozen' | 'maybeFrozen';
|
|
225
|
+
} ? readonly [K, ...string[]] : never;
|
|
226
|
+
}[keyof D & string] : readonly string[];
|
|
109
227
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
228
|
+
* The array paths a read may take into `SCHEMA`. Past one segment each is
|
|
229
|
+
* checked: a sub-schema's name, then one of its slot names or a deeper path. A
|
|
230
|
+
* head naming something other than a sub-schema — a pluggable adapter union, an
|
|
231
|
+
* array or map of sub-schemas, a `frozen` slot — keeps an unchecked tail, and a
|
|
232
|
+
* widened schema admits any `string[]`.
|
|
233
|
+
*
|
|
234
|
+
* A one-segment path stays unchecked: it is how a generic class body, where
|
|
235
|
+
* `SCHEMA` is unresolved, reads a slot at all (`FastaAdapterBase`).
|
|
112
236
|
*/
|
|
113
|
-
export type
|
|
237
|
+
export type ConfigurationSlotPath<SCHEMA> = readonly [] | readonly [string] | SubSchemaSlotPath<SCHEMA>;
|
|
238
|
+
/** what a read of `PATH` into `SCHEMA` yields */
|
|
239
|
+
export type ConfigurationSlotPathValue<SCHEMA, PATH> = PATH extends readonly [
|
|
240
|
+
infer HEAD,
|
|
241
|
+
...infer REST
|
|
242
|
+
] ? SubSchemaOf<SCHEMA, HEAD> extends infer SUB extends AnyConfigurationSchemaType ? REST extends readonly [infer SLOT extends string] ? ConfigurationSlotValue<SUB, SLOT> : ConfigurationSlotPathValue<SUB, REST> : any : any;
|
|
243
|
+
/** what a raw read (`getConf` / `readConfObject`) of this slot yields */
|
|
244
|
+
export type ConfigurationSlotValue<SCHEMA, K extends string> = SCHEMA extends ConfigurationSchemaType<infer D, any> ? K extends keyof D ? SlotValueRawFromDef<D[K]> : any : any;
|
|
114
245
|
/**
|
|
115
246
|
* Naming convention for config types, paired per schema:
|
|
116
247
|
* - `XConfigSchema` is the MST IType (the schema itself). Use it for
|
|
@@ -125,7 +256,15 @@ export type ConfigurationSlotValueResolved<SCHEMA, K extends string> = SCHEMA ex
|
|
|
125
256
|
* model-or-snapshot union, not a plain instance).
|
|
126
257
|
*/
|
|
127
258
|
export type AnyConfigurationSchemaType = ConfigurationSchemaType<any, any>;
|
|
128
|
-
export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType>;
|
|
259
|
+
export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType> & Record<string, any>;
|
|
260
|
+
/**
|
|
261
|
+
* A node of a pluggable element union — a track's, a display's, an adapter's —
|
|
262
|
+
* whichever member it is, naming its `type`. An interface rather than an
|
|
263
|
+
* intersection so a generated doc prints the name.
|
|
264
|
+
*/
|
|
265
|
+
export interface PluggableConfigNode extends AnyConfigurationModel {
|
|
266
|
+
type: string;
|
|
267
|
+
}
|
|
129
268
|
/**
|
|
130
269
|
* The `XConfigModel` for a **field table** — a `*ConfigSchemaFields` export —
|
|
131
270
|
* rather than for a whole assembled schema. What it is for is the cast a
|
|
@@ -144,7 +283,7 @@ export type AnyConfigurationModel = Instance<AnyConfigurationSchemaType>;
|
|
|
144
283
|
* `RowHeightMixin` + `rowHeightConfigSchemaFields` is the worked example, and
|
|
145
284
|
* `packages/tree-sidebar/CLAUDE.md` has the reasoning.
|
|
146
285
|
*/
|
|
147
|
-
export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, BASE extends AnyConfigurationSchemaType | undefined = undefined> = Instance<ConfigurationSchemaType<FIELDS, ConfigurationSchemaOptions<BASE, undefined>>>;
|
|
286
|
+
export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, BASE extends AnyConfigurationSchemaType | undefined = undefined> = Instance<ConfigurationSchemaType<MergeConfigDef<FIELDS, BASE>, ConfigurationSchemaOptions<BASE, undefined>>>;
|
|
148
287
|
/**
|
|
149
288
|
* `true` when HOST's `configuration` still narrows slot names, `false` when it
|
|
150
289
|
* has widened them back to `string`. One line per mixin pins it:
|
|
@@ -154,8 +293,7 @@ export type ConfigModelForFields<FIELDS extends ConfigurationSchemaDefinition, B
|
|
|
154
293
|
* ```
|
|
155
294
|
*
|
|
156
295
|
* Worth a named type because the widened form has **no symptom** — a mixin host
|
|
157
|
-
* cast to `AnyConfigurationModel
|
|
158
|
-
* intersection that re-widens, compiles and runs and checks nothing. Every
|
|
296
|
+
* cast to `AnyConfigurationModel` compiles and runs and checks nothing. Every
|
|
159
297
|
* misspelled slot name below it typechecks, and a misspelled *read* returns
|
|
160
298
|
* `undefined` with no diagnostic at any layer, so only a sabotage or this
|
|
161
299
|
* assertion tells the two apart.
|
|
@@ -167,11 +305,12 @@ export type HostChecksSlotNames<HOST extends {
|
|
|
167
305
|
export type AnyConfigurationSnapshot = SnapshotOut<AnyConfigurationModel>;
|
|
168
306
|
/**
|
|
169
307
|
* A value readable as configuration: either a live configuration model or a
|
|
170
|
-
* plain snapshot of one. `session.tracks`
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* is the honest type at those boundaries. Reserve
|
|
174
|
-
* values that must be live (actions, identity,
|
|
308
|
+
* plain snapshot of one. `session.tracks` holds plain base or merged configs
|
|
309
|
+
* that hydrate to MST only on first reference access, `getTrackById` also
|
|
310
|
+
* answers live assembly-sequence and connection nodes, and `readConfObject`
|
|
311
|
+
* reads both — so this is the honest type at those boundaries. Reserve
|
|
312
|
+
* `AnyConfigurationModel` for values that must be live (actions, identity,
|
|
313
|
+
* reference resolution).
|
|
175
314
|
*/
|
|
176
315
|
export type AnyConfiguration = AnyConfigurationModel | AnyConfigurationSnapshot;
|
|
177
316
|
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expand a one-file adapter's `{ uri }` shorthand into the single location slot
|
|
3
|
+
* it declares, or pass a snapshot already in full form through untouched.
|
|
4
|
+
*
|
|
5
|
+
* `locationKey` is the only thing that differs between the twenty-odd adapters
|
|
6
|
+
* reading one file (`bedLocation`, `bigWigLocation`, `hicLocation`,
|
|
7
|
+
* `pafLocation`, …). `expandTabixShorthand` is the indexed families' version.
|
|
8
|
+
*/
|
|
9
|
+
export declare function expandUriShorthand(snap: Record<string, unknown>, locationKey: string): Record<string, unknown>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { fillLocations } from './fillLocations.js';
|
|
2
|
+
/**
|
|
3
|
+
* Expand a one-file adapter's `{ uri }` shorthand into the single location slot
|
|
4
|
+
* it declares, or pass a snapshot already in full form through untouched.
|
|
5
|
+
*
|
|
6
|
+
* `locationKey` is the only thing that differs between the twenty-odd adapters
|
|
7
|
+
* reading one file (`bedLocation`, `bigWigLocation`, `hicLocation`,
|
|
8
|
+
* `pafLocation`, …). `expandTabixShorthand` is the indexed families' version.
|
|
9
|
+
*/
|
|
10
|
+
export function expandUriShorthand(snap, locationKey) {
|
|
11
|
+
return snap.uri
|
|
12
|
+
? fillLocations(snap, {
|
|
13
|
+
[locationKey]: { uri: snap.uri, baseUri: snap.baseUri },
|
|
14
|
+
})
|
|
15
|
+
: snap;
|
|
16
|
+
}
|
|
@@ -1,30 +1,24 @@
|
|
|
1
1
|
import type PluginManager from '../../PluginManager.ts';
|
|
2
|
-
import type { AnyConfigurationModel, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotValue } from '../../configuration/index.ts';
|
|
2
|
+
import type { AnyConfigurationModel, ConfigurationSchemaForModel, ConfigurationSlotName, ConfigurationSlotPath, ConfigurationSlotPathValue, ConfigurationSlotValue } from '../../configuration/index.ts';
|
|
3
3
|
import type { getSubAdapterType } from '../dataAdapterCache.ts';
|
|
4
4
|
export declare class BaseAdapter<CONF extends AnyConfigurationModel = AnyConfigurationModel> {
|
|
5
5
|
id: string;
|
|
6
6
|
config: CONF;
|
|
7
7
|
getSubAdapter?: getSubAdapterType;
|
|
8
8
|
pluginManager?: PluginManager;
|
|
9
|
-
sequenceAdapterConfig?: Record<string, unknown>;
|
|
10
|
-
static capabilities: string[];
|
|
11
|
-
constructor(config?: CONF, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
|
|
12
9
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* `CramAdapter` binds its `seqFetch` into the `IndexedCramFile` at
|
|
22
|
-
* construction, and @gmod/cram invokes it later with `(seqId, start, end)` and
|
|
23
|
-
* nothing else — there is no call to thread a config through. Threading it per
|
|
24
|
-
* call is the recurring proposal here and it dies at CRAM, which is the
|
|
25
|
-
* adapter that needs the reference most.
|
|
10
|
+
* The reference sequence this instance reads, as the adapter config of the
|
|
11
|
+
* assembly the request that built it named. Part of the instance's identity:
|
|
12
|
+
* dataAdapterCache keys a {@link READS_REFERENCE} adapter on its config AND
|
|
13
|
+
* this, so one BAM shown on two genomes is two instances, each reading its
|
|
14
|
+
* own. Undefined when the building request named no genome, and a reference
|
|
15
|
+
* read then throws rather than guessing. Instance state rather than a
|
|
16
|
+
* per-call argument because `CramAdapter` binds its reference fetch into the
|
|
17
|
+
* `IndexedCramFile` at construction, inside @gmod/cram's slice cache.
|
|
26
18
|
*/
|
|
27
|
-
|
|
19
|
+
readonly sequenceAdapterConfig?: Record<string, unknown>;
|
|
20
|
+
static capabilities: string[];
|
|
21
|
+
constructor(config?: CONF, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager, sequenceAdapterConfig?: Record<string, unknown>);
|
|
28
22
|
/** shorthand for `readConfObject(this.config, arg)` */
|
|
29
|
-
getConf<SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONF>> |
|
|
23
|
+
getConf<const SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONF>> | ConfigurationSlotPath<ConfigurationSchemaForModel<CONF>> = ConfigurationSlotName<ConfigurationSchemaForModel<CONF>>>(arg: SLOT, args?: Record<string, unknown>): SLOT extends string ? ConfigurationSlotValue<ConfigurationSchemaForModel<CONF>, SLOT> : ConfigurationSlotPathValue<ConfigurationSchemaForModel<CONF>, SLOT>;
|
|
30
24
|
}
|
|
@@ -6,32 +6,25 @@ export class BaseAdapter {
|
|
|
6
6
|
config;
|
|
7
7
|
getSubAdapter;
|
|
8
8
|
pluginManager;
|
|
9
|
+
/**
|
|
10
|
+
* The reference sequence this instance reads, as the adapter config of the
|
|
11
|
+
* assembly the request that built it named. Part of the instance's identity:
|
|
12
|
+
* dataAdapterCache keys a {@link READS_REFERENCE} adapter on its config AND
|
|
13
|
+
* this, so one BAM shown on two genomes is two instances, each reading its
|
|
14
|
+
* own. Undefined when the building request named no genome, and a reference
|
|
15
|
+
* read then throws rather than guessing. Instance state rather than a
|
|
16
|
+
* per-call argument because `CramAdapter` binds its reference fetch into the
|
|
17
|
+
* `IndexedCramFile` at construction, inside @gmod/cram's slice cache.
|
|
18
|
+
*/
|
|
9
19
|
sequenceAdapterConfig;
|
|
10
20
|
static capabilities = [];
|
|
11
|
-
constructor(config = EmptyConfig.create(), getSubAdapter, pluginManager) {
|
|
21
|
+
constructor(config = EmptyConfig.create(), getSubAdapter, pluginManager, sequenceAdapterConfig) {
|
|
12
22
|
this.config = config;
|
|
13
23
|
this.getSubAdapter = getSubAdapter;
|
|
14
24
|
this.pluginManager = pluginManager;
|
|
25
|
+
this.sequenceAdapterConfig = sequenceAdapterConfig;
|
|
15
26
|
this.id = getAdapterId(config);
|
|
16
27
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Stashes the reference-sequence adapter config for adapters that decode
|
|
19
|
-
* against the reference (e.g. BAM/CRAM). Set once and never cleared: the
|
|
20
|
-
* adapter is cached per adapterConfig (dataAdapterCache), so a given instance
|
|
21
|
-
* maps to a single, stable sequence adapter, and an `undefined` from a later
|
|
22
|
-
* caller must not wipe a config an earlier one already primed. One `??=` does
|
|
23
|
-
* both; callers don't need to guard.
|
|
24
|
-
*
|
|
25
|
-
* **Instance state rather than a per-call argument, and that is forced.**
|
|
26
|
-
* `CramAdapter` binds its `seqFetch` into the `IndexedCramFile` at
|
|
27
|
-
* construction, and @gmod/cram invokes it later with `(seqId, start, end)` and
|
|
28
|
-
* nothing else — there is no call to thread a config through. Threading it per
|
|
29
|
-
* call is the recurring proposal here and it dies at CRAM, which is the
|
|
30
|
-
* adapter that needs the reference most.
|
|
31
|
-
*/
|
|
32
|
-
setSequenceAdapterConfig(config) {
|
|
33
|
-
this.sequenceAdapterConfig ??= config;
|
|
34
|
-
}
|
|
35
28
|
/** shorthand for `readConfObject(this.config, arg)` */
|
|
36
29
|
getConf(arg, args) {
|
|
37
30
|
return readConfObject(this.config, arg, args);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { BaseAdapter } from './BaseAdapter.ts';
|
|
2
2
|
import type { AnyConfigurationModel } from '../../configuration/index.ts';
|
|
3
|
+
import type { FeatureTable } from '../../util/featureTable.ts';
|
|
3
4
|
import type { Feature } from '../../util/simpleFeature.ts';
|
|
4
5
|
import type { AugmentedRegion as Region } from '../../util/types/index.ts';
|
|
5
|
-
import type {
|
|
6
|
+
import type { FeatureDensity } from './featureDensity.ts';
|
|
7
|
+
import type { BaseOptions, ZoomRange } from './types.ts';
|
|
6
8
|
import type { Observable } from 'rxjs';
|
|
7
9
|
/**
|
|
8
10
|
* Base class for feature adapters to extend. Defines some methods that
|
|
@@ -75,11 +77,18 @@ export declare abstract class BaseFeatureDataAdapter<CONF extends AnyConfigurati
|
|
|
75
77
|
/**
|
|
76
78
|
* Convenience wrapper that collects {@link getFeatures} for a region into an
|
|
77
79
|
* array — the common shape across RPC methods (RenderFeatureData, Manhattan,
|
|
78
|
-
* Wiggle, etc.). Pass `opts` so `statusCallback`/`
|
|
80
|
+
* Wiggle, etc.). Pass `opts` so `statusCallback`/`signal` reach the
|
|
79
81
|
* adapter; omitting them means no download progress and a fetch that can't be
|
|
80
82
|
* interrupted mid-flight.
|
|
81
83
|
*/
|
|
82
84
|
getFeaturesArray(region: Region, opts?: BaseOptions): Promise<Feature[]>;
|
|
85
|
+
/**
|
|
86
|
+
* The features overlapping a region as the table a mark's declaration runs
|
|
87
|
+
* over: by default a table over {@link getFeaturesArray}. An adapter that
|
|
88
|
+
* already holds its rows as typed arrays answers a `ColumnTable` over them
|
|
89
|
+
* instead, and makes no object per row.
|
|
90
|
+
*/
|
|
91
|
+
getFeatureTable(region: Region, opts?: BaseOptions): Promise<FeatureTable>;
|
|
83
92
|
/**
|
|
84
93
|
* {@link getFeaturesArray} across multiple regions — collects
|
|
85
94
|
* {@link getFeaturesInMultipleRegions} into an array. The common shape in
|
|
@@ -117,6 +126,35 @@ export declare abstract class BaseFeatureDataAdapter<CONF extends AnyConfigurati
|
|
|
117
126
|
* agent-docs/reference/REGION_TOO_LARGE.md.
|
|
118
127
|
*/
|
|
119
128
|
getRegionByteSize(_regions: Region[], _opts?: BaseOptions): Promise<number | undefined>;
|
|
129
|
+
/**
|
|
130
|
+
* The bp/px interval over which this adapter answers a fetch from the same
|
|
131
|
+
* zoom level it answers `opts.bpPerPx` from, so a display holding the answer
|
|
132
|
+
* refetches only when the view leaves it. The default, `undefined`, is an
|
|
133
|
+
* answer that does not depend on the zoom, which a display never refetches
|
|
134
|
+
* for a zoom. An adapter that reads `bpPerPx` declares its range here
|
|
135
|
+
* (`BigWigAdapter` from its header's zoom levels).
|
|
136
|
+
*/
|
|
137
|
+
getZoomRange(_opts?: BaseOptions): Promise<ZoomRange | undefined>;
|
|
138
|
+
/**
|
|
139
|
+
* The interval every value this adapter answers lies in by definition, as a
|
|
140
|
+
* fraction lies in [0, 1], which a value scale's unpinned ends stand at
|
|
141
|
+
* rather than following the loaded data, so the axis reads alike at every
|
|
142
|
+
* locus. The default, `undefined`, is a quantity with no such bounds, whose
|
|
143
|
+
* axis autoscales. `GCContentAdapter` declares [0, 1] for GC content and none
|
|
144
|
+
* for skew.
|
|
145
|
+
*/
|
|
146
|
+
getValueDomain(_opts?: BaseOptions): Promise<[number, number] | undefined>;
|
|
147
|
+
/**
|
|
148
|
+
* Features per bin over each region, at the view's `bpPerPx`, for the density
|
|
149
|
+
* tier the display draws where the region-too-large gate refused the
|
|
150
|
+
* features. The default reads the `densityAdapter` sidecar slot
|
|
151
|
+
* (`densityAdapterConfigSchemaFields`) through `getSubAdapter`; `undefined`
|
|
152
|
+
* means no tier, and the banner stands. ADR-102 records why no index
|
|
153
|
+
* estimate stands in for a missing sidecar.
|
|
154
|
+
*/
|
|
155
|
+
getFeatureDensity(regions: Region[], opts: BaseOptions & {
|
|
156
|
+
bpPerPx: number;
|
|
157
|
+
}): Promise<FeatureDensity[] | undefined>;
|
|
120
158
|
getSources(regions: Region[], opts?: BaseOptions): Promise<{
|
|
121
159
|
name: string;
|
|
122
160
|
color?: string;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { firstValueFrom, merge } from 'rxjs';
|
|
2
2
|
import { toArray } from 'rxjs/operators';
|
|
3
|
+
import { asTable } from '../../util/featureTable.js';
|
|
3
4
|
import { createStatusFanOut } from '../../util/progress.js';
|
|
4
5
|
import { blankStats, scoresToStats } from '../../util/stats.js';
|
|
5
6
|
import { BaseAdapter } from './BaseAdapter.js';
|
|
7
|
+
import { isSubAdapterConfig } from './featureDensity.js';
|
|
6
8
|
import { aggregateQuantitativeStats } from './stats.js';
|
|
9
|
+
import { isFeatureAdapter } from './util.js';
|
|
7
10
|
/**
|
|
8
11
|
* Base class for feature adapters to extend. Defines some methods that
|
|
9
12
|
* subclasses must implement.
|
|
@@ -47,13 +50,22 @@ export class BaseFeatureDataAdapter extends BaseAdapter {
|
|
|
47
50
|
/**
|
|
48
51
|
* Convenience wrapper that collects {@link getFeatures} for a region into an
|
|
49
52
|
* array — the common shape across RPC methods (RenderFeatureData, Manhattan,
|
|
50
|
-
* Wiggle, etc.). Pass `opts` so `statusCallback`/`
|
|
53
|
+
* Wiggle, etc.). Pass `opts` so `statusCallback`/`signal` reach the
|
|
51
54
|
* adapter; omitting them means no download progress and a fetch that can't be
|
|
52
55
|
* interrupted mid-flight.
|
|
53
56
|
*/
|
|
54
57
|
getFeaturesArray(region, opts = {}) {
|
|
55
58
|
return firstValueFrom(this.getFeatures(region, opts).pipe(toArray()));
|
|
56
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* The features overlapping a region as the table a mark's declaration runs
|
|
62
|
+
* over: by default a table over {@link getFeaturesArray}. An adapter that
|
|
63
|
+
* already holds its rows as typed arrays answers a `ColumnTable` over them
|
|
64
|
+
* instead, and makes no object per row.
|
|
65
|
+
*/
|
|
66
|
+
async getFeatureTable(region, opts = {}) {
|
|
67
|
+
return asTable(await this.getFeaturesArray(region, opts));
|
|
68
|
+
}
|
|
57
69
|
/**
|
|
58
70
|
* {@link getFeaturesArray} across multiple regions — collects
|
|
59
71
|
* {@link getFeaturesInMultipleRegions} into an array. The common shape in
|
|
@@ -76,10 +88,7 @@ export class BaseFeatureDataAdapter extends BaseAdapter {
|
|
|
76
88
|
* features over a region, primarily used for quantitative tracks
|
|
77
89
|
*/
|
|
78
90
|
async getRegionQuantitativeStats(region, opts) {
|
|
79
|
-
const feats = this.getFeatures(region,
|
|
80
|
-
...opts,
|
|
81
|
-
statsEstimationMode: true,
|
|
82
|
-
});
|
|
91
|
+
const feats = this.getFeatures(region, opts);
|
|
83
92
|
return scoresToStats(region, feats);
|
|
84
93
|
}
|
|
85
94
|
/**
|
|
@@ -110,6 +119,60 @@ export class BaseFeatureDataAdapter extends BaseAdapter {
|
|
|
110
119
|
async getRegionByteSize(_regions, _opts) {
|
|
111
120
|
return undefined;
|
|
112
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* The bp/px interval over which this adapter answers a fetch from the same
|
|
124
|
+
* zoom level it answers `opts.bpPerPx` from, so a display holding the answer
|
|
125
|
+
* refetches only when the view leaves it. The default, `undefined`, is an
|
|
126
|
+
* answer that does not depend on the zoom, which a display never refetches
|
|
127
|
+
* for a zoom. An adapter that reads `bpPerPx` declares its range here
|
|
128
|
+
* (`BigWigAdapter` from its header's zoom levels).
|
|
129
|
+
*/
|
|
130
|
+
async getZoomRange(_opts) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The interval every value this adapter answers lies in by definition, as a
|
|
135
|
+
* fraction lies in [0, 1], which a value scale's unpinned ends stand at
|
|
136
|
+
* rather than following the loaded data, so the axis reads alike at every
|
|
137
|
+
* locus. The default, `undefined`, is a quantity with no such bounds, whose
|
|
138
|
+
* axis autoscales. `GCContentAdapter` declares [0, 1] for GC content and none
|
|
139
|
+
* for skew.
|
|
140
|
+
*/
|
|
141
|
+
async getValueDomain(_opts) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Features per bin over each region, at the view's `bpPerPx`, for the density
|
|
146
|
+
* tier the display draws where the region-too-large gate refused the
|
|
147
|
+
* features. The default reads the `densityAdapter` sidecar slot
|
|
148
|
+
* (`densityAdapterConfigSchemaFields`) through `getSubAdapter`; `undefined`
|
|
149
|
+
* means no tier, and the banner stands. ADR-102 records why no index
|
|
150
|
+
* estimate stands in for a missing sidecar.
|
|
151
|
+
*/
|
|
152
|
+
async getFeatureDensity(regions, opts) {
|
|
153
|
+
const sidecar = this.getConf(['densityAdapter']);
|
|
154
|
+
const resolved = isSubAdapterConfig(sidecar) && this.getSubAdapter
|
|
155
|
+
? (await this.getSubAdapter(sidecar)).dataAdapter
|
|
156
|
+
: undefined;
|
|
157
|
+
if (resolved && !isFeatureAdapter(resolved)) {
|
|
158
|
+
throw new Error(`densityAdapter ${isSubAdapterConfig(sidecar) ? sidecar.type : ''} is not a feature adapter`);
|
|
159
|
+
}
|
|
160
|
+
return resolved
|
|
161
|
+
? Promise.all(regions.map(async (region) => {
|
|
162
|
+
const features = await resolved.getFeaturesArray(region, opts);
|
|
163
|
+
const starts = new Uint32Array(features.length);
|
|
164
|
+
const ends = new Uint32Array(features.length);
|
|
165
|
+
const scores = new Float32Array(features.length);
|
|
166
|
+
features.forEach((feature, i) => {
|
|
167
|
+
const score = feature.get('score');
|
|
168
|
+
starts[i] = feature.get('start');
|
|
169
|
+
ends[i] = feature.get('end');
|
|
170
|
+
scores[i] = score === undefined ? 0 : score;
|
|
171
|
+
});
|
|
172
|
+
return { starts, ends, scores };
|
|
173
|
+
}))
|
|
174
|
+
: undefined;
|
|
175
|
+
}
|
|
113
176
|
async getSources(regions, opts = {}) {
|
|
114
177
|
const features = await this.getFeaturesInMultipleRegionsArray(regions, opts);
|
|
115
178
|
const sources = new Set();
|