@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/PluginLoader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { enableContractReports } from '@jbrowse/render-core/contractReports';
|
|
2
|
+
import { loudOnMissingModule, setReExportRegistry, } from './ReExports/registry.js';
|
|
3
|
+
import { isESMPluginDefinition, isUMDPluginDefinition, maybePluginUrl, pluginDescriptionString, pluginLabel, } from './pluginDefinitions.js';
|
|
4
4
|
import { isWebWorker } from './util/isWebWorker.js';
|
|
5
5
|
/**
|
|
6
6
|
* A definition names exactly one loader. More than one is malformed — no real
|
|
@@ -11,7 +11,6 @@ import { isWebWorker } from './util/isWebWorker.js';
|
|
|
11
11
|
*/
|
|
12
12
|
function assertSingleKind(def) {
|
|
13
13
|
const kinds = [
|
|
14
|
-
isCJSPluginDefinition(def) ? 'CJS' : undefined,
|
|
15
14
|
isESMPluginDefinition(def) ? 'ESM' : undefined,
|
|
16
15
|
isUMDPluginDefinition(def) ? 'UMD' : undefined,
|
|
17
16
|
].filter(kind => kind !== undefined);
|
|
@@ -19,6 +18,20 @@ function assertSingleKind(def) {
|
|
|
19
18
|
throw new Error(`Plugin definition names more than one plugin type (${kinds.join(', ')}), refusing to load: ${JSON.stringify(def)}`);
|
|
20
19
|
}
|
|
21
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* A `cjsUrl` definition loaded by writing the bundle to a temp file and
|
|
23
|
+
* `require`ing it in Electron's renderer, the one loader that needed Node. That
|
|
24
|
+
* renderer runs UMD and ESM, and a plugin reaching the main process does it
|
|
25
|
+
* through `window.require('electron')` whatever format it ships in, so the
|
|
26
|
+
* format bought nothing its two peers do not. Name the successor rather than
|
|
27
|
+
* letting the definition fall through to "could not determine plugin type",
|
|
28
|
+
* which reads as a malformed config.
|
|
29
|
+
*/
|
|
30
|
+
function assertRetiredKinds(def) {
|
|
31
|
+
if ('cjsUrl' in def) {
|
|
32
|
+
throw new Error(`CJS plugins are no longer loaded (${String(def.cjsUrl)}). Publish the plugin as UMD or ESM and name it with umdUrl or esmUrl.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
22
35
|
function promisifiedLoadScript(src, integrity) {
|
|
23
36
|
return new Promise((resolve, reject) => {
|
|
24
37
|
const script = document.createElement('script');
|
|
@@ -45,22 +58,48 @@ function promisifiedLoadScript(src, integrity) {
|
|
|
45
58
|
function hasImportScripts(scope) {
|
|
46
59
|
return 'importScripts' in scope;
|
|
47
60
|
}
|
|
61
|
+
// A *module* worker has importScripts on its global but throws from it — the
|
|
62
|
+
// spec forbids it there, and the browser says so ("Module scripts don't support
|
|
63
|
+
// importScripts"). That is the whole failure for a UMD plugin in a bundler
|
|
64
|
+
// configured for module workers (Vite's `worker.format: 'es'`), and it reads as
|
|
65
|
+
// a broken plugin unless named. Every other throw is the script's own — a 404,
|
|
66
|
+
// or a bundle that dereferences `window` in a realm that has none — and the
|
|
67
|
+
// script's words are the diagnosis, so they are kept rather than replaced.
|
|
68
|
+
export function workerScriptLoadMessage(scriptUrl, error) {
|
|
69
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
70
|
+
return /module script/i.test(detail)
|
|
71
|
+
? `Failed to load ${scriptUrl} in the worker. A UMD plugin is loaded there via importScripts, which module workers do not support — either build the worker as a classic worker, or use a plugin published as ESM.`
|
|
72
|
+
: `Failed to load ${scriptUrl} in the worker: ${detail}`;
|
|
73
|
+
}
|
|
74
|
+
const workerPrefetches = new Map();
|
|
75
|
+
/**
|
|
76
|
+
* `importScripts` blocks until its file arrives, so a worker loading its
|
|
77
|
+
* plugins with it waited one round trip per plugin, in a row. Fetching them all
|
|
78
|
+
* first makes each `importScripts` a cache read — provided the fetch is the
|
|
79
|
+
* request `importScripts` makes: no-cors, with credentials. Chrome and Firefox
|
|
80
|
+
* both re-download for any other mode (probe-worker-script-cache.ts).
|
|
81
|
+
*/
|
|
82
|
+
function prefetchWorkerScript(url) {
|
|
83
|
+
if (!workerPrefetches.has(url)) {
|
|
84
|
+
workerPrefetches.set(url, fetch(url, { mode: 'no-cors', credentials: 'include' })
|
|
85
|
+
.then(r => r.arrayBuffer())
|
|
86
|
+
.then(() => { }, () => { }));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
48
89
|
async function loadScript(scriptUrl, integrity) {
|
|
49
90
|
const scope = globalThis;
|
|
50
91
|
if (!isWebWorker()) {
|
|
51
92
|
return promisifiedLoadScript(scriptUrl, integrity);
|
|
52
93
|
}
|
|
53
94
|
else if (hasImportScripts(scope)) {
|
|
95
|
+
await workerPrefetches.get(scriptUrl);
|
|
54
96
|
try {
|
|
55
97
|
scope.importScripts(scriptUrl);
|
|
56
98
|
}
|
|
57
99
|
catch (error) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// 'es'`), and the raw TypeError names none of it, so it reads as a broken
|
|
62
|
-
// plugin rather than an incompatible pairing.
|
|
63
|
-
throw new Error(`Failed to load ${scriptUrl} in the worker. A UMD plugin is loaded there via importScripts, which module workers do not support — either build the worker as a classic worker, or use a plugin published as ESM.`, { cause: error });
|
|
100
|
+
throw new Error(workerScriptLoadMessage(scriptUrl, error), {
|
|
101
|
+
cause: error,
|
|
102
|
+
});
|
|
64
103
|
}
|
|
65
104
|
return;
|
|
66
105
|
}
|
|
@@ -97,6 +136,34 @@ function resolvePluginUrl(spec, base) {
|
|
|
97
136
|
}
|
|
98
137
|
return url;
|
|
99
138
|
}
|
|
139
|
+
// A plugin served from the developer's own machine into an app built for
|
|
140
|
+
// production is the one arrangement that can only be a plugin under
|
|
141
|
+
// development: a shipped site serves its plugins from its own origin, and a
|
|
142
|
+
// developer running the app itself from source already has a development build.
|
|
143
|
+
// So it is the evidence that arms the contract channel without anything for the
|
|
144
|
+
// author to know about first — which is the whole difficulty the channel had,
|
|
145
|
+
// since the population it is written for is the one with nobody to ask. See
|
|
146
|
+
// `@jbrowse/render-core/contractReports`.
|
|
147
|
+
function armIfUnderDevelopment(def) {
|
|
148
|
+
const url = maybePluginUrl(def);
|
|
149
|
+
if (url !== undefined && servedFromThisMachine(url)) {
|
|
150
|
+
enableContractReports(`the plugin at ${url} is served from this machine`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function servedFromThisMachine(url) {
|
|
154
|
+
try {
|
|
155
|
+
const { hostname, protocol } = new URL(url);
|
|
156
|
+
return ((protocol === 'http:' || protocol === 'https:') &&
|
|
157
|
+
(hostname === 'localhost' ||
|
|
158
|
+
hostname === '127.0.0.1' ||
|
|
159
|
+
hostname === '[::1]'));
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// a relative url is a plugin shipped beside this index.html, which is the
|
|
163
|
+
// site's own rather than one under development
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
100
167
|
function addCacheBuster(url) {
|
|
101
168
|
if (!('__jbrowseCacheBuster' in globalThis)) {
|
|
102
169
|
return url;
|
|
@@ -105,22 +172,66 @@ function addCacheBuster(url) {
|
|
|
105
172
|
u.searchParams.set('_cb', Date.now().toString());
|
|
106
173
|
return u.href;
|
|
107
174
|
}
|
|
175
|
+
function umdPluginUrl(def, baseUri) {
|
|
176
|
+
return 'url' in def
|
|
177
|
+
? resolvePluginUrl(def.url, baseUri)
|
|
178
|
+
: 'umdUrl' in def
|
|
179
|
+
? resolvePluginUrl(def.umdUrl, baseUri)
|
|
180
|
+
: resolvePluginUrl(def.umdLoc.uri, def.umdLoc.baseUri);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* The registry has to be published before a plugin bundle runs, but not before
|
|
184
|
+
* it downloads, so each bundle is preloaded while the registry is fetched.
|
|
185
|
+
* Skipped under the cache-buster, whose query string differs per request.
|
|
186
|
+
*
|
|
187
|
+
* Exported for a worker told its plugins ahead of its boot configuration.
|
|
188
|
+
*/
|
|
189
|
+
export function preloadUMDBundles(defs, baseUri) {
|
|
190
|
+
if ('__jbrowseCacheBuster' in globalThis) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (isWebWorker()) {
|
|
194
|
+
for (const def of defs) {
|
|
195
|
+
if (isUMDPluginDefinition(def)) {
|
|
196
|
+
try {
|
|
197
|
+
prefetchWorkerScript(umdPluginUrl(def, baseUri).href);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// loadPlugin reports a url it cannot resolve
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (typeof document === 'undefined') {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
for (const def of defs) {
|
|
210
|
+
if (isUMDPluginDefinition(def)) {
|
|
211
|
+
try {
|
|
212
|
+
const link = document.createElement('link');
|
|
213
|
+
link.rel = 'preload';
|
|
214
|
+
link.as = 'script';
|
|
215
|
+
if (def.integrity) {
|
|
216
|
+
link.setAttribute('integrity', def.integrity);
|
|
217
|
+
link.setAttribute('crossorigin', 'anonymous');
|
|
218
|
+
}
|
|
219
|
+
link.href = umdPluginUrl(def, baseUri).href;
|
|
220
|
+
document.head.append(link);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// loadPlugin reports a url it cannot resolve
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
108
228
|
export default class PluginLoader {
|
|
109
229
|
definitions = [];
|
|
110
230
|
fetchESM;
|
|
111
|
-
fetchCJS;
|
|
112
231
|
constructor(defs = [], args) {
|
|
113
232
|
this.fetchESM = args?.fetchESM;
|
|
114
|
-
this.fetchCJS = args?.fetchCJS;
|
|
115
233
|
this.definitions = structuredClone(defs);
|
|
116
234
|
}
|
|
117
|
-
async loadCJSPlugin(def, baseUri) {
|
|
118
|
-
const parsedUrl = resolvePluginUrl(def.cjsUrl, baseUri);
|
|
119
|
-
if (!this.fetchCJS) {
|
|
120
|
-
throw new Error('No fetchCJS callback provided');
|
|
121
|
-
}
|
|
122
|
-
return this.fetchCJS(parsedUrl.href);
|
|
123
|
-
}
|
|
124
235
|
async loadESMPlugin(def, baseUri) {
|
|
125
236
|
const parsedUrl = 'esmUrl' in def
|
|
126
237
|
? resolvePluginUrl(def.esmUrl, baseUri)
|
|
@@ -136,11 +247,7 @@ export default class PluginLoader {
|
|
|
136
247
|
return plugin;
|
|
137
248
|
}
|
|
138
249
|
async loadUMDPlugin(def, baseUri) {
|
|
139
|
-
const parsedUrl =
|
|
140
|
-
? resolvePluginUrl(def.url, baseUri)
|
|
141
|
-
: 'umdUrl' in def
|
|
142
|
-
? resolvePluginUrl(def.umdUrl, baseUri)
|
|
143
|
-
: resolvePluginUrl(def.umdLoc.uri, def.umdLoc.baseUri);
|
|
250
|
+
const parsedUrl = umdPluginUrl(def, baseUri);
|
|
144
251
|
const moduleName = def.name;
|
|
145
252
|
const umdName = `JBrowsePlugin${moduleName}`;
|
|
146
253
|
// a cache buster query string would change the bytes the browser hashes for
|
|
@@ -154,15 +261,11 @@ export default class PluginLoader {
|
|
|
154
261
|
return plugin;
|
|
155
262
|
}
|
|
156
263
|
async loadPlugin(def, baseUri) {
|
|
264
|
+
assertRetiredKinds(def);
|
|
157
265
|
assertSingleKind(def);
|
|
266
|
+
armIfUnderDevelopment(def);
|
|
158
267
|
let plugin;
|
|
159
|
-
if (
|
|
160
|
-
if (!isElectron) {
|
|
161
|
-
throw new Error(`CommonJS plugin found, but not in a NodeJS environment: ${JSON.stringify(def)}`);
|
|
162
|
-
}
|
|
163
|
-
plugin = await this.loadCJSPlugin(def, baseUri);
|
|
164
|
-
}
|
|
165
|
-
else if (isESMPluginDefinition(def)) {
|
|
268
|
+
if (isESMPluginDefinition(def)) {
|
|
166
269
|
plugin = await this.loadESMPlugin(def, baseUri);
|
|
167
270
|
}
|
|
168
271
|
else if (isUMDPluginDefinition(def)) {
|
|
@@ -177,35 +280,36 @@ export default class PluginLoader {
|
|
|
177
280
|
}
|
|
178
281
|
return plugin.default;
|
|
179
282
|
}
|
|
180
|
-
|
|
283
|
+
reExports;
|
|
181
284
|
/**
|
|
182
285
|
* Ask for the runtime ABI (`JBrowseExports`) to be published on `target`
|
|
183
|
-
* before any plugin bundle is evaluated. Records the target
|
|
184
|
-
*
|
|
286
|
+
* before any plugin bundle is evaluated. Records the target and the loader;
|
|
287
|
+
* `loadSettled` fetches the registry, a ~126 KB gzipped module only a runtime
|
|
288
|
+
* plugin can use (see `ReExports/registry.ts` for why it cannot shrink).
|
|
185
289
|
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
290
|
+
* `registry` is the product's generated map — `reExports.generated.ts` on
|
|
291
|
+
* the main thread, `workerReExports.generated.ts` in its worker — which
|
|
292
|
+
* serves every `@jbrowse` package the product bundles. The caller names it
|
|
293
|
+
* because the registry serves this module: an `import()` of it from here is
|
|
294
|
+
* a cycle rolldown keeps in any host bundling this file, whether or not
|
|
295
|
+
* anything loads a plugin (EAGER_BUNDLE.md §3).
|
|
191
296
|
*/
|
|
192
|
-
installGlobalReExports(target) {
|
|
193
|
-
this.
|
|
297
|
+
installGlobalReExports(target, registry) {
|
|
298
|
+
this.reExports = { target, registry };
|
|
194
299
|
return this;
|
|
195
300
|
}
|
|
196
301
|
async publishReExports() {
|
|
197
|
-
|
|
198
|
-
if (!target) {
|
|
302
|
+
if (!this.reExports) {
|
|
199
303
|
return;
|
|
200
304
|
}
|
|
201
|
-
const {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
305
|
+
const { target, registry } = this.reExports;
|
|
306
|
+
const { default: ReExports } = await registry();
|
|
307
|
+
target.JBrowseExports =
|
|
308
|
+
loudOnMissingModule({ ...ReExports });
|
|
205
309
|
// the synchronous half: `pluginManager.jbrequire(name)` is what a CJS
|
|
206
310
|
// plugin calls, and it cannot await
|
|
207
311
|
setReExportRegistry(ReExports);
|
|
208
|
-
this.
|
|
312
|
+
this.reExports = undefined;
|
|
209
313
|
}
|
|
210
314
|
/**
|
|
211
315
|
* Loads every definition and separates the ones that worked from the ones
|
|
@@ -224,6 +328,7 @@ export default class PluginLoader {
|
|
|
224
328
|
* fail renders with a much worse message) keep using `load`.
|
|
225
329
|
*/
|
|
226
330
|
async loadSettled(baseUri) {
|
|
331
|
+
preloadUMDBundles(this.definitions, baseUri);
|
|
227
332
|
// before the first plugin script evaluates — a UMD bundle reads
|
|
228
333
|
// `JBrowseExports` off the global at module scope
|
|
229
334
|
await this.publishReExports();
|
|
@@ -249,9 +354,20 @@ export default class PluginLoader {
|
|
|
249
354
|
async load(baseUri) {
|
|
250
355
|
const { records, failures } = await this.loadSettled(baseUri);
|
|
251
356
|
// rethrown by definition order rather than by which rejected first, so the
|
|
252
|
-
// error a strict caller sees doesn't depend on network timing
|
|
253
|
-
|
|
254
|
-
|
|
357
|
+
// error a strict caller sees doesn't depend on network timing.
|
|
358
|
+
//
|
|
359
|
+
// Named, because the RPC worker calls this: a plugin that throws while
|
|
360
|
+
// evaluating takes the whole RpcServer with it, and the bare error is
|
|
361
|
+
// whatever the bundle's module scope said — `Cannot read properties of
|
|
362
|
+
// undefined`, or the missing ABI key — with nothing saying which plugin
|
|
363
|
+
// read it. The message is carried rather than the error, since this one
|
|
364
|
+
// crosses postMessage and `serializeError` cannot clone an arbitrary
|
|
365
|
+
// `cause`.
|
|
366
|
+
const failure = failures[0];
|
|
367
|
+
if (failure) {
|
|
368
|
+
const { definition, error } = failure;
|
|
369
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
370
|
+
throw new Error(`plugin ${pluginLabel(definition)} failed: ${detail}`);
|
|
255
371
|
}
|
|
256
372
|
return records;
|
|
257
373
|
}
|
package/esm/PluginManager.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import PhasedScheduler from './PhasedScheduler.ts';
|
|
2
2
|
import './util/tracks.ts';
|
|
3
3
|
import type Plugin from './Plugin.ts';
|
|
4
|
+
import type { PluginConstructor } from './Plugin.ts';
|
|
5
|
+
import type { PluggableConfigNode } from './configuration/index.ts';
|
|
4
6
|
import type AdapterType from './pluggableElementTypes/AdapterType.ts';
|
|
5
7
|
import type AddTrackWorkflowType from './pluggableElementTypes/AddTrackWorkflowType.ts';
|
|
6
8
|
import type ConnectionType from './pluggableElementTypes/ConnectionType.ts';
|
|
@@ -20,8 +22,14 @@ import './ui/buildExtraTrackMenuItems.ts';
|
|
|
20
22
|
import './ui/multiTrackMenuItems.ts';
|
|
21
23
|
import './util/addTrackComponent.ts';
|
|
22
24
|
import type { AbstractRootModel, AbstractSessionModel, SimpleFeatureSerialized } from './util/index.ts';
|
|
23
|
-
import type { IAnyModelType, IStateTreeNode,
|
|
25
|
+
import type { IAnyModelType, IAnyType, IStateTreeNode, IType, SnapshotIn } from '@jbrowse/mobx-state-tree';
|
|
24
26
|
import type { ComponentType, ReactNode } from 'react';
|
|
27
|
+
/**
|
|
28
|
+
* What `pluggableConfigSchemaType` builds: a union whose members are checked
|
|
29
|
+
* at runtime, read as a config node carrying the `type` every member names
|
|
30
|
+
* itself by; a member's other slots read through `getConf`.
|
|
31
|
+
*/
|
|
32
|
+
export type PluggableConfigSchemaType = IType<any, any, PluggableConfigNode>;
|
|
25
33
|
/**
|
|
26
34
|
* Every pluggable element group, in the order `elementCreationSchedule` builds
|
|
27
35
|
* them. The array is the declaration and the union is derived from it, so a
|
|
@@ -31,6 +39,12 @@ import type { ComponentType, ReactNode } from 'react';
|
|
|
31
39
|
*/
|
|
32
40
|
export declare const pluggableElementTypeGroups: readonly ['adapter', 'text search adapter', 'display', 'track', 'connection', 'view', 'widget', 'rpc method', 'internet account', 'add track workflow'];
|
|
33
41
|
export type PluggableElementTypeGroup = (typeof pluggableElementTypeGroups)[number];
|
|
42
|
+
/**
|
|
43
|
+
* The group a `pluggableMstType(group, 'stateModel')` union holds, read off
|
|
44
|
+
* its name: with every member a lazy model not yet loaded, the union has no
|
|
45
|
+
* members to recognise it by.
|
|
46
|
+
*/
|
|
47
|
+
export declare function pluggableStateModelGroup(type: IAnyType): "adapter" | "add track workflow" | "connection" | "display" | "internet account" | "rpc method" | "text search adapter" | "track" | "view" | "widget" | undefined;
|
|
34
48
|
/** internal class that holds the info for a certain element type */
|
|
35
49
|
declare class TypeRecord<ElementClass extends PluggableElementBase> {
|
|
36
50
|
registeredTypes: Record<string, ElementClass>;
|
|
@@ -110,8 +124,10 @@ type WidgetModel = FeatureWidgetModel & {
|
|
|
110
124
|
export interface FeaturePanelProps {
|
|
111
125
|
/** has `trackId` and `trackType` */
|
|
112
126
|
model: FeatureWidgetModel;
|
|
113
|
-
/** snapshot of the feature being shown */
|
|
127
|
+
/** snapshot of the feature being shown, as `formatDetails` reshaped it */
|
|
114
128
|
feature: SimpleFeatureSerialized;
|
|
129
|
+
/** the same feature before `formatDetails` ran */
|
|
130
|
+
unformatted?: SimpleFeatureSerialized;
|
|
115
131
|
/**
|
|
116
132
|
* how far down the subfeature tree this card is: 0 is the feature the user
|
|
117
133
|
* clicked, 1 its subfeatures, and so on. The point fires for every card, so a
|
|
@@ -137,7 +153,18 @@ export interface ReplaceWidgetProps {
|
|
|
137
153
|
*
|
|
138
154
|
* That is what makes `extendViewType(pm, 'LinearGenomeView', …)` hand back a
|
|
139
155
|
* typed state model, and a misspelled or renamed name a compile error rather
|
|
140
|
-
* than an extension that quietly never applies.
|
|
156
|
+
* than an extension that quietly never applies. `getViewType` reads it too, so
|
|
157
|
+
* a caller composing another view's model into its own gets the real type
|
|
158
|
+
* instead of `IAnyModelType`.
|
|
159
|
+
*
|
|
160
|
+
* AN AUGMENTATION IS HAND-WRITTEN, so each registration annotates the model it
|
|
161
|
+
* passes to `ViewType` against its own entry here (`const stateModel:
|
|
162
|
+
* ViewTypeRegistry['CircularView'] = …`). That one line is what makes the
|
|
163
|
+
* registry earn what `getViewType` promises: without it a drifted entry is
|
|
164
|
+
* worse than the `IAnyModelType` it replaced, since a caller would get a
|
|
165
|
+
* confidently wrong type rather than an unchecked one. It cannot live on
|
|
166
|
+
* `ViewType`'s constructor — TypeScript forbids type parameters there, and a
|
|
167
|
+
* class parameter widens `name` to `string`, so the conditional never fires. Declaring them here rather than
|
|
141
168
|
* beside the helpers is load-bearing: an interface can only be augmented
|
|
142
169
|
* through the module that declares it, and a barrel re-exporting the type would
|
|
143
170
|
* give every augmentation its own unrelated copy.
|
|
@@ -148,6 +175,33 @@ export interface DisplayTypeRegistry {
|
|
|
148
175
|
}
|
|
149
176
|
export type ViewTypeName = keyof ViewTypeRegistry;
|
|
150
177
|
export type DisplayTypeName = keyof DisplayTypeRegistry;
|
|
178
|
+
/**
|
|
179
|
+
* What `addView(name, snapshot)` takes for a view type name. A registered name
|
|
180
|
+
* gets the view's authored shape — the snapshot type `withLaunchInput` widened
|
|
181
|
+
* to accept the launch keys beside the declared properties — so a misspelled
|
|
182
|
+
* key is a compile error at the literal site. `type` is optional because
|
|
183
|
+
* `addView` writes it. An unregistered name stays `Record<string, unknown>`,
|
|
184
|
+
* which is what an out-of-tree view's `addView` has always been.
|
|
185
|
+
*
|
|
186
|
+
* Read off `ViewTypeRegistry` rather than registered a second time, so the
|
|
187
|
+
* snapshot type cannot drift from the model: a view that augments the registry
|
|
188
|
+
* has typed `addView`, `replaceView` and `addOrReplaceView` for free.
|
|
189
|
+
*/
|
|
190
|
+
export type ViewSnapshotInput<N extends string> = N extends ViewTypeName ? Omit<SnapshotIn<ViewTypeRegistry[N]>, 'type'> & {
|
|
191
|
+
type?: N;
|
|
192
|
+
} : Record<string, unknown>;
|
|
193
|
+
/**
|
|
194
|
+
* what a plugin knows of an assembly the session does not hold, answered
|
|
195
|
+
* without connecting anything: its assembly config as the config holding it
|
|
196
|
+
* writes it, a relative uri carrying the `baseUri` it resolves against, and
|
|
197
|
+
* the adapter of its gene track. A multi-way synteny display holds the
|
|
198
|
+
* assembly as a temporary one while it draws that genome's lane, so renaming
|
|
199
|
+
* reaches its sequence and aliases the way it reaches any assembly's
|
|
200
|
+
*/
|
|
201
|
+
export interface AssemblyDescription {
|
|
202
|
+
assembly?: Record<string, unknown>;
|
|
203
|
+
geneAdapter?: Record<string, unknown>;
|
|
204
|
+
}
|
|
151
205
|
export interface ExtensionPointRegistry {
|
|
152
206
|
'Core-extendSession': {
|
|
153
207
|
args: IAnyModelType;
|
|
@@ -167,6 +221,14 @@ export interface ExtensionPointRegistry {
|
|
|
167
221
|
session?: unknown;
|
|
168
222
|
};
|
|
169
223
|
};
|
|
224
|
+
'Core-describeAssemblies': {
|
|
225
|
+
args: Record<string, AssemblyDescription>;
|
|
226
|
+
result: Record<string, AssemblyDescription>;
|
|
227
|
+
props: {
|
|
228
|
+
assemblyNames: string[];
|
|
229
|
+
session?: unknown;
|
|
230
|
+
};
|
|
231
|
+
};
|
|
170
232
|
'Core-extendPluggableElement': {
|
|
171
233
|
args: PluggableElementType;
|
|
172
234
|
result: PluggableElementType;
|
|
@@ -264,18 +326,28 @@ export interface PluginLoadRecord {
|
|
|
264
326
|
metadata?: PluginMetadata;
|
|
265
327
|
plugin: Plugin;
|
|
266
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Instantiate an application's bundled plugin list as `isCore` load records —
|
|
331
|
+
* what tells the plugin store these came with the bundle rather than being
|
|
332
|
+
* installed by the user, so `InstalledPluginsList` filters them out and the
|
|
333
|
+
* About widget lists them. Every product and every test harness builds its
|
|
334
|
+
* manager from one of these lists, and a harness that passed bare instances
|
|
335
|
+
* silently disagreed with the app it was testing.
|
|
336
|
+
*/
|
|
337
|
+
export declare function corePluginRecords(plugins: PluginConstructor[]): PluginLoadRecord[];
|
|
267
338
|
export interface RuntimePluginLoadRecord extends PluginLoadRecord {
|
|
268
339
|
definition: PluginDefinition;
|
|
269
340
|
}
|
|
270
341
|
export default class PluginManager {
|
|
342
|
+
#private;
|
|
271
343
|
plugins: Plugin[];
|
|
272
344
|
jexl: import("@jbrowse/jexl").Jexl;
|
|
273
345
|
pluginMetadata: Record<string, PluginMetadata>;
|
|
274
346
|
runtimePluginDefinitions: PluginDefinition[];
|
|
275
347
|
elementCreationSchedule: PhasedScheduler<"adapter" | "add track workflow" | "connection" | "display" | "internet account" | "rpc method" | "text search adapter" | "track" | "view" | "widget">;
|
|
276
348
|
pluggableElementsCreated: boolean;
|
|
277
|
-
adapterTypes: TypeRecord<AdapterType
|
|
278
|
-
textSearchAdapterTypes: TypeRecord<TextSearchAdapterType
|
|
349
|
+
adapterTypes: TypeRecord<AdapterType<any>>;
|
|
350
|
+
textSearchAdapterTypes: TypeRecord<TextSearchAdapterType<any>>;
|
|
279
351
|
trackTypes: TypeRecord<TrackType>;
|
|
280
352
|
displayTypes: TypeRecord<DisplayType>;
|
|
281
353
|
connectionTypes: TypeRecord<ConnectionType>;
|
|
@@ -289,25 +361,27 @@ export default class PluginManager {
|
|
|
289
361
|
extensionPoints: Map<string, ExtensionPointCallback[]>;
|
|
290
362
|
warnedClobber: Set<string>;
|
|
291
363
|
/**
|
|
292
|
-
*
|
|
293
|
-
* `
|
|
364
|
+
* The lazily-hydrated MST config node for one frozen track config, built by
|
|
365
|
+
* `build` on first ask and returned by identity after that.
|
|
366
|
+
* `configuration/configurationSchema.ts` is the only caller.
|
|
367
|
+
*
|
|
294
368
|
* `jbrowse.tracks` is `types.frozen` for large-tracklist performance, so a
|
|
295
|
-
* track config is a plain JS object until first referenced; hydrating it
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
*
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
* See ADR-031.
|
|
369
|
+
* track config is a plain JS object until first referenced; hydrating it into
|
|
370
|
+
* an MST node is deferred to that read. MST's custom-reference `getValue` has
|
|
371
|
+
* no memoization of its own — it reruns on every property access — so without
|
|
372
|
+
* this, every read of `track.configuration` would fabricate a fresh,
|
|
373
|
+
* non-identical node. Keyed by schemaType (each track type's config schema is
|
|
374
|
+
* rebuilt fresh per PluginManager instance, see addTrackType) then by the
|
|
375
|
+
* frozen object, so a hit can only ever come from this same instance and this
|
|
376
|
+
* same track type. See ADR-031.
|
|
304
377
|
*
|
|
305
|
-
*
|
|
378
|
+
* The node is never mutated: admin edits replace the frozen entry (new
|
|
306
379
|
* identity drops the WeakMap entry), and a non-admin's edits go to a private
|
|
307
380
|
* session working copy, not here (ADR-032). Both levels are `WeakMap`s so
|
|
308
|
-
* entries collect normally — no manual invalidation needed
|
|
381
|
+
* entries collect normally — no manual invalidation needed, which is why this
|
|
382
|
+
* is a memo and not a cache with a lifecycle to expose.
|
|
309
383
|
*/
|
|
310
|
-
|
|
384
|
+
hydratedTrackConfig(schemaType: IAnyType, frozen: object, build: () => unknown): unknown;
|
|
311
385
|
constructor(initialPlugins?: (Plugin | PluginLoadRecord | RuntimePluginLoadRecord)[]);
|
|
312
386
|
pluginConfigurationNamespacedSchemas(): Record<string, unknown>;
|
|
313
387
|
pluginConfigurationUnnamespacedSchemas(): Record<string, unknown>;
|
|
@@ -330,10 +404,17 @@ export default class PluginManager {
|
|
|
330
404
|
getRpcElements(): RpcMethodType[];
|
|
331
405
|
getDisplayElements(): DisplayType[];
|
|
332
406
|
getAdapterElements(): AdapterType[];
|
|
333
|
-
/**
|
|
407
|
+
/**
|
|
408
|
+
* get a MST type for the union of all specified pluggable MST types.
|
|
409
|
+
* Membership is late-bound, so a lazily registered state model joins when
|
|
410
|
+
* its loader resolves; a snapshot naming one cannot be cast until then.
|
|
411
|
+
*/
|
|
334
412
|
pluggableMstType(groupName: PluggableElementTypeGroup, fieldName: string, fallback?: IAnyType): IAnyType;
|
|
335
|
-
/**
|
|
336
|
-
|
|
413
|
+
/**
|
|
414
|
+
* The union of every registered config schema of a pluggable element group,
|
|
415
|
+
* whose instance reads as a config node naming its `type`.
|
|
416
|
+
*/
|
|
417
|
+
pluggableConfigSchemaType(typeGroup: PluggableElementTypeGroup, fieldName?: string): PluggableConfigSchemaType;
|
|
337
418
|
jbrequireCache: Map<any, any>;
|
|
338
419
|
get lib(): Record<string, unknown>;
|
|
339
420
|
load: <FTYPE extends AnyFunction>(lib: FTYPE) => ReturnType<FTYPE>;
|
|
@@ -346,7 +427,7 @@ export default class PluginManager {
|
|
|
346
427
|
jbrequire: (lib: string | AnyFunction | {
|
|
347
428
|
default: AnyFunction;
|
|
348
429
|
}) => any;
|
|
349
|
-
getAdapterType(typeName: string): AdapterType
|
|
430
|
+
getAdapterType(typeName: string): AdapterType<any>;
|
|
350
431
|
/**
|
|
351
432
|
* Whether an adapter type is registered, for a caller walking a config where
|
|
352
433
|
* `type` names a track, a display and an adapter alike — `getAdapterType`
|
|
@@ -354,10 +435,35 @@ export default class PluginManager {
|
|
|
354
435
|
* claims to be an adapter and wrong when you are asking whether it is one.
|
|
355
436
|
*/
|
|
356
437
|
hasAdapterType(typeName: string): boolean;
|
|
357
|
-
getTextSearchAdapterType(typeName: string): TextSearchAdapterType
|
|
438
|
+
getTextSearchAdapterType(typeName: string): TextSearchAdapterType<any>;
|
|
358
439
|
getTrackType(typeName: string): TrackType;
|
|
359
440
|
getDisplayType(typeName: string): DisplayType;
|
|
441
|
+
getViewType<N extends ViewTypeName>(typeName: N): Omit<ViewType, 'stateModel'> & {
|
|
442
|
+
stateModel: ViewTypeRegistry[N];
|
|
443
|
+
};
|
|
360
444
|
getViewType(typeName: string): ViewType;
|
|
445
|
+
/**
|
|
446
|
+
* The registered view and display types a snapshot names, from every `type`
|
|
447
|
+
* string anywhere in it — `heldForMissingPlugins` included. Over-collection
|
|
448
|
+
* is harmless: a name that resolves to neither is dropped here.
|
|
449
|
+
*/
|
|
450
|
+
private sessionElementTypes;
|
|
451
|
+
/**
|
|
452
|
+
* Every async code path that hands a snapshot to a synchronous session
|
|
453
|
+
* instantiation (`setSession`, `cast`) must await this first.
|
|
454
|
+
*/
|
|
455
|
+
preloadSessionTypes(sessionSnapshot: unknown): Promise<void>;
|
|
456
|
+
unloadedSessionTypes(sessionSnapshot: unknown): string[];
|
|
457
|
+
/**
|
|
458
|
+
* Without this, a snapshot naming an unloaded lazy type fails inside MST as
|
|
459
|
+
* a union mismatch that reads like a corrupt snapshot.
|
|
460
|
+
*/
|
|
461
|
+
assertSessionTypesLoaded(sessionSnapshot: unknown): void;
|
|
462
|
+
/**
|
|
463
|
+
* Aliases resolve here because a legacy session names the alias, and the
|
|
464
|
+
* model that remaps it cannot be consulted before it is loaded.
|
|
465
|
+
*/
|
|
466
|
+
resolveDisplayTypeRecord(name: string): DisplayType | undefined;
|
|
361
467
|
getAddTrackWorkflow(typeName: string): AddTrackWorkflowType;
|
|
362
468
|
getWidgetType(typeName: string): WidgetType;
|
|
363
469
|
getConnectionType(typeName: string): ConnectionType;
|