@jbrowse/core 5.0.0-beta.1 → 5.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1709 -390
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +5 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +3 -5
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +34 -29
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BaseCard.js +1 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +37 -14
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.d.ts +1 -1
- package/esm/BaseFeatureWidget/BaseFeatureDetail/CoreDetails.js +15 -31
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.d.ts +4 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails.js +12 -25
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.d.ts +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FeatureDetailsFrame.js +11 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.d.ts +8 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/FieldActionsButton.js +24 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Formatter.js +6 -4
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.d.ts +4 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/ParentFeatureLine.js +17 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +3 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +5 -3
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.d.ts +6 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/index.js +7 -18
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.d.ts +16 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/jexlFilterActions.js +49 -0
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/util.js +6 -29
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceContents.js +7 -34
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.d.ts +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/SequenceName.js +2 -2
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/dialogs/TranscriptSelector.js +3 -1
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.d.ts +12 -0
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/model.js +12 -5
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/useSequenceData.js +8 -5
- package/esm/BaseFeatureWidget/configSchema.d.ts +1 -1
- package/esm/BaseFeatureWidget/formatDetails.d.ts +13 -29
- package/esm/BaseFeatureWidget/formatDetails.js +62 -83
- package/esm/BaseFeatureWidget/index.d.ts +2 -1
- package/esm/BaseFeatureWidget/stateModelFactory.d.ts +42 -29
- package/esm/BaseFeatureWidget/stateModelFactory.js +98 -98
- package/esm/BaseFeatureWidget/types.d.ts +12 -6
- package/esm/BaseFeatureWidget/util.d.ts +0 -10
- package/esm/BaseFeatureWidget/util.js +0 -17
- package/esm/CorePlugin.js +34 -3
- package/esm/PluginLoader.d.ts +24 -13
- package/esm/PluginLoader.js +167 -51
- package/esm/PluginManager.d.ts +130 -24
- package/esm/PluginManager.js +180 -32
- package/esm/ReExports/MuiDataGridReExports.d.ts +1 -0
- package/esm/ReExports/MuiDataGridReExports.js +2 -2
- package/esm/ReExports/coreModules.generated.d.ts +2 -0
- package/esm/ReExports/coreModules.generated.js +530 -0
- package/esm/ReExports/coreWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/coreWorkerModules.generated.js +490 -0
- package/esm/ReExports/frameworkModules.d.ts +2 -0
- package/esm/ReExports/frameworkModules.js +68 -0
- package/esm/ReExports/frameworkShared.d.ts +12 -0
- package/esm/ReExports/frameworkShared.js +16 -0
- package/esm/ReExports/frameworkWorkerModules.generated.d.ts +2 -0
- package/esm/ReExports/frameworkWorkerModules.generated.js +130 -0
- package/esm/ReExports/list.js +528 -79
- package/esm/ReExports/modules.d.ts +1 -1
- package/esm/ReExports/modules.js +10 -165
- package/esm/ReExports/registry.d.ts +1 -0
- package/esm/ReExports/registry.js +23 -5
- package/esm/ReExports/uiStub.d.ts +3 -0
- package/esm/ReExports/uiStub.js +33 -0
- package/esm/ReExports/workerModules.d.ts +2 -0
- package/esm/ReExports/workerModules.js +11 -0
- package/esm/TextSearch/TextSearchManager.d.ts +27 -13
- package/esm/TextSearch/TextSearchManager.js +77 -36
- package/esm/TextSearch/places.d.ts +12 -0
- package/esm/TextSearch/places.js +94 -0
- package/esm/assemblyManager/assembly.d.ts +21 -19
- package/esm/assemblyManager/assembly.js +28 -26
- package/esm/assemblyManager/assemblyAdapters.d.ts +1 -1
- package/esm/assemblyManager/assemblyAdapters.js +8 -2
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +31 -90
- package/esm/assemblyManager/assemblyConfigSchema.js +35 -47
- package/esm/assemblyManager/assemblyManager.d.ts +35 -180
- package/esm/assemblyManager/assemblyManager.js +47 -51
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +25 -18
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +78 -49
- package/esm/assemblyManager/geneticCodes.js +2 -5
- package/esm/assemblyManager/getSequenceAdapterConfig.d.ts +10 -0
- package/esm/assemblyManager/getSequenceAdapterConfig.js +10 -0
- package/esm/assemblyManager/indexAssemblyNames.d.ts +9 -0
- package/esm/assemblyManager/indexAssemblyNames.js +22 -0
- package/esm/assemblyManager/loadRefNameMap.d.ts +1 -1
- package/esm/assemblyManager/loadRefNameMap.js +4 -9
- package/esm/assemblyManager/refNameMapKey.d.ts +7 -0
- package/esm/assemblyManager/refNameMapKey.js +12 -0
- package/esm/checkPlugins.d.ts +2 -0
- package/esm/checkPlugins.js +38 -17
- package/esm/configuration/bamIndexFields.d.ts +49 -0
- package/esm/configuration/bamIndexFields.js +41 -0
- package/esm/configuration/configurationSchema.d.ts +101 -71
- package/esm/configuration/configurationSchema.js +207 -134
- package/esm/configuration/configurationSchemaUnion.d.ts +39 -0
- package/esm/configuration/configurationSchemaUnion.js +56 -0
- package/esm/configuration/configurationSlot.d.ts +150 -60
- package/esm/configuration/configurationSlot.js +103 -75
- package/esm/configuration/fillLocations.d.ts +14 -0
- package/esm/configuration/fillLocations.js +14 -0
- package/esm/configuration/formatAboutConfigSchema.d.ts +7 -21
- package/esm/configuration/formatDetailsConfigSchema.d.ts +11 -37
- package/esm/configuration/formatDetailsConfigSchema.js +10 -13
- package/esm/configuration/fullConfSnapshot.d.ts +4 -19
- package/esm/configuration/fullConfSnapshot.js +30 -52
- package/esm/configuration/getConf.d.ts +45 -41
- package/esm/configuration/getConf.js +111 -44
- package/esm/configuration/index.d.ts +26 -11
- package/esm/configuration/index.js +16 -7
- package/esm/configuration/indexType.d.ts +26 -0
- package/esm/configuration/indexType.js +38 -0
- package/esm/configuration/mergeFormatCallbacks.d.ts +6 -7
- package/esm/configuration/mergeFormatCallbacks.js +13 -10
- package/esm/configuration/plot.d.ts +61 -0
- package/esm/configuration/plot.js +142 -0
- package/esm/configuration/readConfObject.d.ts +2 -24
- package/esm/configuration/readConfObject.js +20 -63
- package/esm/configuration/requirements.d.ts +37 -0
- package/esm/configuration/requirements.js +88 -0
- package/esm/configuration/schemaRegistry.d.ts +32 -15
- package/esm/configuration/schemaRegistry.js +33 -35
- package/esm/configuration/schemaTypes.d.ts +21 -5
- package/esm/configuration/schemaTypes.js +66 -55
- package/esm/configuration/slotFacade.d.ts +12 -29
- package/esm/configuration/slotFacade.js +44 -23
- package/esm/configuration/snapshotPreprocess.d.ts +43 -0
- package/esm/configuration/snapshotPreprocess.js +161 -0
- package/esm/configuration/tabixIndexFields.d.ts +30 -4
- package/esm/configuration/tabixIndexFields.js +21 -4
- package/esm/configuration/tabixShorthand.d.ts +34 -17
- package/esm/configuration/tabixShorthand.js +49 -22
- package/esm/configuration/types.d.ts +182 -43
- package/esm/configuration/uriShorthand.d.ts +9 -0
- package/esm/configuration/uriShorthand.js +16 -0
- package/esm/data_adapters/BaseAdapter/BaseAdapter.d.ts +13 -19
- package/esm/data_adapters/BaseAdapter/BaseAdapter.js +12 -19
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +40 -2
- package/esm/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +68 -5
- package/esm/data_adapters/BaseAdapter/featureDensity.d.ts +40 -0
- package/esm/data_adapters/BaseAdapter/featureDensity.js +31 -0
- package/esm/data_adapters/BaseAdapter/index.d.ts +23 -3
- package/esm/data_adapters/BaseAdapter/index.js +1 -0
- package/esm/data_adapters/BaseAdapter/rowSources.d.ts +37 -0
- package/esm/data_adapters/BaseAdapter/rowSources.js +7 -0
- package/esm/data_adapters/BaseAdapter/stats.d.ts +33 -1
- package/esm/data_adapters/BaseAdapter/stats.js +52 -13
- package/esm/data_adapters/BaseAdapter/types.d.ts +8 -12
- package/esm/data_adapters/BaseAdapter/zoomRange.d.ts +10 -0
- package/esm/data_adapters/CytobandAdapter/CytobandAdapter.js +1 -1
- package/esm/data_adapters/CytobandAdapter/configSchema.d.ts +7 -11
- package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -17
- package/esm/data_adapters/dataAdapterCache.d.ts +19 -2
- package/esm/data_adapters/dataAdapterCache.js +44 -10
- package/esm/data_adapters/getFeatureAdapter.d.ts +6 -4
- package/esm/data_adapters/getFeatureAdapter.js +8 -8
- package/esm/data_adapters/getSequenceSubAdapter.d.ts +7 -9
- package/esm/data_adapters/getSequenceSubAdapter.js +8 -10
- package/esm/pluggableElementTypes/AdapterType.d.ts +8 -8
- package/esm/pluggableElementTypes/AdapterType.js +1 -1
- package/esm/pluggableElementTypes/DisplayType.d.ts +53 -16
- package/esm/pluggableElementTypes/DisplayType.js +28 -12
- package/esm/pluggableElementTypes/LazyStateModelElement.d.ts +32 -0
- package/esm/pluggableElementTypes/LazyStateModelElement.js +77 -0
- package/esm/pluggableElementTypes/PluggableElementBase.d.ts +3 -5
- package/esm/pluggableElementTypes/PluggableElementBase.js +3 -5
- package/esm/pluggableElementTypes/RpcMethodType.d.ts +11 -1
- package/esm/pluggableElementTypes/RpcMethodType.js +25 -9
- package/esm/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +1 -2
- package/esm/pluggableElementTypes/TextSearchAdapterType.d.ts +7 -7
- package/esm/pluggableElementTypes/ViewType.d.ts +20 -4
- package/esm/pluggableElementTypes/ViewType.js +32 -4
- package/esm/pluggableElementTypes/WidgetType.d.ts +6 -0
- package/esm/pluggableElementTypes/WidgetType.js +6 -0
- package/esm/pluggableElementTypes/addMenuItems.d.ts +3 -2
- package/esm/pluggableElementTypes/extendElementType.d.ts +1 -2
- package/esm/pluggableElementTypes/extendElementType.js +9 -5
- package/esm/pluggableElementTypes/index.d.ts +2 -1
- package/esm/pluggableElementTypes/index.js +2 -9
- package/esm/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +19 -9
- package/esm/pluggableElementTypes/models/BaseDisplayModel.d.ts +122 -28
- package/esm/pluggableElementTypes/models/BaseDisplayModel.js +155 -11
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +65 -16
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +179 -117
- package/esm/pluggableElementTypes/models/BaseViewModel.d.ts +87 -18
- package/esm/pluggableElementTypes/models/BaseViewModel.js +54 -11
- package/esm/pluggableElementTypes/models/InternetAccountModel.d.ts +26 -16
- package/esm/pluggableElementTypes/models/assertDisplayContract.d.ts +15 -11
- package/esm/pluggableElementTypes/models/assertDisplayContract.js +25 -32
- package/esm/pluggableElementTypes/models/baseConnectionConfig.d.ts +22 -18
- package/esm/pluggableElementTypes/models/baseConnectionConfig.js +5 -5
- package/esm/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +26 -31
- package/esm/pluggableElementTypes/models/baseTrackConfig.d.ts +108 -147
- package/esm/pluggableElementTypes/models/baseTrackConfig.js +96 -73
- package/esm/pluggableElementTypes/models/components/SaveTrackData.js +4 -6
- package/esm/pluggableElementTypes/models/components/fetchTrackData.d.ts +3 -4
- package/esm/pluggableElementTypes/models/components/fetchTrackData.js +3 -3
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.d.ts +23 -13
- package/esm/pluggableElementTypes/models/expandTrackConfigShorthand.js +80 -48
- package/esm/pluggableElementTypes/models/index.d.ts +2 -3
- package/esm/pluggableElementTypes/models/index.js +2 -3
- package/esm/pluggableElementTypes/models/migrateTrackConfig.d.ts +15 -1
- package/esm/pluggableElementTypes/models/migrateTrackConfig.js +85 -25
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.d.ts +4 -3
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/genbank.js +141 -19
- package/esm/pluggableElementTypes/models/saveTrackFileTypes/types.d.ts +3 -3
- package/esm/pluginDefinitions.d.ts +34 -7
- package/esm/pluginDefinitions.js +54 -20
- package/esm/rpc/BaseRpcDriver.d.ts +2 -2
- package/esm/rpc/BaseRpcDriver.js +25 -30
- package/esm/rpc/MainThreadRpcDriver.d.ts +2 -2
- package/esm/rpc/MainThreadRpcDriver.js +13 -8
- package/esm/rpc/RpcClient.d.ts +18 -6
- package/esm/rpc/RpcClient.js +51 -16
- package/esm/rpc/RpcManager.d.ts +14 -10
- package/esm/rpc/RpcManager.js +11 -1
- package/esm/rpc/RpcRegistry.d.ts +40 -7
- package/esm/rpc/RpcServer.d.ts +3 -1
- package/esm/rpc/RpcServer.js +19 -12
- package/esm/rpc/WebWorkerRpcDriver.d.ts +11 -4
- package/esm/rpc/WebWorkerRpcDriver.js +64 -68
- package/esm/rpc/byteBudget.d.ts +20 -5
- package/esm/rpc/byteBudget.js +16 -5
- package/esm/rpc/configSchema.d.ts +7 -21
- package/esm/rpc/coreRpcMethods.d.ts +4 -0
- package/esm/rpc/coreRpcMethods.js +4 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.d.ts +13 -0
- package/esm/rpc/methods/CoreGetEncodedFeature.js +32 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.d.ts +16 -0
- package/esm/rpc/methods/CoreGetEncodedLayers.js +59 -0
- package/esm/rpc/methods/CoreGetExportData.js +3 -4
- package/esm/rpc/methods/CoreGetFeatureDensity.d.ts +11 -0
- package/esm/rpc/methods/CoreGetFeatureDensity.js +22 -0
- package/esm/rpc/methods/CoreGetFeatures.js +3 -5
- package/esm/rpc/methods/CoreGetRefNames.js +2 -12
- package/esm/rpc/methods/CoreGetRegionByteEstimate.js +1 -1
- package/esm/rpc/methods/CoreGetSequence.js +2 -2
- package/esm/rpc/methods/CoreLoadAdapterCode.d.ts +13 -0
- package/esm/rpc/methods/CoreLoadAdapterCode.js +16 -0
- package/esm/rpc/methods/layerFeatures.d.ts +33 -0
- package/esm/rpc/methods/layerFeatures.js +29 -0
- package/esm/svg/SvgExport.js +6 -7
- package/esm/svg/SvgThemeProviders.d.ts +12 -0
- package/esm/svg/SvgThemeProviders.js +15 -0
- package/esm/svg/exportViewSvg.d.ts +28 -0
- package/esm/svg/exportViewSvg.js +13 -0
- package/esm/svg/normalizeSvgMarkup.d.ts +7 -0
- package/esm/svg/normalizeSvgMarkup.js +99 -0
- package/esm/svg/serializeSvg.d.ts +7 -0
- package/esm/svg/serializeSvg.js +11 -0
- package/esm/svg/svgId.d.ts +1 -1
- package/esm/svg/svgId.js +1 -1
- package/esm/svg/svgReady.d.ts +9 -7
- package/esm/svg/svgReady.js +8 -7
- package/esm/svg/trackNames.d.ts +7 -5
- package/esm/svg/trackNames.js +12 -9
- package/esm/svg/wrapSvgExport.js +6 -74
- package/esm/ui/AddCustomPluginDialog.js +3 -8
- package/esm/ui/AppReadyMarker.d.ts +45 -0
- package/esm/ui/AppReadyMarker.js +89 -0
- package/esm/ui/BaseExportSvgDialog.d.ts +1 -1
- package/esm/ui/CascadingMenu.js +181 -104
- package/esm/ui/DropDownMenu.js +2 -1
- package/esm/ui/ErrorBanner.js +1 -1
- package/esm/ui/ErrorBoundary.d.ts +2 -2
- package/esm/ui/ErrorMessageStackTraceContents.js +2 -1
- package/esm/ui/ErrorMessageStackTraceDialog.js +5 -11
- package/esm/ui/ExportSvgDialog.d.ts +1 -1
- package/esm/ui/FileDropZone.js +2 -1
- package/esm/ui/FileSelector/useInternetAccounts.d.ts +156 -96
- package/esm/ui/HoverMenu.d.ts +1 -2
- package/esm/ui/HoverMenu.js +6 -3
- package/esm/ui/JexlFilterDialog.d.ts +13 -10
- package/esm/ui/JexlFilterDialog.js +122 -50
- package/esm/ui/JexlFilterRowEditors.d.ts +15 -0
- package/esm/ui/JexlFilterRowEditors.js +90 -0
- package/esm/ui/LazyBaseTooltip.d.ts +4 -0
- package/esm/ui/LazyBaseTooltip.js +9 -0
- package/esm/ui/LegendSwatchGlyph.js +26 -21
- package/esm/ui/LoadingOverlay.d.ts +14 -0
- package/esm/ui/LoadingOverlay.js +4 -2
- package/esm/ui/MenuTypes.d.ts +23 -53
- package/esm/ui/MenuTypes.js +3 -0
- package/esm/ui/MonospaceTextField.d.ts +2 -1
- package/esm/ui/MonospaceTextField.js +23 -20
- package/esm/ui/PaletteContext.d.ts +10 -5
- package/esm/ui/PaletteContext.js +44 -6
- package/esm/ui/RefNameAutocomplete/SearchOption.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/SearchOption.js +45 -0
- package/esm/ui/RefNameAutocomplete/index.d.ts +1 -2
- package/esm/ui/RefNameAutocomplete/index.js +8 -2
- package/esm/ui/RefNameAutocomplete/util.d.ts +13 -0
- package/esm/ui/RefNameAutocomplete/util.js +42 -1
- package/esm/ui/ResizeHandle.d.ts +3 -1
- package/esm/ui/ResizeHandle.js +44 -11
- package/esm/ui/ScrollChrome.d.ts +13 -0
- package/esm/ui/ScrollChrome.js +11 -0
- package/esm/ui/ScrollEdgeShadow.d.ts +6 -9
- package/esm/ui/ScrollEdgeShadow.js +14 -35
- package/esm/ui/ScrollZoomToggle.d.ts +4 -27
- package/esm/ui/ScrollZoomToggle.js +34 -51
- package/esm/ui/SessionJsonPanel.d.ts +3 -0
- package/esm/ui/SessionJsonPanel.js +14 -0
- package/esm/ui/SettingsChangesTable.d.ts +1 -0
- package/esm/ui/SettingsChangesTable.js +49 -11
- package/esm/ui/ShareLinkField.d.ts +1 -3
- package/esm/ui/ShareLinkField.js +13 -40
- package/esm/ui/SizeSliderRow.d.ts +1 -3
- package/esm/ui/SizeSliderRow.js +4 -6
- package/esm/ui/SnackbarModel.js +79 -67
- package/esm/ui/StatusProgressBar.js +2 -2
- package/esm/ui/SvgColorLegend.d.ts +9 -4
- package/esm/ui/SvgColorLegend.js +82 -41
- package/esm/ui/VerticalScrollbar.d.ts +13 -34
- package/esm/ui/VerticalScrollbar.js +29 -83
- package/esm/ui/ViewLoadingScreen.d.ts +5 -4
- package/esm/ui/ViewLoadingScreen.js +8 -32
- package/esm/ui/colorScale.d.ts +92 -0
- package/esm/ui/colorScale.js +72 -0
- package/esm/ui/colors.d.ts +64 -0
- package/esm/ui/colors.js +230 -1
- package/esm/ui/hoverBoxStyle.d.ts +14 -2
- package/esm/ui/hoverBoxStyle.js +17 -2
- package/esm/ui/index.d.ts +12 -12
- package/esm/ui/index.js +14 -22
- package/esm/ui/launchViewMenu.js +15 -5
- package/esm/ui/legendMenuItem.d.ts +10 -32
- package/esm/ui/legendMenuItem.js +9 -36
- package/esm/ui/legendSpec.d.ts +15 -8
- package/esm/ui/legendSpec.js +14 -23
- package/esm/ui/makeSizeMenu.d.ts +0 -6
- package/esm/ui/makeSizeMenu.js +6 -30
- package/esm/ui/measureLegendText.js +1 -1
- package/esm/ui/menuItemAdornment.d.ts +9 -20
- package/esm/ui/menuItemAdornment.js +10 -32
- package/esm/ui/menuItems.d.ts +2 -7
- package/esm/ui/menuItems.js +1 -6
- package/esm/ui/multiTrackMenuItems.d.ts +6 -0
- package/esm/ui/palette.d.ts +118 -116
- package/esm/ui/palette.js +114 -75
- package/esm/ui/replaceViewAction.d.ts +1 -1
- package/esm/ui/replaceViewAction.js +1 -1
- package/esm/ui/theme.d.ts +43 -119
- package/esm/ui/theme.js +62 -78
- package/esm/ui/toggleMenuItems.d.ts +1 -3
- package/esm/ui/toggleMenuItems.js +6 -5
- package/esm/ui/useAssemblySelection.d.ts +4 -4
- package/esm/ui/viewHeaderHeight.d.ts +1 -0
- package/esm/ui/viewHeaderHeight.js +1 -0
- package/esm/util/Base1DUtils.d.ts +5 -3
- package/esm/util/Base1DUtils.js +14 -6
- package/esm/util/Base1DViewModel.d.ts +2 -1
- package/esm/util/Base1DViewModel.js +3 -2
- package/esm/util/SvgCanvas.d.ts +15 -13
- package/esm/util/SvgCanvas.js +76 -56
- package/esm/util/TimeTraveller.d.ts +3 -0
- package/esm/util/TimeTraveller.js +34 -2
- package/esm/util/aborting.d.ts +39 -0
- package/esm/util/aborting.js +88 -6
- package/esm/util/adapterMetadata.d.ts +1 -1
- package/esm/util/adapterMetadata.js +6 -5
- package/esm/util/addAndShowTrack.d.ts +2 -5
- package/esm/util/addAndShowTrack.js +5 -1
- package/esm/util/addRelativeUris.d.ts +17 -5
- package/esm/util/addRelativeUris.js +46 -10
- package/esm/util/addTrackFromWidget.d.ts +2 -5
- package/esm/util/addTrackFromWidget.js +5 -4
- package/esm/util/aggregateFieldName.d.ts +10 -0
- package/esm/util/aggregateFieldName.js +8 -0
- package/esm/util/analytics.js +46 -13
- package/esm/util/animationAllowed.d.ts +9 -0
- package/esm/util/animationAllowed.js +13 -0
- package/esm/util/applyRowResizeWheel.d.ts +10 -5
- package/esm/util/applyRowResizeWheel.js +10 -21
- package/esm/util/bandHeight.d.ts +10 -0
- package/esm/util/bandHeight.js +29 -0
- package/esm/util/bandLayout.d.ts +4 -4
- package/esm/util/bandLayout.js +4 -4
- package/esm/util/baseDisplayConfig.d.ts +8 -0
- package/esm/util/baseDisplayConfig.js +27 -0
- package/esm/util/bezierConnector.d.ts +4 -3
- package/esm/util/bezierConnector.js +38 -45
- package/esm/util/bgzfWorkerPool.d.ts +20 -74
- package/esm/util/bgzfWorkerPool.js +20 -74
- package/esm/util/binnedAggregate.d.ts +17 -0
- package/esm/util/binnedAggregate.js +275 -0
- package/esm/util/cacheBudgets.d.ts +22 -19
- package/esm/util/cacheBudgets.js +22 -19
- package/esm/util/cachedSetup.d.ts +16 -6
- package/esm/util/cachedSetup.js +108 -38
- package/esm/util/categoricalField.d.ts +56 -0
- package/esm/util/categoricalField.js +73 -0
- package/esm/util/cellMatches.d.ts +23 -0
- package/esm/util/cellMatches.js +264 -0
- package/esm/util/cellsStep.d.ts +29 -0
- package/esm/util/cellsStep.js +437 -0
- package/esm/util/clampToContig.d.ts +17 -0
- package/esm/util/clampToContig.js +19 -0
- package/esm/util/coarseStripHTML.js +1 -2
- package/esm/util/color/cssColorsLevel4.d.ts +1 -0
- package/esm/util/color/cssColorsLevel4.js +1 -0
- package/esm/util/color/index.d.ts +5 -3
- package/esm/util/color/index.js +7 -4
- package/esm/util/colorBits.d.ts +3 -3
- package/esm/util/colorBits.js +19 -44
- package/esm/util/colorRamp.d.ts +49 -5
- package/esm/util/colorRamp.js +169 -18
- package/esm/util/colorScale.d.ts +156 -0
- package/esm/util/colorScale.js +243 -0
- package/esm/util/colorSchemes.d.ts +21 -0
- package/esm/util/colorSchemes.js +30 -0
- package/esm/util/copyToClipboard.js +8 -1
- package/esm/util/{createStopTokenRotation.d.ts → createAbortRotation.d.ts} +21 -23
- package/esm/util/{createStopTokenRotation.js → createAbortRotation.js} +21 -52
- package/esm/util/createSvgRasterCanvas.d.ts +10 -0
- package/esm/util/cssColorParse.d.ts +15 -0
- package/esm/util/cssColorParse.js +53 -0
- package/esm/util/diagonalizeRegions.d.ts +2 -3
- package/esm/util/diagonalizeRegions.js +8 -13
- package/esm/util/expandLooseSearchIndex.d.ts +19 -0
- package/esm/util/expandLooseSearchIndex.js +29 -0
- package/esm/util/featureTable.d.ts +224 -0
- package/esm/util/featureTable.js +366 -0
- package/esm/util/featureTransforms.d.ts +81 -0
- package/esm/util/featureTransforms.js +1231 -0
- package/esm/util/featureTypes.d.ts +24 -0
- package/esm/util/featureTypes.js +35 -0
- package/esm/util/fetchAndMaybeUnzip.js +16 -9
- package/esm/util/fetchContext.d.ts +7 -8
- package/esm/util/fetchContext.js +3 -3
- package/esm/util/fetchHub.d.ts +4 -2
- package/esm/util/fetchHub.js +2 -2
- package/esm/util/fetchPhases.d.ts +10 -10
- package/esm/util/fetchSeq.d.ts +2 -3
- package/esm/util/fetchSeq.js +2 -2
- package/esm/util/fieldReader.d.ts +17 -0
- package/esm/util/fieldReader.js +62 -0
- package/esm/util/formatBytes.js +1 -1
- package/esm/util/formatGuessers.d.ts +25 -14
- package/esm/util/formatGuessers.js +42 -27
- package/esm/util/formatRelativeTime.js +1 -1
- package/esm/util/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/getLocationUri.d.ts +2 -1
- package/esm/util/getLocationUri.js +8 -2
- package/esm/util/groupKeys.d.ts +76 -0
- package/esm/util/groupKeys.js +156 -0
- package/esm/util/highlights.d.ts +10 -6
- package/esm/util/highlights.js +12 -25
- package/esm/util/hooks.d.ts +31 -2
- package/esm/util/hooks.js +72 -3
- package/esm/util/index.d.ts +11 -11
- package/esm/util/index.js +11 -10
- package/esm/util/indexCandidates.d.ts +1 -31
- package/esm/util/indexCandidates.js +5 -63
- package/esm/util/installFetch.d.ts +77 -37
- package/esm/util/installFetch.js +65 -38
- package/esm/util/installInitAutorun.d.ts +14 -13
- package/esm/util/installInitAutorun.js +17 -17
- package/esm/util/installPrerequisiteFetch.d.ts +115 -0
- package/esm/util/installPrerequisiteFetch.js +111 -0
- package/esm/util/intervals.js +9 -4
- package/esm/util/io/index.js +22 -15
- package/esm/util/isDataCurrent.d.ts +7 -5
- package/esm/util/isDataCurrent.js +9 -6
- package/esm/util/isTextEntryFocused.d.ts +7 -0
- package/esm/util/isTextEntryFocused.js +16 -0
- package/esm/util/jexl.js +24 -21
- package/esm/util/jexlFilterRows.d.ts +89 -0
- package/esm/util/jexlFilterRows.js +252 -0
- package/esm/util/jexlFilters.d.ts +32 -57
- package/esm/util/jexlFilters.js +31 -29
- package/esm/util/jexlStrings.d.ts +3 -4
- package/esm/util/jexlStrings.js +2 -3
- package/esm/util/layouts/GranularRectLayout.d.ts +8 -1
- package/esm/util/layouts/GranularRectLayout.js +25 -8
- package/esm/util/lazyAfterAttach.d.ts +13 -0
- package/esm/util/lazyAfterAttach.js +31 -0
- package/esm/util/lazyWithPreload.d.ts +19 -0
- package/esm/util/lazyWithPreload.js +27 -0
- package/esm/util/legendCandidates.d.ts +72 -0
- package/esm/util/legendCandidates.js +138 -0
- package/esm/util/locString.js +5 -2
- package/esm/util/localStorage.js +4 -4
- package/esm/util/markEncoding.d.ts +150 -0
- package/esm/util/markEncoding.js +885 -0
- package/esm/util/markEncodingTypes.d.ts +595 -0
- package/esm/util/markEncodingTypes.js +8 -0
- package/esm/util/mst-reflection.d.ts +2 -20
- package/esm/util/mst-reflection.js +3 -53
- package/esm/util/mstUtils.d.ts +31 -23
- package/esm/util/mstUtils.js +39 -24
- package/esm/util/numericUtils.d.ts +7 -0
- package/esm/util/numericUtils.js +16 -0
- package/esm/util/numericValue.d.ts +14 -0
- package/esm/util/numericValue.js +34 -0
- package/esm/util/openFeatureWidget.d.ts +5 -0
- package/esm/util/openFeatureWidget.js +2 -2
- package/esm/util/openViews.d.ts +17 -0
- package/esm/util/openViews.js +22 -0
- package/esm/util/parentWalk.d.ts +1 -1
- package/esm/util/parentWalk.js +1 -1
- package/esm/util/parseLineByLine.d.ts +4 -5
- package/esm/util/parseLineByLine.js +8 -14
- package/esm/util/pluginStore.d.ts +6 -8
- package/esm/util/pluginStore.js +17 -16
- package/esm/util/preloadComponent.d.ts +5 -0
- package/esm/util/preloadComponent.js +11 -0
- package/esm/util/progress.d.ts +22 -22
- package/esm/util/progress.js +27 -26
- package/esm/util/quantileExtent.d.ts +49 -0
- package/esm/util/quantileExtent.js +162 -0
- package/esm/util/range.d.ts +13 -9
- package/esm/util/range.js +17 -8
- package/esm/util/renameRegions.d.ts +26 -6
- package/esm/util/renameRegions.js +68 -54
- package/esm/util/renderToStaticMarkup.js +24 -14
- package/esm/util/rxjs.d.ts +23 -8
- package/esm/util/rxjs.js +61 -15
- package/esm/util/samplesTsv.d.ts +49 -0
- package/esm/util/samplesTsv.js +86 -0
- package/esm/util/scheduleDetachedDestroy.d.ts +18 -0
- package/esm/util/scheduleDetachedDestroy.js +24 -0
- package/esm/util/scrollLatch.d.ts +1 -0
- package/esm/util/scrollLatch.js +8 -0
- package/esm/util/selectEncodedFeature.d.ts +16 -0
- package/esm/util/selectEncodedFeature.js +34 -0
- package/esm/util/sessionSharing.d.ts +7 -5
- package/esm/util/sessionSharing.js +23 -23
- package/esm/util/shapeNameList.d.ts +2 -0
- package/esm/util/shapeNameList.js +6 -0
- package/esm/util/shapeNames.d.ts +7 -0
- package/esm/util/shapeNames.js +11 -0
- package/esm/util/simpleFeature.d.ts +0 -1
- package/esm/util/springAnimate.js +1 -1
- package/esm/util/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/stepTables.d.ts +96 -0
- package/esm/util/stepTables.js +277 -0
- package/esm/util/svAlt.d.ts +145 -0
- package/esm/util/svAlt.js +364 -0
- package/esm/util/svgColorProps.d.ts +11 -0
- package/esm/util/svgColorProps.js +28 -1
- package/esm/util/systemColorScheme.d.ts +12 -0
- package/esm/util/systemColorScheme.js +27 -0
- package/esm/util/tabix.d.ts +19 -10
- package/esm/util/tabix.js +19 -14
- package/esm/util/thresholdScale.d.ts +91 -0
- package/esm/util/thresholdScale.js +166 -0
- package/esm/util/timeGate.d.ts +4 -5
- package/esm/util/timeGate.js +4 -5
- package/esm/util/trackConfigDelta.d.ts +26 -26
- package/esm/util/trackConfigDelta.js +63 -47
- package/esm/util/tracks.d.ts +120 -66
- package/esm/util/tracks.js +501 -151
- package/esm/util/translateTranscript.d.ts +44 -0
- package/esm/util/translateTranscript.js +102 -0
- package/esm/util/types/data.d.ts +0 -2
- package/esm/util/types/index.d.ts +121 -22
- package/esm/util/types/index.js +9 -0
- package/esm/util/types/mst.d.ts +3 -0
- package/esm/util/types/mst.js +4 -0
- package/esm/util/types/renameIds.d.ts +1 -0
- package/esm/util/types/renameIds.js +29 -0
- package/esm/util/types/services.d.ts +1 -1
- package/esm/util/unknownSnapshotKeys.d.ts +53 -0
- package/esm/util/unknownSnapshotKeys.js +76 -0
- package/esm/util/useFeatureSequence.js +5 -5
- package/esm/util/useFetch.d.ts +3 -4
- package/esm/util/useFetch.js +19 -10
- package/esm/util/useFetchPlugins.d.ts +6 -2
- package/esm/util/useFetchPlugins.js +7 -3
- package/esm/util/usePanZoom.js +10 -3
- package/esm/util/usePanelVirtualScroll.d.ts +7 -35
- package/esm/util/usePanelVirtualScroll.js +9 -36
- package/esm/util/useRafCommit.js +1 -0
- package/esm/util/useRowVirtualScroll.d.ts +6 -29
- package/esm/util/useRowVirtualScroll.js +8 -49
- package/esm/util/useVirtualScrollWheel.d.ts +20 -4
- package/esm/util/useVirtualScrollWheel.js +40 -74
- package/esm/util/viewHighlights.d.ts +3 -0
- package/esm/util/viewHighlights.js +5 -0
- package/esm/util/viewStatus.d.ts +47 -15
- package/esm/util/viewStatus.js +34 -0
- package/esm/util/wheelZoom.d.ts +7 -1
- package/esm/util/wheelZoom.js +85 -19
- package/esm/util/whenViewSettled.d.ts +55 -8
- package/esm/util/whenViewSettled.js +56 -7
- package/esm/util/withFeatureDetails.js +4 -0
- package/esm/util/withLaunchInput.d.ts +174 -0
- package/esm/util/withLaunchInput.js +274 -0
- package/package.json +75 -24
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.d.ts +0 -2
- package/esm/BaseFeatureWidget/BaseFeatureDetail/Position.js +0 -8
- package/esm/BaseFeatureWidget/BaseFeatureDetail/types.d.ts +0 -8
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.d.ts +0 -80
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/DLGAP3.js +0 -583
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.d.ts +0 -141
- package/esm/BaseFeatureWidget/SequenceFeatureDetails/test_data/NCDN.js +0 -1116
- package/esm/ReExports/BaseFeatureDetails.d.ts +0 -1
- package/esm/ReExports/BaseFeatureDetails.js +0 -10
- package/esm/ReExports/index.d.ts +0 -1
- package/esm/ReExports/index.js +0 -1
- package/esm/ReExports/publicUtil.d.ts +0 -1
- package/esm/ReExports/publicUtil.js +0 -28
- package/esm/configuration/promotableDefaults.d.ts +0 -199
- package/esm/configuration/promotableDefaults.js +0 -326
- package/esm/configuration/promotablePin.d.ts +0 -55
- package/esm/configuration/promotablePin.js +0 -1
- package/esm/configuration/promotableResolve.d.ts +0 -108
- package/esm/configuration/promotableResolve.js +0 -117
- package/esm/configuration/promotableSlots.d.ts +0 -12
- package/esm/configuration/promotableSlots.js +0 -45
- package/esm/configuration/slotShape.d.ts +0 -12
- package/esm/configuration/slotShape.js +0 -84
- package/esm/pluggableElementTypes/models/HighlightsMixin.d.ts +0 -51
- package/esm/pluggableElementTypes/models/HighlightsMixin.js +0 -78
- package/esm/ui/PinAdornment.d.ts +0 -5
- package/esm/ui/PinAdornment.js +0 -79
- package/esm/ui/SvgGradientLegend.d.ts +0 -26
- package/esm/ui/SvgGradientLegend.js +0 -26
- package/esm/ui/highlightChipReveal.d.ts +0 -32
- package/esm/ui/highlightChipReveal.js +0 -39
- package/esm/ui/promotableMenuItems.d.ts +0 -19
- package/esm/ui/promotableMenuItems.js +0 -89
- package/esm/ui/promotablePinCoverage.d.ts +0 -44
- package/esm/ui/promotablePinCoverage.js +0 -87
- package/esm/util/applyInitSettings.d.ts +0 -79
- package/esm/util/applyInitSettings.js +0 -91
- package/esm/util/openDisplays.d.ts +0 -23
- package/esm/util/openDisplays.js +0 -79
- package/esm/util/stopToken.d.ts +0 -211
- package/esm/util/stopToken.js +0 -438
- /package/esm/{BaseFeatureWidget/BaseFeatureDetail/types.js → data_adapters/BaseAdapter/zoomRange.js} +0 -0
package/esm/ReExports/modules.js
CHANGED
|
@@ -1,168 +1,13 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import * as ReactDom from 'react-dom';
|
|
10
|
-
import * as ReactDomClient from 'react-dom/client';
|
|
11
|
-
import * as ReactJSXRuntime from 'react/jsx-runtime';
|
|
12
|
-
import Plugin from '../Plugin.js';
|
|
13
|
-
import * as Configuration from '../configuration/index.js';
|
|
14
|
-
import * as BaseAdapterExports from '../data_adapters/BaseAdapter/index.js';
|
|
15
|
-
import * as dataAdapterCache from '../data_adapters/dataAdapterCache.js';
|
|
16
|
-
import AdapterType from '../pluggableElementTypes/AdapterType.js';
|
|
17
|
-
import DisplayType from '../pluggableElementTypes/DisplayType.js';
|
|
18
|
-
import TrackType from '../pluggableElementTypes/TrackType.js';
|
|
19
|
-
import ViewType from '../pluggableElementTypes/ViewType.js';
|
|
20
|
-
import WidgetType from '../pluggableElementTypes/WidgetType.js';
|
|
21
|
-
import * as pluggableElementTypes from '../pluggableElementTypes/index.js';
|
|
22
|
-
import * as pluggableElementTypeModels from '../pluggableElementTypes/models/index.js';
|
|
23
|
-
import * as coreUi from '../ui/index.js';
|
|
24
|
-
import * as corePalette from '../ui/palette.js';
|
|
25
|
-
import * as coreTheme from '../ui/theme.js';
|
|
26
|
-
import Base1DView from '../util/Base1DViewModel.js';
|
|
27
|
-
import * as coreColor from '../util/color/index.js';
|
|
28
|
-
import * as coreIo from '../util/io/index.js';
|
|
29
|
-
import * as coreLayouts from '../util/layouts/index.js';
|
|
30
|
-
import * as coreMstReflection from '../util/mst-reflection.js';
|
|
31
|
-
import * as rxjs from '../util/rxjs.js';
|
|
32
|
-
import * as trackUtils from '../util/tracks.js';
|
|
33
|
-
import { cx, keyframes, makeStyles } from '../util/tss-react/index.js';
|
|
34
|
-
import * as mstTypes from '../util/types/mst.js';
|
|
35
|
-
import { BaseFeatureDetail } from './BaseFeatureDetails.js';
|
|
36
|
-
import { DataGridEntries } from './MuiDataGridReExports.js';
|
|
37
|
-
import { Entries } from './MuiReExports.js';
|
|
38
|
-
import { MUIStyles } from './MuiStylesReExports.js';
|
|
39
|
-
import { lazyMap } from './lazify.js';
|
|
40
|
-
import reExportsList from './list.js';
|
|
41
|
-
import * as coreUtil from './publicUtil.js';
|
|
42
|
-
function makeLegacyMakeStyles() {
|
|
43
|
-
return (args) => {
|
|
44
|
-
const useStyles = makeStyles()(args);
|
|
45
|
-
return () => useStyles().classes;
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
const tssReact = { cx, keyframes, makeStyles };
|
|
49
|
-
const legacyMakeStyles = makeLegacyMakeStyles();
|
|
1
|
+
// The runtime plugin ABI @jbrowse/core alone can serve, on the main thread: the
|
|
2
|
+
// framework singletons and Material UI from frameworkModules.ts, and every
|
|
3
|
+
// subpath core's exports map publishes from the generated half. A product
|
|
4
|
+
// spreads this under the packages it bundles beyond core — see each
|
|
5
|
+
// product's reExports.generated.ts, and scripts/generateReExports.ts for how
|
|
6
|
+
// both halves and list.ts are derived.
|
|
7
|
+
import coreModules from './coreModules.generated.js';
|
|
8
|
+
import frameworkModules from './frameworkModules.js';
|
|
50
9
|
const libs = {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
'mobx-state-tree': mst,
|
|
54
|
-
react: React,
|
|
55
|
-
'react/jsx-runtime': ReactJSXRuntime,
|
|
56
|
-
'react-dom': ReactDom,
|
|
57
|
-
'react-dom/client': ReactDomClient,
|
|
58
|
-
'mobx-react': mxreact,
|
|
59
|
-
// Only lazy component entries are re-exported. The grid *hooks*
|
|
60
|
-
// (useGridApiContext/useGridApiRef/useGridRootProps) are intentionally left
|
|
61
|
-
// out: statically importing them here pulled the entire ~1.2 MB
|
|
62
|
-
// @mui/x-data-grid package into the eager first-paint graph, defeating the
|
|
63
|
-
// lazy import('@mui/x-data-grid') in MuiDataGridReExports. First-party code
|
|
64
|
-
// that needs the hooks imports them directly from '@mui/x-data-grid'.
|
|
65
|
-
'@mui/x-data-grid': {
|
|
66
|
-
...lazyMap(DataGridEntries),
|
|
67
|
-
},
|
|
68
|
-
'@mui/material/utils': MUIUtils,
|
|
69
|
-
'@material-ui/core/utils': MUIUtils,
|
|
70
|
-
'tss-react': tssReact,
|
|
71
|
-
'tss-react/mui': tssReact,
|
|
72
|
-
'@material-ui/core': {
|
|
73
|
-
...lazyMap(Entries),
|
|
74
|
-
useTheme,
|
|
75
|
-
alpha,
|
|
76
|
-
makeStyles: legacyMakeStyles,
|
|
77
|
-
},
|
|
78
|
-
'@mui/material': {
|
|
79
|
-
...lazyMap(Entries),
|
|
80
|
-
alpha,
|
|
81
|
-
useTheme,
|
|
82
|
-
createTheme,
|
|
83
|
-
},
|
|
84
|
-
...lazyMap(Entries, '@mui/material/'),
|
|
85
|
-
...lazyMap(Entries, '@material-ui/core/'),
|
|
86
|
-
// @mui/icons-material — bundled into external plugins — reads the
|
|
87
|
-
// `createSvgIcon` *named* export from @mui/material/SvgIcon, but lazyMap
|
|
88
|
-
// exposes only the component (its default). SvgIcon is a primitive that's
|
|
89
|
-
// eagerly loaded in practice, so expose it directly with createSvgIcon
|
|
90
|
-
// attached: a default import still lands on a usable component (rollup-plugin-
|
|
91
|
-
// external-globals substitutes the value itself, esbuild's globalExternals
|
|
92
|
-
// reads `.default`), while the named import and icons-material's CJS
|
|
93
|
-
// `require(...).createSvgIcon` both find the util. A shallow copy carries the
|
|
94
|
-
// forwardRef's $$typeof/render so the shared SvgIcon export isn't mutated.
|
|
95
|
-
// Overrides the lazy entry above; verified against both bundlers.
|
|
96
|
-
// GMOD/jbrowse-components#5606.
|
|
97
|
-
'@mui/material/SvgIcon': Object.assign({}, SvgIcon, { createSvgIcon }),
|
|
98
|
-
'@mui/material/styles': {
|
|
99
|
-
...MUIStyles,
|
|
100
|
-
makeStyles: legacyMakeStyles,
|
|
101
|
-
},
|
|
102
|
-
'@material-ui/core/styles': {
|
|
103
|
-
...MUIStyles,
|
|
104
|
-
makeStyles: legacyMakeStyles,
|
|
105
|
-
},
|
|
106
|
-
// these are core in @mui/material, but used to be in @material-ui/lab
|
|
107
|
-
'@material-ui/lab/ToggleButton': Entries.ToggleButton,
|
|
108
|
-
'@material-ui/lab/ToggleButtonGroup': Entries.ToggleButtonGroup,
|
|
109
|
-
'@material-ui/lab/Autocomplete': Entries.Autocomplete,
|
|
110
|
-
'@material-ui/lab/Alert': Entries.Alert,
|
|
111
|
-
'@material-ui/lab': {
|
|
112
|
-
Alert: Entries.Alert,
|
|
113
|
-
Autocomplete: Entries.Autocomplete,
|
|
114
|
-
ToggleButton: Entries.ToggleButton,
|
|
115
|
-
ToggleButtonGroup: Entries.ToggleButtonGroup,
|
|
116
|
-
},
|
|
117
|
-
'@jbrowse/core/Plugin': Plugin,
|
|
118
|
-
'@jbrowse/core/configuration': Configuration,
|
|
119
|
-
'@jbrowse/core/util/types/mst': mstTypes,
|
|
120
|
-
'@jbrowse/core/ui': coreUi,
|
|
121
|
-
'@jbrowse/core/ui/theme': coreTheme,
|
|
122
|
-
'@jbrowse/core/ui/palette': corePalette,
|
|
123
|
-
// BaseTooltip is deliberately absent from the '@jbrowse/core/ui' barrel: the
|
|
124
|
-
// re-export alone held @floating-ui (~266KB) on the startup path, since eager
|
|
125
|
-
// plugin entries import that barrel. Serving it as its own module behind
|
|
126
|
-
// React.lazy keeps it off that path while leaving external plugins a way to
|
|
127
|
-
// reach it -- published apollo deep-imports this exact path, and react-msaview
|
|
128
|
-
// (bundled by tview and msaview) reads it too, so dropping it from the barrel
|
|
129
|
-
// with no ABI home is what broke them.
|
|
130
|
-
...lazyMap({ BaseTooltip: React.lazy(() => import('../ui/BaseTooltip.js')) }, '@jbrowse/core/ui/'),
|
|
131
|
-
'@jbrowse/core/util': coreUtil,
|
|
132
|
-
'@jbrowse/core/util/color': coreColor,
|
|
133
|
-
'@jbrowse/core/util/layouts': coreLayouts,
|
|
134
|
-
'@jbrowse/core/util/tracks': trackUtils,
|
|
135
|
-
'@jbrowse/core/util/Base1DViewModel': Base1DView,
|
|
136
|
-
'@jbrowse/core/util/io': coreIo,
|
|
137
|
-
'@jbrowse/core/util/mst-reflection': coreMstReflection,
|
|
138
|
-
'@jbrowse/core/util/rxjs': rxjs,
|
|
139
|
-
'@jbrowse/core/pluggableElementTypes': pluggableElementTypes,
|
|
140
|
-
'@jbrowse/core/pluggableElementTypes/ViewType': ViewType,
|
|
141
|
-
'@jbrowse/core/pluggableElementTypes/AdapterType': AdapterType,
|
|
142
|
-
'@jbrowse/core/pluggableElementTypes/DisplayType': DisplayType,
|
|
143
|
-
'@jbrowse/core/pluggableElementTypes/TrackType': TrackType,
|
|
144
|
-
'@jbrowse/core/pluggableElementTypes/WidgetType': WidgetType,
|
|
145
|
-
'@jbrowse/core/pluggableElementTypes/models': pluggableElementTypeModels,
|
|
146
|
-
'@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail': BaseFeatureDetail,
|
|
147
|
-
'@jbrowse/core/data_adapters/BaseAdapter': BaseAdapterExports,
|
|
148
|
-
// `adapterCache` is module-level state, so a plugin that bundles its own copy
|
|
149
|
-
// of this file gets a second cache in the RPC worker — and `freeAdapterResources`,
|
|
150
|
-
// which CoreFreeResources calls on the host's copy when the last track using
|
|
151
|
-
// an adapter config closes, never sees it. The cache is the only strong
|
|
152
|
-
// reference to an adapter (see the comment on that function), so those
|
|
153
|
-
// adapters and everything they hold live as long as the worker. Serving the
|
|
154
|
-
// module is what makes an external RPC method share the host's cache.
|
|
155
|
-
'@jbrowse/core/data_adapters/dataAdapterCache': dataAdapterCache,
|
|
10
|
+
...frameworkModules,
|
|
11
|
+
...coreModules,
|
|
156
12
|
};
|
|
157
|
-
const libsList = Object.keys(libs);
|
|
158
|
-
// make sure that all the items in the ReExports/list array (used by build
|
|
159
|
-
// systems and such) are included here, and vice versa
|
|
160
|
-
const inLibsOnly = libsList.filter(mod => !reExportsList.includes(mod));
|
|
161
|
-
if (inLibsOnly.length > 0) {
|
|
162
|
-
throw new Error(`The following modules are in the modules libs, but not the re-exports list: ${inLibsOnly.join(', ')}`);
|
|
163
|
-
}
|
|
164
|
-
const inReExportsOnly = reExportsList.filter(mod => !libsList.includes(mod));
|
|
165
|
-
if (inReExportsOnly.length) {
|
|
166
|
-
throw new Error(`The following modules are in the re-exports list, but not the modules libs: ${inReExportsOnly.join(', ')}`);
|
|
167
|
-
}
|
|
168
13
|
export default libs;
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* a runtime plugin.
|
|
4
4
|
*
|
|
5
5
|
* `ReExports/modules.ts` is the ABI external plugins link against, and it
|
|
6
|
-
* reaches it by spreading `import * as` namespaces of
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* reaches it by spreading `import * as` namespaces of every subpath core
|
|
7
|
+
* publishes into one object, as each product's `reExports.generated.ts` does
|
|
8
|
+
* for every package it bundles. A namespace spread *names every export*, so
|
|
9
|
+
* nothing downstream of those modules can be tree-shaken. `PluginManager` used
|
|
10
|
+
* to import it
|
|
11
11
|
* statically for `jbrequire`, which put the whole surface — most of
|
|
12
12
|
* `@jbrowse/core/ui` and, behind it, ~400 KB of Material UI — into the eager
|
|
13
13
|
* first-paint graph of **every** host, including embedded ones that load no
|
|
@@ -26,3 +26,21 @@ export function setReExportRegistry(libs) {
|
|
|
26
26
|
export function getReExportRegistry() {
|
|
27
27
|
return registry;
|
|
28
28
|
}
|
|
29
|
+
// A bundle built against another @jbrowse/core, or against a package this host
|
|
30
|
+
// does not bundle, reads a key the map lacks — at module scope, so what it then
|
|
31
|
+
// throws is `Cannot read properties of undefined` with no module named. A
|
|
32
|
+
// plugin's own build tool only ever externalizes a key `ReExports/list.ts`
|
|
33
|
+
// names, so every scoped-or-slashed read that misses is that case, and this
|
|
34
|
+
// names it. Anything else missing reads `undefined` as it always did.
|
|
35
|
+
export function loudOnMissingModule(libs) {
|
|
36
|
+
return new Proxy(libs, {
|
|
37
|
+
get(target, key, receiver) {
|
|
38
|
+
if (typeof key === 'string' &&
|
|
39
|
+
!(key in target) &&
|
|
40
|
+
(key.startsWith('@') || key.includes('/'))) {
|
|
41
|
+
throw new Error(`This JBrowse does not serve '${key}' to plugins: the plugin was built against an older or newer @jbrowse/core, or against a package this host does not bundle`);
|
|
42
|
+
}
|
|
43
|
+
return Reflect.get(target, key, receiver);
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// The RPC worker's stand-in for a UI entry of the plugin ABI; why, and why a
|
|
2
|
+
// namespace gets real own keys: agent-docs/reference/EAGER_BUNDLE.md.
|
|
3
|
+
export const uiStub = new Proxy(function stubTarget() { }, {
|
|
4
|
+
get: (_, key) => key === 'then' ? undefined : key === Symbol.toPrimitive ? () => '' : uiStub,
|
|
5
|
+
has: () => true,
|
|
6
|
+
apply: () => uiStub,
|
|
7
|
+
construct: () => uiStub,
|
|
8
|
+
});
|
|
9
|
+
// `esModule` mirrors the `__esModule` the main thread sets on a namespace that
|
|
10
|
+
// carries a default export beside named ones, so a bundler's interop reads the
|
|
11
|
+
// stub's `default` the same way in both realms.
|
|
12
|
+
export function uiNamespace(names, esModule = false) {
|
|
13
|
+
return {
|
|
14
|
+
...(esModule ? { __esModule: true } : {}),
|
|
15
|
+
...Object.fromEntries(names.map(name => [name, uiStub])),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
// Own keys React puts on a component object, which are not export names and
|
|
19
|
+
// so do not survive into a stub or the manifest.
|
|
20
|
+
export const REACT_INTERNAL_KEYS = new Set([
|
|
21
|
+
'$$typeof',
|
|
22
|
+
'_debugInfo',
|
|
23
|
+
'_init',
|
|
24
|
+
'_payload',
|
|
25
|
+
'compare',
|
|
26
|
+
'contextTypes',
|
|
27
|
+
'defaultProps',
|
|
28
|
+
'displayName',
|
|
29
|
+
'muiName',
|
|
30
|
+
'propTypes',
|
|
31
|
+
'render',
|
|
32
|
+
'type',
|
|
33
|
+
]);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Same keys as modules.ts, as the RPC worker serves them: a module a plugin
|
|
2
|
+
// reads only to render is a stub carrying the main thread's export names, so
|
|
3
|
+
// the one bundle a plugin ships evaluates in both realms without the worker
|
|
4
|
+
// fetching the UI graph. agent-docs/reference/EAGER_BUNDLE.md
|
|
5
|
+
import coreWorkerModules from './coreWorkerModules.generated.js';
|
|
6
|
+
import frameworkWorkerModules from './frameworkWorkerModules.generated.js';
|
|
7
|
+
const libs = {
|
|
8
|
+
...frameworkWorkerModules,
|
|
9
|
+
...coreWorkerModules,
|
|
10
|
+
};
|
|
11
|
+
export default libs;
|
|
@@ -3,25 +3,39 @@ import type PluginManager from '../PluginManager.ts';
|
|
|
3
3
|
import type { AnyConfigurationModel } from '../configuration/index.ts';
|
|
4
4
|
import type { BaseTextSearchAdapter, BaseTextSearchArgs } from '../data_adapters/BaseAdapter/index.ts';
|
|
5
5
|
import type BaseResult from './BaseResults.ts';
|
|
6
|
+
export interface SearchIndex {
|
|
7
|
+
conf: AnyConfigurationModel;
|
|
8
|
+
/** the track a per-track index belongs to */
|
|
9
|
+
trackId?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface TextSearchReport {
|
|
12
|
+
results: BaseResult[];
|
|
13
|
+
/** the indexes covering the assembly, zero when it has none to search */
|
|
14
|
+
indexCount: number;
|
|
15
|
+
/** what each index that could not answer threw */
|
|
16
|
+
failures: unknown[];
|
|
17
|
+
}
|
|
6
18
|
export default class TextSearchManager {
|
|
7
19
|
pluginManager: PluginManager;
|
|
8
20
|
adapterCache: QuickLRU<string, BaseTextSearchAdapter>;
|
|
9
21
|
constructor(pluginManager: PluginManager);
|
|
10
22
|
clearCache(): void;
|
|
11
|
-
loadTextSearchAdapters(assemblyName: string): Promise<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
loadTextSearchAdapters(assemblyName: string): Promise<{
|
|
24
|
+
values: {
|
|
25
|
+
adapter: BaseTextSearchAdapter;
|
|
26
|
+
trackId: string | undefined;
|
|
27
|
+
}[];
|
|
28
|
+
failures: unknown[];
|
|
29
|
+
}>;
|
|
30
|
+
relevantAdapters(assemblyName: string): AnyConfigurationModel[];
|
|
31
|
+
relevantIndexes(assemblyName: string): SearchIndex[];
|
|
32
|
+
getAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): AnyConfigurationModel[];
|
|
33
|
+
getTrackAdaptersWithAssembly(matches: (names: string[] | undefined) => boolean, confs: AnyConfigurationModel[]): {
|
|
34
|
+
conf: AnyConfigurationModel;
|
|
35
|
+
trackId: string;
|
|
36
|
+
}[];
|
|
24
37
|
search(args: BaseTextSearchArgs, assemblyName: string): Promise<BaseResult[]>;
|
|
38
|
+
searchIndexes(args: BaseTextSearchArgs, assemblyName: string): Promise<TextSearchReport>;
|
|
25
39
|
sortResults({ results, args, }: {
|
|
26
40
|
results: BaseResult[];
|
|
27
41
|
args: BaseTextSearchArgs;
|
|
@@ -1,25 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getSnapshot, isStateTreeNode } from '@jbrowse/mobx-state-tree';
|
|
2
|
+
import { hydrateTrackConfig, readConfObject } from '../configuration/index.js';
|
|
3
|
+
import { adapterConfigCacheKey } from '../data_adapters/dataAdapterCache.js';
|
|
2
4
|
import QuickLRU from '../util/QuickLRU/index.js';
|
|
3
|
-
import { isAbortException } from '../util/aborting.js';
|
|
4
|
-
import {
|
|
5
|
-
import { canonicalAssemblyNames } from '../util/tracks.js';
|
|
5
|
+
import { checkAbortSignal, isAbortException } from '../util/aborting.js';
|
|
6
|
+
import { allSessionTracks, canonicalAssemblyNames } from '../util/tracks.js';
|
|
6
7
|
// A misconfigured or unreachable index (a 404 .ix, a config missing
|
|
7
8
|
// ixFilePath) must not take down search as a whole: the remaining indexes, and
|
|
8
|
-
// the refName results the caller merges in afterwards, are still useful.
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
// the refName results the caller merges in afterwards, are still useful. The
|
|
10
|
+
// failures are logged and handed back, so a miss can say an index failed rather
|
|
11
|
+
// than that the name is absent. An abort is not a failure — every keystroke
|
|
12
|
+
// supersedes the previous query, so logging those would turn normal typing
|
|
13
|
+
// into console spam.
|
|
14
|
+
async function settle(promises, message) {
|
|
15
|
+
const values = [];
|
|
16
|
+
const failures = [];
|
|
14
17
|
for (const settled of await Promise.allSettled(promises)) {
|
|
15
18
|
if (settled.status === 'fulfilled') {
|
|
16
|
-
|
|
19
|
+
values.push(settled.value);
|
|
17
20
|
}
|
|
18
21
|
else if (!isAbortException(settled.reason)) {
|
|
19
22
|
console.error(message, settled.reason);
|
|
23
|
+
failures.push(settled.reason);
|
|
20
24
|
}
|
|
21
25
|
}
|
|
22
|
-
return
|
|
26
|
+
return { values, failures };
|
|
23
27
|
}
|
|
24
28
|
export default class TextSearchManager {
|
|
25
29
|
pluginManager;
|
|
@@ -33,22 +37,25 @@ export default class TextSearchManager {
|
|
|
33
37
|
this.adapterCache.clear();
|
|
34
38
|
}
|
|
35
39
|
loadTextSearchAdapters(assemblyName) {
|
|
36
|
-
return
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
40
|
-
return
|
|
40
|
+
return settle(this.relevantIndexes(assemblyName).map(async ({ conf, trackId }) => {
|
|
41
|
+
const key = adapterConfigCacheKey(getSnapshot(conf));
|
|
42
|
+
const cached = this.adapterCache.get(key);
|
|
43
|
+
if (cached) {
|
|
44
|
+
return { adapter: cached, trackId };
|
|
41
45
|
}
|
|
42
46
|
else {
|
|
43
47
|
const adapterType = this.pluginManager.getTextSearchAdapterType(conf.type);
|
|
44
48
|
const AdapterClass = await adapterType.getAdapterClass();
|
|
45
|
-
const
|
|
46
|
-
this.adapterCache.set(
|
|
47
|
-
return
|
|
49
|
+
const adapter = new AdapterClass(conf, undefined, this.pluginManager);
|
|
50
|
+
this.adapterCache.set(key, adapter);
|
|
51
|
+
return { adapter, trackId };
|
|
48
52
|
}
|
|
49
53
|
}), 'failed to load text search adapter');
|
|
50
54
|
}
|
|
51
55
|
relevantAdapters(assemblyName) {
|
|
56
|
+
return this.relevantIndexes(assemblyName).map(index => index.conf);
|
|
57
|
+
}
|
|
58
|
+
relevantIndexes(assemblyName) {
|
|
52
59
|
const { rootModel } = this.pluginManager;
|
|
53
60
|
// jbrowse is typed as a bare state tree node, so its config slots need a
|
|
54
61
|
// shape assertion; both it and the session are absent until a session is
|
|
@@ -65,9 +72,10 @@ export default class TextSearchManager {
|
|
|
65
72
|
: names.filter(name => !!name);
|
|
66
73
|
const [wanted] = canonical([assemblyName]);
|
|
67
74
|
const matches = (names) => !!wanted && !!names && canonical(names).includes(wanted);
|
|
75
|
+
const session = rootModel?.session;
|
|
68
76
|
return [
|
|
69
|
-
...this.getAdaptersWithAssembly(matches, aggregateTextSearchAdapters),
|
|
70
|
-
...this.getTrackAdaptersWithAssembly(matches,
|
|
77
|
+
...this.getAdaptersWithAssembly(matches, aggregateTextSearchAdapters).map(conf => ({ conf })),
|
|
78
|
+
...this.getTrackAdaptersWithAssembly(matches, session ? allSessionTracks(session) : []),
|
|
71
79
|
];
|
|
72
80
|
}
|
|
73
81
|
getAdaptersWithAssembly(matches, confs) {
|
|
@@ -75,24 +83,57 @@ export default class TextSearchManager {
|
|
|
75
83
|
}
|
|
76
84
|
getTrackAdaptersWithAssembly(matches, confs) {
|
|
77
85
|
return confs
|
|
78
|
-
.filter(conf =>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
.filter(conf => {
|
|
87
|
+
const indexNames = readConfObject(conf, [
|
|
88
|
+
'textSearching',
|
|
89
|
+
'textSearchAdapter',
|
|
90
|
+
'assemblyNames',
|
|
91
|
+
]);
|
|
92
|
+
return (!!readConfObject(conf, ['textSearching', 'textSearchAdapter']) &&
|
|
93
|
+
matches(indexNames?.length
|
|
94
|
+
? indexNames
|
|
95
|
+
: readConfObject(conf, 'assemblyNames')));
|
|
96
|
+
})
|
|
97
|
+
.flatMap(track => {
|
|
98
|
+
const live = isStateTreeNode(track)
|
|
99
|
+
? track
|
|
100
|
+
: hydrateTrackConfig(this.pluginManager, track);
|
|
101
|
+
const conf = live?.textSearching.textSearchAdapter;
|
|
102
|
+
return conf
|
|
103
|
+
? [{ conf, trackId: readConfObject(track, 'trackId') }]
|
|
104
|
+
: [];
|
|
105
|
+
});
|
|
84
106
|
}
|
|
85
107
|
async search(args, assemblyName) {
|
|
86
|
-
|
|
87
|
-
|
|
108
|
+
return (await this.searchIndexes(args, assemblyName)).results;
|
|
109
|
+
}
|
|
110
|
+
async searchIndexes(args, assemblyName) {
|
|
111
|
+
const loaded = await this.loadTextSearchAdapters(assemblyName);
|
|
112
|
+
const searched = await settle(loaded.values.map(async ({ adapter, trackId }) => {
|
|
113
|
+
const found = await adapter.searchIndex(args);
|
|
114
|
+
// a per-track index answers for its track, whether or not its records
|
|
115
|
+
// name it — a UCSC hub's index holds only feature names
|
|
116
|
+
if (trackId) {
|
|
117
|
+
for (const result of found) {
|
|
118
|
+
result.trackId ??= trackId;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return found;
|
|
122
|
+
}), 'text search adapter failed');
|
|
88
123
|
// the ranking below is the expensive half — a dynamic import plus a fuzzy
|
|
89
124
|
// sort over every hit — and a superseded keystroke has no use for it.
|
|
90
|
-
// Checked here rather than only inside the adapters because
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
125
|
+
// Checked here rather than only inside the adapters because settle drops an
|
|
126
|
+
// abort thrown by one of them, which would otherwise land here as "no
|
|
127
|
+
// results from that index" and rank the rest
|
|
128
|
+
checkAbortSignal(args.signal);
|
|
129
|
+
return {
|
|
130
|
+
results: await this.sortResults({
|
|
131
|
+
args,
|
|
132
|
+
results: searched.values.flat(),
|
|
133
|
+
}),
|
|
134
|
+
indexCount: loaded.values.length + loaded.failures.length,
|
|
135
|
+
failures: [...loaded.failures, ...searched.failures],
|
|
136
|
+
};
|
|
96
137
|
}
|
|
97
138
|
// Ranks, never filters: the adapters have already decided what matches, and
|
|
98
139
|
// they match against attributes the display string does not always carry (a
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Assembly } from '../assemblyManager/assembly.ts';
|
|
2
|
+
import type BaseResult from './BaseResults.ts';
|
|
3
|
+
export declare function canonicalLocString(locString: string, assembly: Assembly): string;
|
|
4
|
+
/**
|
|
5
|
+
* Hits grouped by the place they go, groups and members in the order given.
|
|
6
|
+
* Hits are one place when they carry one name and either the same location or
|
|
7
|
+
* overlapping spans on one sequence: two gene tracks drawing one gene with
|
|
8
|
+
* slightly different ends answer one place, not a choice. A hit with no
|
|
9
|
+
* location, or one the assembly cannot yet resolve into a span, joins only an
|
|
10
|
+
* identical locstring.
|
|
11
|
+
*/
|
|
12
|
+
export declare function groupByPlace(results: BaseResult[], assembly?: Assembly): BaseResult[][];
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { assembleLocString, parseLocString } from '../util/index.js';
|
|
2
|
+
// One spelling of a locstring, so two indexes that answer `chr1:1-100` and
|
|
3
|
+
// `1:1..100` are recognised as one place. An unparseable string is compared
|
|
4
|
+
// raw, which can only split a group that would otherwise have merged.
|
|
5
|
+
export function canonicalLocString(locString, assembly) {
|
|
6
|
+
try {
|
|
7
|
+
const loc = parseLocString(locString, refName => assembly.isValidRefName(refName));
|
|
8
|
+
return assembleLocString({
|
|
9
|
+
...loc,
|
|
10
|
+
refName: assembly.getCanonicalRefName2(loc.refName),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
console.warn('failed to parse location string', locString, e);
|
|
15
|
+
return locString;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function spanOf(locString, assembly) {
|
|
19
|
+
try {
|
|
20
|
+
const { refName, start, end } = parseLocString(locString, r => assembly.isValidRefName(r));
|
|
21
|
+
return start === undefined || end === undefined
|
|
22
|
+
? undefined
|
|
23
|
+
: { refName: assembly.getCanonicalRefName2(refName), start, end };
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Hits grouped by the place they go, groups and members in the order given.
|
|
31
|
+
* Hits are one place when they carry one name and either the same location or
|
|
32
|
+
* overlapping spans on one sequence: two gene tracks drawing one gene with
|
|
33
|
+
* slightly different ends answer one place, not a choice. A hit with no
|
|
34
|
+
* location, or one the assembly cannot yet resolve into a span, joins only an
|
|
35
|
+
* identical locstring.
|
|
36
|
+
*/
|
|
37
|
+
export function groupByPlace(results, assembly) {
|
|
38
|
+
const root = results.map((_, i) => i);
|
|
39
|
+
const find = (i) => root[i] === i ? i : (root[i] = find(root[i]));
|
|
40
|
+
const join = (a, b) => {
|
|
41
|
+
const ra = find(a);
|
|
42
|
+
const rb = find(b);
|
|
43
|
+
root[Math.max(ra, rb)] = Math.min(ra, rb);
|
|
44
|
+
};
|
|
45
|
+
const resolved = !!assembly?.initialized;
|
|
46
|
+
const firstAt = new Map();
|
|
47
|
+
const spans = [];
|
|
48
|
+
for (const [i, result] of results.entries()) {
|
|
49
|
+
const locString = result.getLocation();
|
|
50
|
+
if (locString) {
|
|
51
|
+
const name = result.getDisplayString();
|
|
52
|
+
const key = [
|
|
53
|
+
name,
|
|
54
|
+
resolved ? canonicalLocString(locString, assembly) : locString,
|
|
55
|
+
].join('\u0000');
|
|
56
|
+
const seen = firstAt.get(key);
|
|
57
|
+
if (seen === undefined) {
|
|
58
|
+
firstAt.set(key, i);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
join(seen, i);
|
|
62
|
+
}
|
|
63
|
+
const span = resolved ? spanOf(locString, assembly) : undefined;
|
|
64
|
+
if (span) {
|
|
65
|
+
spans.push({ i, seq: [name, span.refName].join('\u0000'), ...span });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
spans.sort((a, b) => a.seq === b.seq ? a.start - b.start : a.seq < b.seq ? -1 : 1);
|
|
70
|
+
let run;
|
|
71
|
+
let runEnd = 0;
|
|
72
|
+
for (const span of spans) {
|
|
73
|
+
if (run?.seq === span.seq && span.start < runEnd) {
|
|
74
|
+
join(run.i, span.i);
|
|
75
|
+
runEnd = Math.max(runEnd, span.end);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
run = span;
|
|
79
|
+
runEnd = span.end;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const groups = new Map();
|
|
83
|
+
for (const [i, result] of results.entries()) {
|
|
84
|
+
const r = find(i);
|
|
85
|
+
const group = groups.get(r);
|
|
86
|
+
if (group) {
|
|
87
|
+
group.push(result);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
groups.set(r, [result]);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return [...groups.values()];
|
|
94
|
+
}
|