@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
|
@@ -5,75 +5,50 @@
|
|
|
5
5
|
* schema construction, every reader, and the config editor — so "is this a
|
|
6
6
|
* config schema?" and "what kind of entry is this?" have one answer everywhere.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { isRegisteredConfigurationSchema } from './schemaRegistry.js';
|
|
8
|
+
import { asArrayType, asMapType, getType, getUnionSubtypes, isStateTreeNode, isType, isUnionType, } from '@jbrowse/mobx-state-tree';
|
|
9
|
+
import { getConfigurationSchemaMetadata, isRegisteredConfigurationSchema, } from './schemaRegistry.js';
|
|
11
10
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* @returns Array of type names contained in the union
|
|
11
|
+
* The names an explicitly typed union's members answer to, each the name its
|
|
12
|
+
* schema was given, read through whatever wraps the union — a pluggable
|
|
13
|
+
* union's `snapshotProcessor`, a `maybe`, a `types.late`. A member that is
|
|
14
|
+
* itself a union contributes its own; a member with no type of its own throws.
|
|
17
15
|
*/
|
|
18
16
|
export function getTypeNamesFromExplicitlyTypedUnion(maybeUnionType) {
|
|
19
|
-
if (isType(maybeUnionType)) {
|
|
20
|
-
|
|
21
|
-
if (isUnionType(resolved)) {
|
|
22
|
-
const typeNames = [];
|
|
23
|
-
for (const subType of getUnionSubTypes(resolved)) {
|
|
24
|
-
const resolvedSub = resolveLateType(subType);
|
|
25
|
-
// a nested union contributes its own names; otherwise the subtype is a
|
|
26
|
-
// single explicitly-typed schema whose name is its default's `type`
|
|
27
|
-
const nested = getTypeNamesFromExplicitlyTypedUnion(resolvedSub);
|
|
28
|
-
if (nested.length) {
|
|
29
|
-
typeNames.push(...nested);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const typeName = getDefaultValue(resolvedSub).type;
|
|
33
|
-
if (!typeName) {
|
|
34
|
-
throw new Error(`invalid config schema type ${resolvedSub}`);
|
|
35
|
-
}
|
|
36
|
-
typeNames.push(typeName);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return typeNames;
|
|
40
|
-
}
|
|
17
|
+
if (!isType(maybeUnionType) || !isUnionType(maybeUnionType)) {
|
|
18
|
+
return [];
|
|
41
19
|
}
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (isModelType(thing) && isRegisteredConfigurationSchema(thing)) {
|
|
47
|
-
return true;
|
|
20
|
+
return getUnionSubtypes(maybeUnionType).flatMap(member => {
|
|
21
|
+
const meta = getConfigurationSchemaMetadata(member);
|
|
22
|
+
if (meta?.options.explicitlyTyped) {
|
|
23
|
+
return [meta.name];
|
|
48
24
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return true;
|
|
25
|
+
if (isUnionType(member)) {
|
|
26
|
+
return getTypeNamesFromExplicitlyTypedUnion(member);
|
|
52
27
|
}
|
|
53
|
-
|
|
54
|
-
|
|
28
|
+
// the branch a `maybe`-like union adds so the slot can be absent
|
|
29
|
+
if (member.name === 'undefined') {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
throw new Error(`invalid config schema type ${member.name}`);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** The type `ConfigurationSchema()` built, by any handle on it (`schemaRegistry.ts`). */
|
|
36
|
+
export function isBareConfigurationSchemaType(thing) {
|
|
37
|
+
return isType(thing) && isRegisteredConfigurationSchema(thing);
|
|
55
38
|
}
|
|
39
|
+
/** A schema, or a union, array or map of them. */
|
|
56
40
|
export function isConfigurationSchemaType(thing) {
|
|
57
|
-
// written as a series of if-statements instead of a big logical because this
|
|
58
|
-
// construction gives much better debugging backtraces.
|
|
59
|
-
// also, note that the order of these statements matters, because for example
|
|
60
|
-
// some union types are also optional types
|
|
61
41
|
if (!isType(thing)) {
|
|
62
42
|
return false;
|
|
63
43
|
}
|
|
64
|
-
|
|
44
|
+
if (isBareConfigurationSchemaType(thing)) {
|
|
65
45
|
return true;
|
|
66
46
|
}
|
|
67
|
-
|
|
68
|
-
return
|
|
69
|
-
}
|
|
70
|
-
else if ((isOptionalType(thing) || isArrayType(thing) || isMapType(thing)) &&
|
|
71
|
-
isConfigurationSchemaType(getSubType(thing))) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
return false;
|
|
47
|
+
if (isUnionType(thing)) {
|
|
48
|
+
return getUnionSubtypes(thing).every(t => isConfigurationSchemaType(t) || t.name === 'undefined');
|
|
76
49
|
}
|
|
50
|
+
const collection = asArrayType(thing) ?? asMapType(thing);
|
|
51
|
+
return !!collection && isConfigurationSchemaType(collection.getChildType());
|
|
77
52
|
}
|
|
78
53
|
/**
|
|
79
54
|
* A configuration schema definition maps each key to exactly one of three kinds
|
|
@@ -92,3 +67,39 @@ export function isSlotDefinitionEntry(def) {
|
|
|
92
67
|
export function isConfigurationModel(thing) {
|
|
93
68
|
return isStateTreeNode(thing) && isConfigurationSchemaType(getType(thing));
|
|
94
69
|
}
|
|
70
|
+
const NUMBER_SLOT_TYPES = new Set(['number', 'integer', 'maybeNumber']);
|
|
71
|
+
/**
|
|
72
|
+
* The slot a bare value of each form lifts into, off a `shorthand` option:
|
|
73
|
+
* each slot it names takes the form its own type holds, a number where it
|
|
74
|
+
* holds one (`rules: [7.3]`) and a string otherwise (`color: 'red'`), so a
|
|
75
|
+
* width naming `value` and `field` reads `size: 3` as the one and
|
|
76
|
+
* `size: 'score'` as the other.
|
|
77
|
+
*/
|
|
78
|
+
export function shorthandTargetsOf(definition, shorthand) {
|
|
79
|
+
const slots = shorthand === undefined
|
|
80
|
+
? []
|
|
81
|
+
: typeof shorthand === 'string'
|
|
82
|
+
? [shorthand]
|
|
83
|
+
: shorthand;
|
|
84
|
+
return Object.fromEntries(slots.map(slot => {
|
|
85
|
+
const entry = definition[slot];
|
|
86
|
+
return [
|
|
87
|
+
isSlotDefinitionEntry(entry) && NUMBER_SLOT_TYPES.has(entry.type)
|
|
88
|
+
? 'number'
|
|
89
|
+
: 'string',
|
|
90
|
+
slot,
|
|
91
|
+
];
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
/** The shorthand form of a bare value, or undefined for any other value. */
|
|
95
|
+
export function bareFormOf(value) {
|
|
96
|
+
return typeof value === 'string'
|
|
97
|
+
? 'string'
|
|
98
|
+
: typeof value === 'number'
|
|
99
|
+
? 'number'
|
|
100
|
+
: undefined;
|
|
101
|
+
}
|
|
102
|
+
/** {@link shorthandTargetsOf} a registered schema. */
|
|
103
|
+
export function shorthandTargets({ definition, options, }) {
|
|
104
|
+
return shorthandTargetsOf(definition, options.shorthand);
|
|
105
|
+
}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
import type PluginManager from '../PluginManager.ts';
|
|
2
2
|
import type { ConfigSlotDefinition, ConfigSlotType } from './configurationSlot.ts';
|
|
3
3
|
import type { AnyConfigurationModel } from './types.ts';
|
|
4
|
+
import type { IAnyType } from '@jbrowse/mobx-state-tree';
|
|
4
5
|
/**
|
|
5
6
|
* Whether `slotName` on a config node is a slot (vs a nested sub-schema or a
|
|
6
7
|
* string/number constant).
|
|
7
8
|
*/
|
|
8
9
|
export declare function isConfigurationSlot(node: AnyConfigurationModel, slotName: string): boolean;
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* path writes slots one `setSlot` at a time onto an already-created config, so
|
|
15
|
-
* without this a schema's shorthand expansions and legacy-key migrations apply
|
|
16
|
-
* to `config.json` and silently no-op in a session spec, share link, or embed —
|
|
17
|
-
* the surfaces that are supposed to speak the same vocabulary. The hooks are
|
|
18
|
-
* written to normalize whatever subset of keys they're handed, so a partial bag
|
|
19
|
-
* is the same shape they already tolerate.
|
|
11
|
+
* Why a config of type `schema` cannot hold `value` at `key`, or undefined
|
|
12
|
+
* when it can: the schema's own lift first, then the slot's type, or a
|
|
13
|
+
* sub-schema's lift and checks. Also undefined for a key the schema does not
|
|
14
|
+
* declare, which is a question for its caller.
|
|
20
15
|
*/
|
|
21
|
-
export declare function
|
|
16
|
+
export declare function slotValueRefusal(schema: IAnyType, key: string, value: unknown): string | undefined;
|
|
22
17
|
/**
|
|
23
18
|
* The duck-typed object the config editor's leaf components consume. They never
|
|
24
19
|
* touch MST internals — only this shape (see ColorEditor.test.tsx, which passes
|
|
@@ -33,20 +28,9 @@ export interface SlotFacade {
|
|
|
33
28
|
contextVariable: string[];
|
|
34
29
|
defaultValue: unknown;
|
|
35
30
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* `defaultValue` is already the concrete value.
|
|
39
|
-
*
|
|
40
|
-
* Here because a promotable slot's `defaultValue` is always the `undefined`
|
|
41
|
-
* inherit sentinel, so an editor rendering `defaultValue` for an unset slot
|
|
42
|
-
* shows nothing at all — for a `maybeBoolean` that reads as a concrete
|
|
43
|
-
* `false`, which is wrong for every slot whose base is `true`. The editor
|
|
44
|
-
* still cannot see the *session* tier of the cascade (its target is often a
|
|
45
|
-
* detached config node), so this is the honest answer it can give: what unset
|
|
46
|
-
* means with nothing promoted.
|
|
31
|
+
* enum choices, present only for the enum slot types; a `stringEnumArray`'s
|
|
32
|
+
* are the choices of each entry
|
|
47
33
|
*/
|
|
48
|
-
promotedBase?: unknown;
|
|
49
|
-
/** enum choices, present only for `stringEnum`/`maybeStringEnum` slots */
|
|
50
34
|
choices?: string[];
|
|
51
35
|
pluginManager: PluginManager;
|
|
52
36
|
readonly value: unknown;
|
|
@@ -54,17 +38,16 @@ export interface SlotFacade {
|
|
|
54
38
|
* Whether the slot holds a non-default value. Each slot is `stripDefault`-
|
|
55
39
|
* wrapped, so an at-default slot is omitted from the config snapshot — the
|
|
56
40
|
* same signal the persistence/delta layer uses (robust for map/array slots
|
|
57
|
-
* where a live-value `deepEqual` against the plain default would misfire).
|
|
58
|
-
* a promotable slot, "non-default" means customized rather than inheriting.
|
|
41
|
+
* where a live-value `deepEqual` against the plain default would misfire).
|
|
59
42
|
*/
|
|
60
43
|
readonly modified: boolean;
|
|
61
44
|
set: (val: unknown) => void;
|
|
62
45
|
}
|
|
63
46
|
/**
|
|
64
47
|
* The vocabulary an enum slot offers, or undefined for any other slot. Reads the
|
|
65
|
-
* author's own `types.enumeration` off `model` —
|
|
66
|
-
*
|
|
67
|
-
*
|
|
48
|
+
* author's own `types.enumeration` off `model` — the enum types are the only
|
|
49
|
+
* ones the editor takes choices from, so a slot typed anything else renders as
|
|
50
|
+
* free text however valid its `model` is.
|
|
68
51
|
*
|
|
69
52
|
* Shared by the config editor's facade below and by
|
|
70
53
|
* `ConfigSlotDefaults.test.ts`, which snapshots every schema's vocabularies:
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { getSnapshot } from '@jbrowse/mobx-state-tree';
|
|
1
|
+
import { asModelType, getSnapshot } from '@jbrowse/mobx-state-tree';
|
|
2
2
|
import { getEnumerationValues } from '../util/mst-reflection.js';
|
|
3
3
|
import { getEnv } from '../util/mstUtils.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { slotWriteRefusal } from './configurationSlot.js';
|
|
5
|
+
import { setConf } from './getConf.js';
|
|
6
|
+
import { getConfigurationSchemaDefinition, getConfigurationSchemaMetadata, } from './schemaRegistry.js';
|
|
7
|
+
import { isConfigurationSchemaType, isSlotDefinitionEntry, } from './schemaTypes.js';
|
|
8
|
+
import { preProcessSnapshotWith } from './snapshotPreprocess.js';
|
|
6
9
|
/**
|
|
7
10
|
* The slot's metadata entry, or undefined when `slotName` names a nested
|
|
8
11
|
* sub-schema or a string/number constant rather than a slot.
|
|
@@ -19,26 +22,42 @@ export function isConfigurationSlot(node, slotName) {
|
|
|
19
22
|
return !!slotDefinition(node, slotName);
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* path writes slots one `setSlot` at a time onto an already-created config, so
|
|
27
|
-
* without this a schema's shorthand expansions and legacy-key migrations apply
|
|
28
|
-
* to `config.json` and silently no-op in a session spec, share link, or embed —
|
|
29
|
-
* the surfaces that are supposed to speak the same vocabulary. The hooks are
|
|
30
|
-
* written to normalize whatever subset of keys they're handed, so a partial bag
|
|
31
|
-
* is the same shape they already tolerate.
|
|
25
|
+
* Why a config of type `schema` cannot hold `value` at `key`, or undefined
|
|
26
|
+
* when it can: the schema's own lift first, then the slot's type, or a
|
|
27
|
+
* sub-schema's lift and checks. Also undefined for a key the schema does not
|
|
28
|
+
* declare, which is a question for its caller.
|
|
32
29
|
*/
|
|
33
|
-
export function
|
|
34
|
-
const
|
|
35
|
-
|
|
30
|
+
export function slotValueRefusal(schema, key, value) {
|
|
31
|
+
const meta = getConfigurationSchemaMetadata(schema);
|
|
32
|
+
const entry = meta?.definition[key];
|
|
33
|
+
if (!meta || entry === undefined) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const subSchema = isConfigurationSchemaType(entry)
|
|
37
|
+
? entry
|
|
38
|
+
: undefined;
|
|
39
|
+
// the slot's own property type, built once with the schema: what `setSlot`
|
|
40
|
+
// checks a write against
|
|
41
|
+
const slotType = asModelType(schema)?.properties[key];
|
|
42
|
+
try {
|
|
43
|
+
const lifted = preProcessSnapshotWith(meta, { [key]: value })[key];
|
|
44
|
+
if (subSchema) {
|
|
45
|
+
subSchema.create(lifted);
|
|
46
|
+
}
|
|
47
|
+
else if (isSlotDefinitionEntry(entry) && !slotType?.is(lifted)) {
|
|
48
|
+
return slotWriteRefusal(`${meta.name}.${key}`, entry.type, value);
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
return e instanceof Error ? e.message : String(e);
|
|
54
|
+
}
|
|
36
55
|
}
|
|
37
56
|
/**
|
|
38
57
|
* The vocabulary an enum slot offers, or undefined for any other slot. Reads the
|
|
39
|
-
* author's own `types.enumeration` off `model` —
|
|
40
|
-
*
|
|
41
|
-
*
|
|
58
|
+
* author's own `types.enumeration` off `model` — the enum types are the only
|
|
59
|
+
* ones the editor takes choices from, so a slot typed anything else renders as
|
|
60
|
+
* free text however valid its `model` is.
|
|
42
61
|
*
|
|
43
62
|
* Shared by the config editor's facade below and by
|
|
44
63
|
* `ConfigSlotDefaults.test.ts`, which snapshots every schema's vocabularies:
|
|
@@ -47,7 +66,10 @@ export function preProcessSlotValues(node, values) {
|
|
|
47
66
|
*/
|
|
48
67
|
export function slotChoices(def) {
|
|
49
68
|
const { type, model } = def;
|
|
50
|
-
return (type === 'stringEnum' ||
|
|
69
|
+
return (type === 'stringEnum' ||
|
|
70
|
+
type === 'maybeStringEnum' ||
|
|
71
|
+
type === 'stringEnumArray') &&
|
|
72
|
+
model
|
|
51
73
|
? getEnumerationValues(model)
|
|
52
74
|
: undefined;
|
|
53
75
|
}
|
|
@@ -66,14 +88,13 @@ export function getSlotDefinition(node, slotName) {
|
|
|
66
88
|
}
|
|
67
89
|
export function makeSlotFacade(node, slotName) {
|
|
68
90
|
const definition = getSlotDefinition(node, slotName);
|
|
69
|
-
const { type, description = '', defaultValue,
|
|
91
|
+
const { type, description = '', defaultValue, contextVariable = [], } = definition;
|
|
70
92
|
return {
|
|
71
93
|
name: slotName,
|
|
72
94
|
description,
|
|
73
95
|
type,
|
|
74
96
|
contextVariable,
|
|
75
97
|
defaultValue,
|
|
76
|
-
promotedBase,
|
|
77
98
|
choices: slotChoices(definition),
|
|
78
99
|
pluginManager: getEnv(node).pluginManager,
|
|
79
100
|
get value() {
|
|
@@ -83,7 +104,7 @@ export function makeSlotFacade(node, slotName) {
|
|
|
83
104
|
return slotName in getSnapshot(node);
|
|
84
105
|
},
|
|
85
106
|
set(val) {
|
|
86
|
-
node
|
|
107
|
+
setConf(node, slotName, val);
|
|
87
108
|
},
|
|
88
109
|
};
|
|
89
110
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { RetiredSpelling } from './configurationSchema.ts';
|
|
2
|
+
import type { ConfigurationSchemaMetadata } from './schemaRegistry.ts';
|
|
3
|
+
import type { IAnyType } from '@jbrowse/mobx-state-tree';
|
|
4
|
+
export declare function listed(keys: readonly string[]): string;
|
|
5
|
+
/**
|
|
6
|
+
* The snapshot with each spelling `retired` names rewritten: a lift's members
|
|
7
|
+
* take the old key's place, and what the snapshot already spells wins, member
|
|
8
|
+
* by member inside an object, since writing the current name is the stronger
|
|
9
|
+
* statement — so a retired flag lifting into `scales.y` lands beside a
|
|
10
|
+
* `scales.y` the snapshot writes. The old key goes whether or not it carried a
|
|
11
|
+
* value, so a `closed` schema never meets it. Where two retired names lift
|
|
12
|
+
* onto one member — a slot the entry spelt directly and the same slot inside a
|
|
13
|
+
* retired `renderer` — the one declared first wins.
|
|
14
|
+
*/
|
|
15
|
+
export declare function liftRetiredSpellings(schema: ConfigurationSchemaMetadata, snapshot: Record<string, unknown>): Record<string, unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* `liftRetiredSpellings` over a map directly, for a schema whose own
|
|
18
|
+
* `preProcessSnapshot` uncovers a retired name the pass above could not see —
|
|
19
|
+
* one that arrives out of a legacy sub-config rather than off the entry.
|
|
20
|
+
* Applying the same map twice costs nothing, since a lift deletes the name it
|
|
21
|
+
* reads.
|
|
22
|
+
*/
|
|
23
|
+
export declare function applyRetiredSpellings(retired: Record<string, RetiredSpelling>, snapshot: Record<string, unknown>): Record<string, unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* What a schema does to every snapshot on its way in, whichever door it
|
|
26
|
+
* arrives by (`create`, `applySnapshot`, `setSubschema`, a settings bag): a
|
|
27
|
+
* bare string or number lifts into the `shorthand` slot taking its form, beside any
|
|
28
|
+
* `shorthandWith` slots, and `null` into the empty object that clears it; a
|
|
29
|
+
* `null` member reads as unset, except in a frozen-family slot, which stores
|
|
30
|
+
* it; a `retired` spelling becomes the members that replaced it; a `closed`
|
|
31
|
+
* schema refuses a key it does not declare, then the schema's
|
|
32
|
+
* own `preProcessSnapshot` runs, and a `jexl:` callback in a slot declaring no
|
|
33
|
+
* `contextVariable` is refused. A bare value the shorthand does not lift
|
|
34
|
+
* passes through for MST to refuse.
|
|
35
|
+
*/
|
|
36
|
+
export declare function preProcessSnapshotWith(schema: ConfigurationSchemaMetadata, snapshot: unknown): Record<string, unknown>;
|
|
37
|
+
/**
|
|
38
|
+
* #api core/configuration
|
|
39
|
+
* A snapshot as `type` admits it: the same lift and checks `type.create`
|
|
40
|
+
* applies, so a dialog or a validator refuses exactly what a config file
|
|
41
|
+
* cannot hold. Throws what the schema's `preProcessSnapshot` throws.
|
|
42
|
+
*/
|
|
43
|
+
export declare function preProcessConfigSnapshot(type: IAnyType, snapshot: unknown): Record<string, unknown>;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { isJexl } from '../util/jexlStrings.js';
|
|
2
|
+
import { slotWriteRefusal } from './configurationSlot.js';
|
|
3
|
+
import { getConfigurationSchemaMetadata } from './schemaRegistry.js';
|
|
4
|
+
import { bareFormOf, isConstantEntry, shorthandTargets } from './schemaTypes.js';
|
|
5
|
+
// the keys a config file may annotate any object with, as the JSON schema's
|
|
6
|
+
// `patternProperties` admits them
|
|
7
|
+
const COMMENT_KEY = /^_+comment/;
|
|
8
|
+
export function listed(keys) {
|
|
9
|
+
return keys.length > 1
|
|
10
|
+
? `${keys.slice(0, -1).join(', ')} and ${keys.at(-1)}`
|
|
11
|
+
: (keys[0] ?? 'nothing');
|
|
12
|
+
}
|
|
13
|
+
function refuseUndeclaredKeys({ name, definition, options }, snapshot) {
|
|
14
|
+
const id = options.explicitIdentifier;
|
|
15
|
+
const declared = [
|
|
16
|
+
...Object.keys(definition).filter(key => !isConstantEntry(definition[key])),
|
|
17
|
+
...(options.explicitlyTyped ? ['type'] : []),
|
|
18
|
+
...(id ? [id] : []),
|
|
19
|
+
];
|
|
20
|
+
const unknown = typeof snapshot === 'string'
|
|
21
|
+
? [JSON.stringify(snapshot)]
|
|
22
|
+
: Object.keys(snapshot ?? {}).filter(key => !declared.includes(key) && !COMMENT_KEY.test(key));
|
|
23
|
+
if (unknown.length > 0) {
|
|
24
|
+
throw new Error(`${name} takes ${listed(declared)}, not ${unknown.join(', ')}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Checked here as well as by each slot's MST type because this runs on every
|
|
28
|
+
// create, where MST's own check is off in a build that has not enabled it
|
|
29
|
+
function refuseCallbacks({ name, takesNoCallback }, snapshot) {
|
|
30
|
+
if (typeof snapshot === 'object' && snapshot !== null) {
|
|
31
|
+
for (const key in snapshot) {
|
|
32
|
+
const type = takesNoCallback.get(key);
|
|
33
|
+
const value = snapshot[key];
|
|
34
|
+
if (type !== undefined && isJexl(value)) {
|
|
35
|
+
throw new Error(slotWriteRefusal(`${name}.${key}`, type, value));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// ADR-146's reset, on the snapshot path: the member keeps its key, so a
|
|
41
|
+
// settings bag still resets it, and `create` reads `undefined` as the default
|
|
42
|
+
function nullMembersAsUnset(snapshot, storesNull) {
|
|
43
|
+
let out = snapshot;
|
|
44
|
+
for (const key in snapshot) {
|
|
45
|
+
if (snapshot[key] === null && !storesNull.has(key)) {
|
|
46
|
+
out = out === snapshot ? { ...snapshot } : out;
|
|
47
|
+
out[key] = undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A schema reads its own entry alone. A `displays` union runs every member's
|
|
54
|
+
* preprocessor over every entry while it works out which display an entry is,
|
|
55
|
+
* so an entry naming another type is left as it was, and one naming no type is
|
|
56
|
+
* a bag headed here.
|
|
57
|
+
*/
|
|
58
|
+
function isOwnSnapshot({ name, options }, snapshot) {
|
|
59
|
+
return (!options.explicitlyTyped ||
|
|
60
|
+
snapshot.type === undefined ||
|
|
61
|
+
snapshot.type === name);
|
|
62
|
+
}
|
|
63
|
+
function isPlainObject(value) {
|
|
64
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
65
|
+
}
|
|
66
|
+
// `lifted` under `written`: what the snapshot spells wins, member by member
|
|
67
|
+
// where both are objects.
|
|
68
|
+
function underWritten(written, lifted) {
|
|
69
|
+
if (written === undefined) {
|
|
70
|
+
return lifted;
|
|
71
|
+
}
|
|
72
|
+
if (isPlainObject(written) && isPlainObject(lifted)) {
|
|
73
|
+
const out = { ...written };
|
|
74
|
+
for (const [key, value] of Object.entries(lifted)) {
|
|
75
|
+
out[key] = underWritten(written[key], value);
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
return written;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The snapshot with each spelling `retired` names rewritten: a lift's members
|
|
83
|
+
* take the old key's place, and what the snapshot already spells wins, member
|
|
84
|
+
* by member inside an object, since writing the current name is the stronger
|
|
85
|
+
* statement — so a retired flag lifting into `scales.y` lands beside a
|
|
86
|
+
* `scales.y` the snapshot writes. The old key goes whether or not it carried a
|
|
87
|
+
* value, so a `closed` schema never meets it. Where two retired names lift
|
|
88
|
+
* onto one member — a slot the entry spelt directly and the same slot inside a
|
|
89
|
+
* retired `renderer` — the one declared first wins.
|
|
90
|
+
*/
|
|
91
|
+
export function liftRetiredSpellings(schema, snapshot) {
|
|
92
|
+
const { retired } = schema.options;
|
|
93
|
+
return retired && isOwnSnapshot(schema, snapshot)
|
|
94
|
+
? applyRetiredSpellings(retired, snapshot)
|
|
95
|
+
: snapshot;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* `liftRetiredSpellings` over a map directly, for a schema whose own
|
|
99
|
+
* `preProcessSnapshot` uncovers a retired name the pass above could not see —
|
|
100
|
+
* one that arrives out of a legacy sub-config rather than off the entry.
|
|
101
|
+
* Applying the same map twice costs nothing, since a lift deletes the name it
|
|
102
|
+
* reads.
|
|
103
|
+
*/
|
|
104
|
+
export function applyRetiredSpellings(retired, snapshot) {
|
|
105
|
+
const present = Object.keys(retired).filter(key => key in snapshot);
|
|
106
|
+
if (present.length === 0) {
|
|
107
|
+
return snapshot;
|
|
108
|
+
}
|
|
109
|
+
const out = { ...snapshot };
|
|
110
|
+
for (const key of present) {
|
|
111
|
+
delete out[key];
|
|
112
|
+
}
|
|
113
|
+
for (const key of present.filter(key => snapshot[key] !== undefined)) {
|
|
114
|
+
const lifted = retired[key](snapshot[key]);
|
|
115
|
+
for (const [name, value] of Object.entries(lifted)) {
|
|
116
|
+
out[name] = underWritten(out[name], value);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* What a schema does to every snapshot on its way in, whichever door it
|
|
123
|
+
* arrives by (`create`, `applySnapshot`, `setSubschema`, a settings bag): a
|
|
124
|
+
* bare string or number lifts into the `shorthand` slot taking its form, beside any
|
|
125
|
+
* `shorthandWith` slots, and `null` into the empty object that clears it; a
|
|
126
|
+
* `null` member reads as unset, except in a frozen-family slot, which stores
|
|
127
|
+
* it; a `retired` spelling becomes the members that replaced it; a `closed`
|
|
128
|
+
* schema refuses a key it does not declare, then the schema's
|
|
129
|
+
* own `preProcessSnapshot` runs, and a `jexl:` callback in a slot declaring no
|
|
130
|
+
* `contextVariable` is refused. A bare value the shorthand does not lift
|
|
131
|
+
* passes through for MST to refuse.
|
|
132
|
+
*/
|
|
133
|
+
export function preProcessSnapshotWith(schema, snapshot) {
|
|
134
|
+
const { shorthandWith, closed, preProcessSnapshot } = schema.options;
|
|
135
|
+
const form = bareFormOf(snapshot);
|
|
136
|
+
const target = form && shorthandTargets(schema)[form];
|
|
137
|
+
const lifted = snapshot === null
|
|
138
|
+
? {}
|
|
139
|
+
: target !== undefined
|
|
140
|
+
? { ...shorthandWith, [target]: snapshot }
|
|
141
|
+
: nullMembersAsUnset(snapshot, schema.storesNull);
|
|
142
|
+
const named = liftRetiredSpellings(schema, lifted);
|
|
143
|
+
if (closed) {
|
|
144
|
+
refuseUndeclaredKeys(schema, named);
|
|
145
|
+
}
|
|
146
|
+
const processed = preProcessSnapshot ? preProcessSnapshot(named) : named;
|
|
147
|
+
refuseCallbacks(schema, processed);
|
|
148
|
+
return processed;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* #api core/configuration
|
|
152
|
+
* A snapshot as `type` admits it: the same lift and checks `type.create`
|
|
153
|
+
* applies, so a dialog or a validator refuses exactly what a config file
|
|
154
|
+
* cannot hold. Throws what the schema's `preProcessSnapshot` throws.
|
|
155
|
+
*/
|
|
156
|
+
export function preProcessConfigSnapshot(type, snapshot) {
|
|
157
|
+
const schema = getConfigurationSchemaMetadata(type);
|
|
158
|
+
return schema
|
|
159
|
+
? preProcessSnapshotWith(schema, snapshot)
|
|
160
|
+
: snapshot;
|
|
161
|
+
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* two slots in the opposite order
|
|
15
15
|
* - `PairwiseIndexedPAFAdapter`'s prose said `<file>.pif.gz.tbi` while its
|
|
16
16
|
* default said `my.paf.gz.tbi`
|
|
17
|
-
* - `PlinkLDTabixAdapter` dropped the
|
|
17
|
+
* - `PlinkLDTabixAdapter`'s description dropped a clause the other eight carried
|
|
18
18
|
* - the placeholder extensions disagreed with each other for no reason
|
|
19
19
|
*
|
|
20
20
|
* The description is written for every tabix adapter rather than naming one
|
|
@@ -24,14 +24,15 @@
|
|
|
24
24
|
*
|
|
25
25
|
* **BAM is deliberately not here.** Its index is BAI/CSI rather than TBI/CSI, so
|
|
26
26
|
* it is a different enumeration with a different default, and folding the two
|
|
27
|
-
* would mean a slot whose vocabulary depends on its adapter.
|
|
27
|
+
* would mean a slot whose vocabulary depends on its adapter. `bamIndexFields`
|
|
28
|
+
* is the same pair over that enumeration, and the two share `fillIndexType`.
|
|
28
29
|
*/
|
|
29
30
|
export declare const tabixIndexFields: {
|
|
30
31
|
readonly indexType: {
|
|
31
32
|
readonly model: import("@jbrowse/mobx-state-tree").ISimpleType<"CSI" | "TBI">;
|
|
32
33
|
readonly type: 'stringEnum';
|
|
33
34
|
readonly defaultValue: 'TBI';
|
|
34
|
-
readonly description: '`TBI` is the usual `tabix` output. `CSI` is required for a reference longer than 512 Mb, which TBI cannot address.';
|
|
35
|
+
readonly description: '`TBI` is the usual `tabix` output. `CSI` is required for a reference longer than 512 Mb, which TBI cannot address. Derived from the index file name where the config names a `.csi` and leaves this unset.';
|
|
35
36
|
};
|
|
36
37
|
readonly location: {
|
|
37
38
|
readonly type: 'fileLocation';
|
|
@@ -39,6 +40,31 @@ export declare const tabixIndexFields: {
|
|
|
39
40
|
readonly uri: '/path/to/my.gz.tbi';
|
|
40
41
|
readonly locationType: 'UriLocation';
|
|
41
42
|
};
|
|
42
|
-
readonly description: 'location of the tabix index. Only needed when it is not named `<file>.tbi`
|
|
43
|
+
readonly description: 'location of the tabix index. Only needed when it is not named `<file>.tbi`, which is what the `uri` shorthand assumes — a `.csi` beside the file is reached with `csi: true` rather than by spelling this out.';
|
|
43
44
|
};
|
|
44
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* #config TabixIndex
|
|
48
|
+
* #category adapter
|
|
49
|
+
* The `index` every tabix-indexed adapter hangs off itself: where the index is,
|
|
50
|
+
* and which of the two kinds it is. `indexType` is derived from the index file's
|
|
51
|
+
* own name where the config names a `.csi` and leaves it unset, so the usual
|
|
52
|
+
* config states neither — the `uri` shorthand derives both, and `csi: true`
|
|
53
|
+
* beside it switches the pair together. Spell `location` out for an index that
|
|
54
|
+
* does not sit beside its data file; a `.csi` named there is read as a CSI
|
|
55
|
+
* without `indexType` as well.
|
|
56
|
+
*/
|
|
57
|
+
export declare function tabixIndexSchema(): import("./configurationSchema.ts").ConfigurationSchemaType<{
|
|
58
|
+
readonly indexType: {
|
|
59
|
+
type: "stringEnum";
|
|
60
|
+
} & {
|
|
61
|
+
model: import("@jbrowse/mobx-state-tree").ISimpleType<"CSI" | "TBI">;
|
|
62
|
+
} & {
|
|
63
|
+
defaultValue: string;
|
|
64
|
+
};
|
|
65
|
+
readonly location: {
|
|
66
|
+
type: "fileLocation";
|
|
67
|
+
} & {
|
|
68
|
+
defaultValue: unknown;
|
|
69
|
+
};
|
|
70
|
+
}, import("./configurationSchema.ts").ConfigurationSchemaOptions<undefined, undefined, undefined, import("./requirements.ts").ConfigurationSchemaRequirement<Partial<Record<string, string[]>>, string>, any>>;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { types } from '@jbrowse/mobx-state-tree';
|
|
2
|
+
import { ConfigurationSchema } from './configurationSchema.js';
|
|
3
|
+
import { fillIndexType } from './indexType.js';
|
|
2
4
|
/**
|
|
3
5
|
* The `index` sub-schema every tabix-indexed adapter declares: which index kind,
|
|
4
6
|
* and where it is.
|
|
@@ -15,7 +17,7 @@ import { types } from '@jbrowse/mobx-state-tree';
|
|
|
15
17
|
* two slots in the opposite order
|
|
16
18
|
* - `PairwiseIndexedPAFAdapter`'s prose said `<file>.pif.gz.tbi` while its
|
|
17
19
|
* default said `my.paf.gz.tbi`
|
|
18
|
-
* - `PlinkLDTabixAdapter` dropped the
|
|
20
|
+
* - `PlinkLDTabixAdapter`'s description dropped a clause the other eight carried
|
|
19
21
|
* - the placeholder extensions disagreed with each other for no reason
|
|
20
22
|
*
|
|
21
23
|
* The description is written for every tabix adapter rather than naming one
|
|
@@ -25,14 +27,15 @@ import { types } from '@jbrowse/mobx-state-tree';
|
|
|
25
27
|
*
|
|
26
28
|
* **BAM is deliberately not here.** Its index is BAI/CSI rather than TBI/CSI, so
|
|
27
29
|
* it is a different enumeration with a different default, and folding the two
|
|
28
|
-
* would mean a slot whose vocabulary depends on its adapter.
|
|
30
|
+
* would mean a slot whose vocabulary depends on its adapter. `bamIndexFields`
|
|
31
|
+
* is the same pair over that enumeration, and the two share `fillIndexType`.
|
|
29
32
|
*/
|
|
30
33
|
export const tabixIndexFields = {
|
|
31
34
|
indexType: {
|
|
32
35
|
model: types.enumeration('IndexType', ['TBI', 'CSI']),
|
|
33
36
|
type: 'stringEnum',
|
|
34
37
|
defaultValue: 'TBI',
|
|
35
|
-
description: '`TBI` is the usual `tabix` output. `CSI` is required for a reference longer than 512 Mb, which TBI cannot address.',
|
|
38
|
+
description: '`TBI` is the usual `tabix` output. `CSI` is required for a reference longer than 512 Mb, which TBI cannot address. Derived from the index file name where the config names a `.csi` and leaves this unset.',
|
|
36
39
|
},
|
|
37
40
|
location: {
|
|
38
41
|
type: 'fileLocation',
|
|
@@ -40,6 +43,20 @@ export const tabixIndexFields = {
|
|
|
40
43
|
uri: '/path/to/my.gz.tbi',
|
|
41
44
|
locationType: 'UriLocation',
|
|
42
45
|
},
|
|
43
|
-
description: 'location of the tabix index. Only needed when it is not named `<file>.tbi`
|
|
46
|
+
description: 'location of the tabix index. Only needed when it is not named `<file>.tbi`, which is what the `uri` shorthand assumes — a `.csi` beside the file is reached with `csi: true` rather than by spelling this out.',
|
|
44
47
|
},
|
|
45
48
|
};
|
|
49
|
+
/**
|
|
50
|
+
* #config TabixIndex
|
|
51
|
+
* #category adapter
|
|
52
|
+
* The `index` every tabix-indexed adapter hangs off itself: where the index is,
|
|
53
|
+
* and which of the two kinds it is. `indexType` is derived from the index file's
|
|
54
|
+
* own name where the config names a `.csi` and leaves it unset, so the usual
|
|
55
|
+
* config states neither — the `uri` shorthand derives both, and `csi: true`
|
|
56
|
+
* beside it switches the pair together. Spell `location` out for an index that
|
|
57
|
+
* does not sit beside its data file; a `.csi` named there is read as a CSI
|
|
58
|
+
* without `indexType` as well.
|
|
59
|
+
*/
|
|
60
|
+
export function tabixIndexSchema() {
|
|
61
|
+
return ConfigurationSchema('TabixIndex', { ...tabixIndexFields }, { preProcessSnapshot: fillIndexType });
|
|
62
|
+
}
|