@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
|
@@ -38,32 +38,39 @@ export function b64PadSuffix(b64) {
|
|
|
38
38
|
}
|
|
39
39
|
return b64 + '='.repeat(num);
|
|
40
40
|
}
|
|
41
|
+
async function transformBytes(bytes, transform) {
|
|
42
|
+
const stream = new Response(bytes).body.pipeThrough(transform);
|
|
43
|
+
return new Uint8Array(await new Response(stream).arrayBuffer());
|
|
44
|
+
}
|
|
41
45
|
/**
|
|
42
46
|
* Decode and inflate a url-safe base64 to a string
|
|
43
47
|
* See {@link https://en.wikipedia.org/wiki/Base64#URL_applications}
|
|
48
|
+
*
|
|
49
|
+
* A truncated input rejects rather than inflating to a prefix: a link cut short
|
|
50
|
+
* in transit has to say so, not fail later as a JSON syntax error.
|
|
44
51
|
*/
|
|
45
52
|
export async function fromUrlSafeB64(b64) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
try {
|
|
54
|
+
const bytes = Uint8Array.from(atob(b64PadSuffix(b64.replaceAll('-', '+').replaceAll('_', '/'))), c => c.charCodeAt(0));
|
|
55
|
+
return new TextDecoder().decode(await transformBytes(bytes, new DecompressionStream('deflate')));
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
throw new Error('This session is incomplete or damaged, which is how a link cut short in transit arrives. A short link survives being sent where a long one may not.', { cause: e });
|
|
59
|
+
}
|
|
51
60
|
}
|
|
52
61
|
/**
|
|
53
62
|
* Compress and encode a string as url-safe base64
|
|
54
63
|
* See {@link https://en.wikipedia.org/wiki/Base64#URL_applications}
|
|
55
64
|
*/
|
|
56
65
|
export async function toUrlSafeB64(str) {
|
|
57
|
-
const
|
|
58
|
-
const { deflate } = await import('pako-esm2');
|
|
59
|
-
const deflated = deflate(bytes, undefined);
|
|
66
|
+
const deflated = await transformBytes(new TextEncoder().encode(str), new CompressionStream('deflate'));
|
|
60
67
|
const encoded = btoa(bytesToBinaryString(deflated)).replace(/=+$/, '');
|
|
61
68
|
return encoded.replaceAll('+', '-').replaceAll('/', '_');
|
|
62
69
|
}
|
|
63
70
|
/**
|
|
64
|
-
* The `?session=` value prefixes
|
|
65
|
-
*
|
|
66
|
-
*
|
|
71
|
+
* The `?session=` value prefixes for a session carried by or behind the link.
|
|
72
|
+
* The decoder half (jbrowse-web's SessionLoader) has its own list covering
|
|
73
|
+
* `spec-` and `local-` too.
|
|
67
74
|
*/
|
|
68
75
|
export const SHARE_PREFIX = 'share-';
|
|
69
76
|
export const ENCODED_PREFIX = 'encoded-';
|
|
@@ -102,23 +109,16 @@ async function shareSessionToDynamo(session, shareURL, referer) {
|
|
|
102
109
|
return { sessionId, password };
|
|
103
110
|
}
|
|
104
111
|
// Encodes a session snapshot into the `?session=` value jbrowse-web decodes:
|
|
105
|
-
// `share-<id>` (uploaded + encrypted)
|
|
106
|
-
//
|
|
107
|
-
// jbrowse-
|
|
108
|
-
//
|
|
112
|
+
// `share-<id>` (uploaded + encrypted) or `encoded-<b64>` (compressed inline).
|
|
113
|
+
// Single source of these prefixes, shared by jbrowse-web's ShareDialog and
|
|
114
|
+
// jbrowse-desktop's ExportToWebDialog so the two producers can't drift from the
|
|
115
|
+
// decoder. The decoder also reads `json-{"session":…}`, which nothing here
|
|
116
|
+
// writes: it is the form a person writes by hand.
|
|
109
117
|
export async function encodeSessionParam(mode, session, options) {
|
|
110
118
|
if (mode === 'short') {
|
|
111
119
|
const { sessionId, password } = await shareSessionToDynamo(session, options.shareURL, options.referer);
|
|
112
120
|
return { sessionParam: `${SHARE_PREFIX}${sessionId}`, password };
|
|
113
121
|
}
|
|
114
|
-
else if (mode === 'json') {
|
|
115
|
-
// compact in the link (this mode's URL is the longest of the three
|
|
116
|
-
// already), indented in the dialog's readable-JSON panel
|
|
117
|
-
return {
|
|
118
|
-
sessionParam: `${JSON_PREFIX}${JSON.stringify({ session })}`,
|
|
119
|
-
plaintext: JSON.stringify({ session }, null, 2),
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
122
|
else {
|
|
123
123
|
const encoded = await toUrlSafeB64(JSON.stringify(session));
|
|
124
124
|
return { sessionParam: `${ENCODED_PREFIX}${encoded}` };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { GLYPH_DIAMOND, GLYPH_DISC, GLYPH_TRIANGLE, } from '@jbrowse/render-core/shaders/pointMarkConsts';
|
|
2
|
+
/**
|
|
3
|
+
* #api
|
|
4
|
+
* The `point` mark's painter code for each shape an encoding can name.
|
|
5
|
+
*/
|
|
6
|
+
export const SHAPE_CODES = {
|
|
7
|
+
circle: GLYPH_DISC,
|
|
8
|
+
'triangle-down': GLYPH_TRIANGLE,
|
|
9
|
+
diamond: GLYPH_DIAMOND,
|
|
10
|
+
};
|
|
11
|
+
export { SHAPE_NAMES } from './shapeNameList.js';
|
|
@@ -61,7 +61,7 @@ export function springAnimate({ from, to, write, read, onFinish = () => { }, pre
|
|
|
61
61
|
animationFrameId = requestAnimationFrame(() => {
|
|
62
62
|
update({
|
|
63
63
|
lastPosition: position,
|
|
64
|
-
lastTime:
|
|
64
|
+
lastTime: lastTime + numSteps,
|
|
65
65
|
lastVelocity: velocity,
|
|
66
66
|
});
|
|
67
67
|
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type FusionBreakpoint = {
|
|
2
|
+
refName: string;
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
strand?: number;
|
|
6
|
+
/** which way the sequence this end keeps runs from it: 1 right, -1 left, 0 unknown */
|
|
7
|
+
mateDirection: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The column names of a STAR-Fusion `fusion_predictions.tsv` header line. The
|
|
11
|
+
* leading `#` is not universal across STAR-Fusion versions and wrappers, so it
|
|
12
|
+
* is stripped when present. Throws a named error for a header without the two
|
|
13
|
+
* breakpoint columns, which is the wrong file or the wrong File Type guess.
|
|
14
|
+
*/
|
|
15
|
+
export declare function starFusionColumns(header: string | undefined): string[];
|
|
16
|
+
/**
|
|
17
|
+
* A STAR-Fusion `refName:pos:strand` breakpoint as an interbase feature, read
|
|
18
|
+
* from the RIGHT because a refName may contain colons (GRCh38's
|
|
19
|
+
* `HLA-A*01:01:01:01`). The position is 1-based in the file. The strand is the
|
|
20
|
+
* gene's transcription strand, and the fusion transcript keeps the donor's
|
|
21
|
+
* sequence 5' of the junction and the acceptor's 3' of it, so `mateDirection`
|
|
22
|
+
* is the strand negated for a donor and taken as read for an acceptor: the
|
|
23
|
+
* convention `parseSvAlt` states for a breakend and the paired-arc display
|
|
24
|
+
* draws its ticks from.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseStarFusionBreakpoint(str: string, isDonor: boolean): FusionBreakpoint;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The column names of a STAR-Fusion `fusion_predictions.tsv` header line. The
|
|
3
|
+
* leading `#` is not universal across STAR-Fusion versions and wrappers, so it
|
|
4
|
+
* is stripped when present. Throws a named error for a header without the two
|
|
5
|
+
* breakpoint columns, which is the wrong file or the wrong File Type guess.
|
|
6
|
+
*/
|
|
7
|
+
export function starFusionColumns(header) {
|
|
8
|
+
const columns = (header?.startsWith('#') ? header.slice(1) : header)?.split('\t') ?? [];
|
|
9
|
+
const missing = ['LeftBreakpoint', 'RightBreakpoint'].filter(c => !columns.includes(c));
|
|
10
|
+
if (missing.length) {
|
|
11
|
+
throw new Error(`Not a STAR-Fusion file: no ${missing.join(' or ')} column. Found: ${columns.slice(0, 6).join(', ')}`);
|
|
12
|
+
}
|
|
13
|
+
return columns;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A STAR-Fusion `refName:pos:strand` breakpoint as an interbase feature, read
|
|
17
|
+
* from the RIGHT because a refName may contain colons (GRCh38's
|
|
18
|
+
* `HLA-A*01:01:01:01`). The position is 1-based in the file. The strand is the
|
|
19
|
+
* gene's transcription strand, and the fusion transcript keeps the donor's
|
|
20
|
+
* sequence 5' of the junction and the acceptor's 3' of it, so `mateDirection`
|
|
21
|
+
* is the strand negated for a donor and taken as read for an acceptor: the
|
|
22
|
+
* convention `parseSvAlt` states for a breakend and the paired-arc display
|
|
23
|
+
* draws its ticks from.
|
|
24
|
+
*/
|
|
25
|
+
export function parseStarFusionBreakpoint(str, isDonor) {
|
|
26
|
+
const parts = str.split(':');
|
|
27
|
+
const strandStr = parts.length >= 3 ? parts.pop() : undefined;
|
|
28
|
+
const pos = parts.length >= 2 ? +parts.pop() : Number.NaN;
|
|
29
|
+
const strand = strandStr === '+' ? 1 : strandStr === '-' ? -1 : undefined;
|
|
30
|
+
return {
|
|
31
|
+
refName: parts.join(':'),
|
|
32
|
+
start: pos - 1,
|
|
33
|
+
end: pos,
|
|
34
|
+
strand,
|
|
35
|
+
mateDirection: strand === undefined ? 0 : isDonor ? -strand : strand,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { DerivedTable } from './featureTable.ts';
|
|
2
|
+
import type { Column, FeatureTable, MadeRows } from './featureTable.ts';
|
|
3
|
+
import type { AggregateOp, AggregateStep, BinStep } from './markEncodingTypes.ts';
|
|
4
|
+
import type { Feature, SimpleFeatureSerialized } from './simpleFeature.ts';
|
|
5
|
+
export declare const DEFAULT_BIN_AS: [string, string];
|
|
6
|
+
/** What a `bin` over `fields` writes on each piece: the bases of its interval inside its bin. */
|
|
7
|
+
export declare const BIN_OVERLAP_FIELD = "overlap";
|
|
8
|
+
/**
|
|
9
|
+
* A table's rows split into sections, each a contiguous range: `bounds[s]` is
|
|
10
|
+
* where section `s` starts and `bounds[s + 1]` where it ends. A step keeps
|
|
11
|
+
* its rows in section order, and one that groups rows groups within a
|
|
12
|
+
* section, so a faceted request runs each step once over every section.
|
|
13
|
+
*/
|
|
14
|
+
export type Bounds = Uint32Array;
|
|
15
|
+
export interface Staged {
|
|
16
|
+
table: FeatureTable;
|
|
17
|
+
bounds: Bounds;
|
|
18
|
+
}
|
|
19
|
+
export declare function boundsThrough(bounds: Bounds, parentRow: Uint32Array): Bounds;
|
|
20
|
+
/**
|
|
21
|
+
* The entries a `flatten` fanned out, one row each over the container row it
|
|
22
|
+
* came from. A container kept with nothing to fan out is a row of its own
|
|
23
|
+
* that reads everything off itself.
|
|
24
|
+
*/
|
|
25
|
+
export declare abstract class FannedTable extends DerivedTable {
|
|
26
|
+
get madeFrom(): boolean;
|
|
27
|
+
/** A container kept with nothing to fan out: the row is the container. */
|
|
28
|
+
abstract isKept(i: number): boolean;
|
|
29
|
+
abstract get hasKept(): boolean;
|
|
30
|
+
row(i: number): Feature;
|
|
31
|
+
}
|
|
32
|
+
export declare function stepReader(table: FeatureTable, ref: string, step: string): (i: number) => unknown;
|
|
33
|
+
export declare function stepNumberReader(table: FeatureTable, ref: string, step: string): (i: number) => number;
|
|
34
|
+
export declare function groupKey(value: unknown): unknown;
|
|
35
|
+
export declare function binSize({ step }: BinStep): number;
|
|
36
|
+
/**
|
|
37
|
+
* Each row's interval and the bins it overlaps, `first` to `last`, with each
|
|
38
|
+
* section's lowest and highest bin: `first` NaN where the ends are not
|
|
39
|
+
* numbers or run backwards, so the row is no piece. A zero-length interval
|
|
40
|
+
* is its position's bin alone.
|
|
41
|
+
*/
|
|
42
|
+
export declare function intervalsOf(table: FeatureTable, [startField, endField]: [string, string], size: number, bounds: Bounds): {
|
|
43
|
+
start: Float64Array<ArrayBuffer>;
|
|
44
|
+
end: Float64Array<ArrayBuffer>;
|
|
45
|
+
first: Float64Array<ArrayBuffer>;
|
|
46
|
+
last: Float64Array<ArrayBuffer>;
|
|
47
|
+
pieces: number;
|
|
48
|
+
lowBin: Float64Array<ArrayBuffer>;
|
|
49
|
+
highBin: Float64Array<ArrayBuffer>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Rows a step made from nothing: an `aggregate`'s groups and a `coverage`'s
|
|
53
|
+
* runs, carrying only the fields they wrote and an id from their span, with
|
|
54
|
+
* no feature to hang from.
|
|
55
|
+
*/
|
|
56
|
+
export declare class MadeTable implements MadeRows {
|
|
57
|
+
readonly length: number;
|
|
58
|
+
private readonly columns;
|
|
59
|
+
private readonly tags;
|
|
60
|
+
constructor(length: number, columns: ReadonlyMap<string, Column>, tags: (i: number) => string);
|
|
61
|
+
column(field: string): Column;
|
|
62
|
+
id(i: number): string;
|
|
63
|
+
parentOfRow(): undefined;
|
|
64
|
+
row(i: number): Feature;
|
|
65
|
+
json(i: number): SimpleFeatureSerialized;
|
|
66
|
+
}
|
|
67
|
+
export declare function valueColumn(values: readonly unknown[]): Column;
|
|
68
|
+
export declare function madeGroups({ groups, keys, ops, step, refNames, start, end, sectionOf, sections, }: {
|
|
69
|
+
groups: number;
|
|
70
|
+
keys: readonly [string, unknown[]][];
|
|
71
|
+
ops: readonly Column[];
|
|
72
|
+
step: AggregateStep;
|
|
73
|
+
refNames: unknown[];
|
|
74
|
+
start: Float64Array;
|
|
75
|
+
end: Float64Array;
|
|
76
|
+
sectionOf: ArrayLike<number>;
|
|
77
|
+
sections: number;
|
|
78
|
+
}): Staged;
|
|
79
|
+
export declare function isWeighted({ op, weight }: AggregateOp): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* One op's running sums per group, which the aggregate and the binned
|
|
82
|
+
* aggregate both add rows to in row order, so the two answer the same
|
|
83
|
+
* doubles. An unweighted row adds a weight of 1, which leaves every sum what
|
|
84
|
+
* it was before weights.
|
|
85
|
+
*/
|
|
86
|
+
export declare class OpSums {
|
|
87
|
+
readonly op: AggregateOp['op'];
|
|
88
|
+
private readonly readsValue;
|
|
89
|
+
readonly sum: Float64Array;
|
|
90
|
+
readonly weight: Float64Array;
|
|
91
|
+
readonly min: Float64Array;
|
|
92
|
+
readonly max: Float64Array;
|
|
93
|
+
constructor({ op, field }: AggregateOp, groups: number);
|
|
94
|
+
add(g: number, v: number, w: number): void;
|
|
95
|
+
column(groups: number): Column;
|
|
96
|
+
}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
// The pieces of the transform steps that the fused kernels share with the
|
|
2
|
+
// steps themselves. Imported by relative path only, so none of it is a
|
|
3
|
+
// package subpath or part of the plugin ABI.
|
|
4
|
+
import { aggregateFieldName } from './aggregateFieldName.js';
|
|
5
|
+
import { DerivedTable, NO_COLUMN, TableRow, numberReaderOf, readerOf, valueAt, } from './featureTable.js';
|
|
6
|
+
import { fieldReader, isPlainFieldRef } from './fieldReader.js';
|
|
7
|
+
import { isJexl } from './jexlStrings.js';
|
|
8
|
+
import { numericValue } from './numericValue.js';
|
|
9
|
+
export const DEFAULT_BIN_AS = ['start', 'end'];
|
|
10
|
+
/** What a `bin` over `fields` writes on each piece: the bases of its interval inside its bin. */
|
|
11
|
+
export const BIN_OVERLAP_FIELD = 'overlap';
|
|
12
|
+
// Section starts through a step whose rows came from its input's in order:
|
|
13
|
+
// each section starts at the first row whose parent row is in it.
|
|
14
|
+
export function boundsThrough(bounds, parentRow) {
|
|
15
|
+
const out = new Uint32Array(bounds.length);
|
|
16
|
+
let lo = 0;
|
|
17
|
+
for (let s = 0; s < bounds.length; s++) {
|
|
18
|
+
const edge = bounds[s];
|
|
19
|
+
let hi = parentRow.length;
|
|
20
|
+
while (lo < hi) {
|
|
21
|
+
const mid = (lo + hi) >>> 1;
|
|
22
|
+
if (parentRow[mid] < edge) {
|
|
23
|
+
lo = mid + 1;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
hi = mid;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
out[s] = lo;
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The entries a `flatten` fanned out, one row each over the container row it
|
|
35
|
+
* came from. A container kept with nothing to fan out is a row of its own
|
|
36
|
+
* that reads everything off itself.
|
|
37
|
+
*/
|
|
38
|
+
export class FannedTable extends DerivedTable {
|
|
39
|
+
get madeFrom() {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
row(i) {
|
|
43
|
+
return this.isKept(i) ? this.parent.row(this.parentOf(i)) : super.row(i);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// A step reads a name or a dotted path. A plain name reads the table's column;
|
|
47
|
+
// a path walks each row, chosen once per step. A computed field is a `formula`
|
|
48
|
+
// step's to make.
|
|
49
|
+
export function stepReader(table, ref, step) {
|
|
50
|
+
if (isJexl(ref)) {
|
|
51
|
+
throw new Error(`${step} field is a name or a dotted path, and a formula step in front computes one (${ref})`);
|
|
52
|
+
}
|
|
53
|
+
if (isPlainFieldRef(ref)) {
|
|
54
|
+
return readerOf(table.column(ref));
|
|
55
|
+
}
|
|
56
|
+
const read = fieldReader(ref, undefined);
|
|
57
|
+
return (i) => read(table.row(i));
|
|
58
|
+
}
|
|
59
|
+
export function stepNumberReader(table, ref, step) {
|
|
60
|
+
if (isPlainFieldRef(ref) && !isJexl(ref)) {
|
|
61
|
+
return numberReaderOf(table.column(ref));
|
|
62
|
+
}
|
|
63
|
+
const read = stepReader(table, ref, step);
|
|
64
|
+
return (i) => numericValue(read(i));
|
|
65
|
+
}
|
|
66
|
+
// A list holding one value is that value, as a VCF's ALT and INFO fields
|
|
67
|
+
// arrive, and a longer one is its text: a Map keys a list by identity, which
|
|
68
|
+
// made every row a group of its own. A missing value is one group, whether
|
|
69
|
+
// the field is absent or holds a VCF's `.`.
|
|
70
|
+
export function groupKey(value) {
|
|
71
|
+
return Array.isArray(value)
|
|
72
|
+
? value.length === 1
|
|
73
|
+
? (value[0] ?? undefined)
|
|
74
|
+
: value.join(',')
|
|
75
|
+
: (value ?? undefined);
|
|
76
|
+
}
|
|
77
|
+
export function binSize({ step }) {
|
|
78
|
+
if (!(step > 0)) {
|
|
79
|
+
throw new Error(`a bin step needs a positive size (${step})`);
|
|
80
|
+
}
|
|
81
|
+
return step;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Each row's interval and the bins it overlaps, `first` to `last`, with each
|
|
85
|
+
* section's lowest and highest bin: `first` NaN where the ends are not
|
|
86
|
+
* numbers or run backwards, so the row is no piece. A zero-length interval
|
|
87
|
+
* is its position's bin alone.
|
|
88
|
+
*/
|
|
89
|
+
export function intervalsOf(table, [startField, endField], size, bounds) {
|
|
90
|
+
const n = table.length;
|
|
91
|
+
const readStart = stepNumberReader(table, startField, 'a bin');
|
|
92
|
+
const readEnd = stepNumberReader(table, endField, 'a bin');
|
|
93
|
+
const start = new Float64Array(n);
|
|
94
|
+
const end = new Float64Array(n);
|
|
95
|
+
const firstBin = new Float64Array(n);
|
|
96
|
+
const lastBin = new Float64Array(n);
|
|
97
|
+
const sections = bounds.length - 1;
|
|
98
|
+
const lowBin = new Float64Array(sections).fill(Infinity);
|
|
99
|
+
const highBin = new Float64Array(sections).fill(-Infinity);
|
|
100
|
+
let pieces = 0;
|
|
101
|
+
for (let s = 0; s < sections; s++) {
|
|
102
|
+
let low = Infinity;
|
|
103
|
+
let high = -Infinity;
|
|
104
|
+
for (let i = bounds[s]; i < bounds[s + 1]; i++) {
|
|
105
|
+
const rowS = readStart(i);
|
|
106
|
+
const rowE = readEnd(i);
|
|
107
|
+
start[i] = rowS;
|
|
108
|
+
end[i] = rowE;
|
|
109
|
+
if (!(Number.isFinite(rowS) && Number.isFinite(rowE) && rowE >= rowS)) {
|
|
110
|
+
firstBin[i] = Number.NaN;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const first = Math.floor(rowS / size);
|
|
114
|
+
// The last bin starting before the end, found by the product the
|
|
115
|
+
// pieces are cut at.
|
|
116
|
+
let last = first;
|
|
117
|
+
while ((last + 1) * size < rowE) {
|
|
118
|
+
last++;
|
|
119
|
+
}
|
|
120
|
+
firstBin[i] = first;
|
|
121
|
+
lastBin[i] = last;
|
|
122
|
+
pieces += last - first + 1;
|
|
123
|
+
if (first < low) {
|
|
124
|
+
low = first;
|
|
125
|
+
}
|
|
126
|
+
if (last > high) {
|
|
127
|
+
high = last;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
lowBin[s] = low;
|
|
131
|
+
highBin[s] = high;
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
start,
|
|
135
|
+
end,
|
|
136
|
+
first: firstBin,
|
|
137
|
+
last: lastBin,
|
|
138
|
+
pieces,
|
|
139
|
+
lowBin,
|
|
140
|
+
highBin,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Rows a step made from nothing: an `aggregate`'s groups and a `coverage`'s
|
|
145
|
+
* runs, carrying only the fields they wrote and an id from their span, with
|
|
146
|
+
* no feature to hang from.
|
|
147
|
+
*/
|
|
148
|
+
export class MadeTable {
|
|
149
|
+
length;
|
|
150
|
+
columns;
|
|
151
|
+
tags;
|
|
152
|
+
constructor(length, columns, tags) {
|
|
153
|
+
this.length = length;
|
|
154
|
+
this.columns = columns;
|
|
155
|
+
this.tags = tags;
|
|
156
|
+
}
|
|
157
|
+
column(field) {
|
|
158
|
+
return field === 'uniqueId'
|
|
159
|
+
? { kind: 'value', read: i => this.id(i) }
|
|
160
|
+
: (this.columns.get(field) ?? NO_COLUMN);
|
|
161
|
+
}
|
|
162
|
+
id(i) {
|
|
163
|
+
const at = (field) => String(valueAt(this.column(field), i));
|
|
164
|
+
return `${at('refName')}:${at('start')}-${at('end')}${this.tags(i)}`;
|
|
165
|
+
}
|
|
166
|
+
parentOfRow() {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
row(i) {
|
|
170
|
+
return new TableRow(this, i);
|
|
171
|
+
}
|
|
172
|
+
json(i) {
|
|
173
|
+
const out = {};
|
|
174
|
+
for (const [field, column] of this.columns) {
|
|
175
|
+
out[field] = valueAt(column, i);
|
|
176
|
+
}
|
|
177
|
+
out.uniqueId = this.id(i);
|
|
178
|
+
return out;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
export function valueColumn(values) {
|
|
182
|
+
return { kind: 'value', read: i => values[i] };
|
|
183
|
+
}
|
|
184
|
+
// An aggregate's groups as rows, section by section: the groupby fields, the
|
|
185
|
+
// ops, and the reference name and extent each group spans.
|
|
186
|
+
export function madeGroups({ groups, keys, ops, step, refNames, start, end, sectionOf, sections, }) {
|
|
187
|
+
const columns = new Map();
|
|
188
|
+
for (const [field, values] of keys) {
|
|
189
|
+
columns.set(field, valueColumn(values));
|
|
190
|
+
}
|
|
191
|
+
for (const [k, agg] of step.ops.entries()) {
|
|
192
|
+
columns.set(aggregateFieldName(agg), ops[k]);
|
|
193
|
+
}
|
|
194
|
+
columns.set('refName', valueColumn(refNames));
|
|
195
|
+
columns.set('start', { kind: 'number', values: start, at: undefined });
|
|
196
|
+
columns.set('end', { kind: 'number', values: end, at: undefined });
|
|
197
|
+
const serial = new Uint32Array(groups);
|
|
198
|
+
const out = new Uint32Array(sections);
|
|
199
|
+
let s = 0;
|
|
200
|
+
for (let g = 0; g < groups; g++) {
|
|
201
|
+
while (s < sectionOf[g]) {
|
|
202
|
+
s++;
|
|
203
|
+
out[s] = g;
|
|
204
|
+
}
|
|
205
|
+
serial[g] = g - out[s];
|
|
206
|
+
}
|
|
207
|
+
for (s++; s < sections; s++) {
|
|
208
|
+
out[s] = groups;
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
table: new MadeTable(groups, columns, g => `#${serial[g]}`),
|
|
212
|
+
bounds: out,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// Whether an op reads its `weight`: a weight moves no minimum or maximum.
|
|
216
|
+
export function isWeighted({ op, weight }) {
|
|
217
|
+
return weight !== undefined && op !== 'min' && op !== 'max';
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* One op's running sums per group, which the aggregate and the binned
|
|
221
|
+
* aggregate both add rows to in row order, so the two answer the same
|
|
222
|
+
* doubles. An unweighted row adds a weight of 1, which leaves every sum what
|
|
223
|
+
* it was before weights.
|
|
224
|
+
*/
|
|
225
|
+
export class OpSums {
|
|
226
|
+
op;
|
|
227
|
+
readsValue;
|
|
228
|
+
sum;
|
|
229
|
+
weight;
|
|
230
|
+
min;
|
|
231
|
+
max;
|
|
232
|
+
constructor({ op, field }, groups) {
|
|
233
|
+
if (op !== 'count' && field === undefined) {
|
|
234
|
+
throw new Error(`an aggregate ${op} needs a field`);
|
|
235
|
+
}
|
|
236
|
+
this.op = op;
|
|
237
|
+
this.readsValue = op !== 'count';
|
|
238
|
+
this.sum = new Float64Array(groups);
|
|
239
|
+
this.weight = new Float64Array(groups);
|
|
240
|
+
this.min = new Float64Array(groups).fill(Infinity);
|
|
241
|
+
this.max = new Float64Array(groups).fill(-Infinity);
|
|
242
|
+
}
|
|
243
|
+
add(g, v, w) {
|
|
244
|
+
if ((this.readsValue && !Number.isFinite(v)) || !Number.isFinite(w)) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
this.weight[g] += w;
|
|
248
|
+
if (this.readsValue) {
|
|
249
|
+
this.sum[g] += v * w;
|
|
250
|
+
if (v < this.min[g]) {
|
|
251
|
+
this.min[g] = v;
|
|
252
|
+
}
|
|
253
|
+
if (v > this.max[g]) {
|
|
254
|
+
this.max[g] = v;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
column(groups) {
|
|
259
|
+
const { op } = this;
|
|
260
|
+
if (op === 'count' || op === 'sum') {
|
|
261
|
+
const values = (op === 'count' ? this.weight : this.sum).slice(0, groups);
|
|
262
|
+
return { kind: 'number', values, at: undefined };
|
|
263
|
+
}
|
|
264
|
+
const values = new Float64Array(groups);
|
|
265
|
+
for (let g = 0; g < groups; g++) {
|
|
266
|
+
values[g] =
|
|
267
|
+
this.weight[g] === 0
|
|
268
|
+
? Number.NaN
|
|
269
|
+
: op === 'mean'
|
|
270
|
+
? this.sum[g] / this.weight[g]
|
|
271
|
+
: op === 'min'
|
|
272
|
+
? this.min[g]
|
|
273
|
+
: this.max[g];
|
|
274
|
+
}
|
|
275
|
+
return { kind: 'number', values, at: undefined, nanIsAbsent: true };
|
|
276
|
+
}
|
|
277
|
+
}
|