@grafana/scenes 6.7.0--canary.1091.14350229100.0 → 6.8.0
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/CHANGELOG.md +25 -0
- package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
- package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
- package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
- package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
- package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
- package/dist/esm/dist/esm/components/NestedScene.js +95 -0
- package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
- package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
- package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
- package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
- package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
- package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
- package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
- package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
- package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
- package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
- package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
- package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
- package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
- package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
- package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
- package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
- package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
- package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
- package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
- package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
- package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
- package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
- package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
- package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
- package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
- package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
- package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
- package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
- package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
- package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
- package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
- package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
- package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
- package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
- package/dist/esm/dist/esm/core/events.js +11 -0
- package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
- package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
- package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
- package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
- package/dist/esm/dist/esm/core/types.js +15 -0
- package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
- package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
- package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
- package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
- package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
- package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
- package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
- package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
- package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
- package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
- package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
- package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
- package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
- package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
- package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
- package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
- package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
- package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
- package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
- package/dist/esm/dist/esm/services/utils.js +71 -0
- package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
- package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
- package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
- package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
- package/dist/esm/dist/esm/utils/date.js +15 -0
- package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
- package/dist/esm/dist/esm/utils/explore.js +47 -0
- package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
- package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
- package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
- package/dist/esm/dist/esm/utils/metricTree.js +53 -0
- package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
- package/dist/esm/dist/esm/utils/utils.js +11 -0
- package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
- package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
- package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
- package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
- package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
- package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
- package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
- package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
- package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
- package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
- package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
- package/dist/esm/dist/esm/variables/constants.js +9 -0
- package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
- package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
- package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
- package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
- package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
- package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
- package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
- package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
- package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
- package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
- package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
- package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
- package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
- package/dist/esm/dist/esm/variables/macros/index.js +26 -0
- package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
- package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
- package/dist/esm/dist/esm/variables/macros/types.js +11 -0
- package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
- package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
- package/dist/esm/dist/esm/variables/types.js +11 -0
- package/dist/esm/dist/esm/variables/utils.js +172 -0
- package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
- package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
- package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
- package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
- package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
- package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
- package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
- package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
- package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
- package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
- package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
- package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/DataProviderSharer.js +39 -0
- package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
- package/dist/esm/src/behaviors/CursorSync.js +76 -0
- package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
- package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
- package/dist/esm/src/behaviors/index.js +5 -0
- package/dist/esm/src/components/EmbeddedScene.js +59 -0
- package/dist/esm/src/components/NestedScene.js +95 -0
- package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
- package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
- package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
- package/dist/esm/src/components/SceneApp/utils.js +42 -0
- package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
- package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
- package/dist/esm/src/components/SceneCanvasText.js +32 -0
- package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
- package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
- package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
- package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
- package/dist/esm/src/components/SceneReactObject.js +34 -0
- package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
- package/dist/esm/src/components/SceneTimePicker.js +139 -0
- package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
- package/dist/esm/src/components/SceneToolbarButton.js +33 -0
- package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
- package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
- package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
- package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
- package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
- package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
- package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
- package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
- package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
- package/dist/esm/src/components/layout/LazyLoader.js +103 -0
- package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
- package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
- package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
- package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
- package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
- package/dist/esm/src/components/layout/grid/constants.js +7 -0
- package/dist/esm/src/components/layout/grid/utils.js +36 -0
- package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
- package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
- package/dist/esm/src/components/layout/split/Splitter.js +386 -0
- package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
- package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
- package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
- package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
- package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
- package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
- package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
- package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
- package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
- package/dist/esm/src/core/PanelBuilders/index.js +116 -0
- package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
- package/dist/esm/src/core/SceneDataNode.js +43 -0
- package/dist/esm/src/core/SceneObjectBase.js +286 -0
- package/dist/esm/src/core/SceneObjectRef.js +32 -0
- package/dist/esm/src/core/SceneTimeRange.js +231 -0
- package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
- package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
- package/dist/esm/src/core/events.js +11 -0
- package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
- package/dist/esm/src/core/sceneGraph/index.js +25 -0
- package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
- package/dist/esm/src/core/sceneGraph/utils.js +64 -0
- package/dist/esm/src/core/types.js +15 -0
- package/dist/esm/src/index.js +108 -0
- package/dist/esm/src/querying/DataLayersMerger.js +46 -0
- package/dist/esm/src/querying/DataProviderProxy.js +37 -0
- package/dist/esm/src/querying/DataProviderSharer.js +108 -0
- package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
- package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
- package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
- package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
- package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
- package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
- package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
- package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
- package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
- package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
- package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
- package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
- package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
- package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
- package/dist/esm/src/querying/layers/index.js +2 -0
- package/dist/esm/src/querying/registerQueryWithController.js +41 -0
- package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
- package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
- package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
- package/dist/esm/src/services/UrlSyncManager.js +167 -0
- package/dist/esm/src/services/useUrlSync.js +29 -0
- package/dist/esm/src/services/utils.js +75 -0
- package/dist/esm/src/utils/ControlsLabel.js +107 -0
- package/dist/esm/src/utils/LoadingIndicator.js +19 -0
- package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
- package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
- package/dist/esm/src/utils/date.js +15 -0
- package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
- package/dist/esm/src/utils/explore.js +47 -0
- package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
- package/dist/esm/src/utils/getDataSource.js +18 -0
- package/dist/esm/src/utils/getMessageFromError.js +24 -0
- package/dist/esm/src/utils/metricTree.js +53 -0
- package/dist/esm/src/utils/parseUrlParam.js +41 -0
- package/dist/esm/src/utils/utils.js +11 -0
- package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
- package/dist/esm/src/utils/writeSceneLog.js +12 -0
- package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
- package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
- package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
- package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
- package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
- package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
- package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
- package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
- package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
- package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
- package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
- package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
- package/dist/esm/src/variables/constants.js +9 -0
- package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
- package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
- package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
- package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
- package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
- package/dist/esm/src/variables/interpolation/defaults.js +21 -0
- package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
- package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
- package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
- package/dist/esm/src/variables/lookupVariable.js +20 -0
- package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
- package/dist/esm/src/variables/macros/contextMacros.js +43 -0
- package/dist/esm/src/variables/macros/dataMacros.js +134 -0
- package/dist/esm/src/variables/macros/index.js +35 -0
- package/dist/esm/src/variables/macros/templateProxies.js +51 -0
- package/dist/esm/src/variables/macros/timeMacros.js +86 -0
- package/dist/esm/src/variables/macros/types.js +11 -0
- package/dist/esm/src/variables/macros/urlMacros.js +56 -0
- package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
- package/dist/esm/src/variables/types.js +11 -0
- package/dist/esm/src/variables/utils.js +172 -0
- package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
- package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
- package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
- package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
- package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
- package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
- package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
- package/dist/esm/src/variables/variants/TestVariable.js +117 -0
- package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
- package/dist/esm/src/variables/variants/guards.js +27 -0
- package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
- package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
- package/dist/esm/src/variables/variants/query/guards.js +28 -0
- package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
- package/dist/esm/src/variables/variants/query/utils.js +124 -0
- package/dist/esm/variables/components/VariableValueSelect.js +13 -9
- package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
- package/dist/esm/variables/variants/ConstantVariable.js +22 -0
- package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
- package/dist/esm/variables/variants/CustomVariable.js +3 -2
- package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
- package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
- package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
- package/dist/esm/variables/variants/JsonVariable.js +96 -0
- package/dist/esm/variables/variants/TestVariable.js +3 -2
- package/dist/esm/variables/variants/TestVariable.js.map +1 -1
- package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
- package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
- package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
- package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
- package/dist/index.d.ts +14 -6
- package/dist/index.js +35 -13
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import { v4 } from 'uuid';
|
|
4
|
+
import { EventBusSrv } from '@grafana/data';
|
|
5
|
+
import { SceneComponentWrapper } from './SceneComponentWrapper.js';
|
|
6
|
+
import { SceneObjectStateChangedEvent } from './events.js';
|
|
7
|
+
import { cloneSceneObject } from './sceneGraph/utils.js';
|
|
8
|
+
import { SceneObjectRef } from './SceneObjectRef.js';
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
12
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
13
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
14
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
15
|
+
var __spreadValues = (a, b) => {
|
|
16
|
+
for (var prop in b || (b = {}))
|
|
17
|
+
if (__hasOwnProp.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
if (__getOwnPropSymbols)
|
|
20
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
21
|
+
if (__propIsEnum.call(b, prop))
|
|
22
|
+
__defNormalProp(a, prop, b[prop]);
|
|
23
|
+
}
|
|
24
|
+
return a;
|
|
25
|
+
};
|
|
26
|
+
class SceneObjectBase {
|
|
27
|
+
constructor(state) {
|
|
28
|
+
this._isActive = false;
|
|
29
|
+
this._activationHandlers = [];
|
|
30
|
+
this._deactivationHandlers = /* @__PURE__ */ new Map();
|
|
31
|
+
this._subs = new Subscription();
|
|
32
|
+
this._refCount = 0;
|
|
33
|
+
this._renderBeforeActivation = false;
|
|
34
|
+
if (!state.key) {
|
|
35
|
+
state.key = v4();
|
|
36
|
+
}
|
|
37
|
+
this._events = new EventBusSrv();
|
|
38
|
+
this._state = Object.freeze(state);
|
|
39
|
+
this._setParent(this._state);
|
|
40
|
+
}
|
|
41
|
+
get state() {
|
|
42
|
+
return this._state;
|
|
43
|
+
}
|
|
44
|
+
get isActive() {
|
|
45
|
+
return this._isActive;
|
|
46
|
+
}
|
|
47
|
+
get renderBeforeActivation() {
|
|
48
|
+
return this._renderBeforeActivation;
|
|
49
|
+
}
|
|
50
|
+
get parent() {
|
|
51
|
+
return this._parent;
|
|
52
|
+
}
|
|
53
|
+
get variableDependency() {
|
|
54
|
+
return this._variableDependency;
|
|
55
|
+
}
|
|
56
|
+
get urlSync() {
|
|
57
|
+
return this._urlSync;
|
|
58
|
+
}
|
|
59
|
+
get Component() {
|
|
60
|
+
return SceneComponentWrapper;
|
|
61
|
+
}
|
|
62
|
+
_setParent(state) {
|
|
63
|
+
forEachChild(state, (child) => {
|
|
64
|
+
if (child._parent && child._parent !== this) {
|
|
65
|
+
console.warn(
|
|
66
|
+
"SceneObject already has a parent set that is different from the new parent. You cannot share the same SceneObject instance in multiple scenes or in multiple different places of the same scene graph. Use SceneObject.clone() to duplicate a SceneObject or store a state key reference and use sceneGraph.findObject to locate it.",
|
|
67
|
+
child,
|
|
68
|
+
this
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
child._parent = this;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
clearParent() {
|
|
75
|
+
this._parent = void 0;
|
|
76
|
+
}
|
|
77
|
+
subscribeToState(handler) {
|
|
78
|
+
return this._events.subscribe(SceneObjectStateChangedEvent, (event) => {
|
|
79
|
+
if (event.payload.changedObject === this) {
|
|
80
|
+
handler(event.payload.newState, event.payload.prevState);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
subscribeToEvent(eventType, handler) {
|
|
85
|
+
return this._events.subscribe(eventType, handler);
|
|
86
|
+
}
|
|
87
|
+
setState(update) {
|
|
88
|
+
const prevState = this._state;
|
|
89
|
+
const newState = __spreadValues(__spreadValues({}, this._state), update);
|
|
90
|
+
this._state = Object.freeze(newState);
|
|
91
|
+
this._setParent(update);
|
|
92
|
+
this._handleActivationOfChangedStateProps(prevState, newState);
|
|
93
|
+
this.publishEvent(
|
|
94
|
+
new SceneObjectStateChangedEvent({
|
|
95
|
+
prevState,
|
|
96
|
+
newState,
|
|
97
|
+
partialUpdate: update,
|
|
98
|
+
changedObject: this
|
|
99
|
+
}),
|
|
100
|
+
true
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
_handleActivationOfChangedStateProps(prevState, newState) {
|
|
104
|
+
if (!this.isActive) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (prevState.$behaviors !== newState.$behaviors) {
|
|
108
|
+
this._handleChangedBehaviors(prevState.$behaviors, newState.$behaviors);
|
|
109
|
+
}
|
|
110
|
+
if (prevState.$data !== newState.$data) {
|
|
111
|
+
this._handleChangedStateActivation(prevState.$data, newState.$data);
|
|
112
|
+
}
|
|
113
|
+
if (prevState.$variables !== newState.$variables) {
|
|
114
|
+
this._handleChangedStateActivation(prevState.$variables, newState.$variables);
|
|
115
|
+
}
|
|
116
|
+
if (prevState.$timeRange !== newState.$timeRange) {
|
|
117
|
+
this._handleChangedStateActivation(prevState.$timeRange, newState.$timeRange);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
_handleChangedStateActivation(oldValue, newValue) {
|
|
121
|
+
if (oldValue) {
|
|
122
|
+
const deactivationHandler = this._deactivationHandlers.get(oldValue);
|
|
123
|
+
if (deactivationHandler) {
|
|
124
|
+
deactivationHandler();
|
|
125
|
+
this._deactivationHandlers.delete(oldValue);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (newValue) {
|
|
129
|
+
this._deactivationHandlers.set(newValue, newValue.activate());
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
_handleChangedBehaviors(oldValue, newValue) {
|
|
133
|
+
if (oldValue) {
|
|
134
|
+
for (const oldBehavior of oldValue) {
|
|
135
|
+
if (!newValue || !newValue.includes(oldBehavior)) {
|
|
136
|
+
const deactivationHandler = this._deactivationHandlers.get(oldBehavior);
|
|
137
|
+
if (deactivationHandler) {
|
|
138
|
+
deactivationHandler();
|
|
139
|
+
this._deactivationHandlers.delete(oldBehavior);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (newValue) {
|
|
145
|
+
for (const newBehavior of newValue) {
|
|
146
|
+
if (!oldValue || !oldValue.includes(newBehavior)) {
|
|
147
|
+
this._activateBehavior(newBehavior);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
publishEvent(event, bubble) {
|
|
153
|
+
this._events.publish(event);
|
|
154
|
+
if (bubble && this.parent) {
|
|
155
|
+
this.parent.publishEvent(event, bubble);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
getRoot() {
|
|
159
|
+
return !this._parent ? this : this._parent.getRoot();
|
|
160
|
+
}
|
|
161
|
+
_internalActivate() {
|
|
162
|
+
this._isActive = true;
|
|
163
|
+
const { $data, $variables, $timeRange, $behaviors } = this.state;
|
|
164
|
+
this._activationHandlers.forEach((handler) => {
|
|
165
|
+
const result = handler();
|
|
166
|
+
if (result) {
|
|
167
|
+
this._deactivationHandlers.set(result, result);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
if ($timeRange && !$timeRange.isActive) {
|
|
171
|
+
this._deactivationHandlers.set($timeRange, $timeRange.activate());
|
|
172
|
+
}
|
|
173
|
+
if ($variables && !$variables.isActive) {
|
|
174
|
+
this._deactivationHandlers.set($variables, $variables.activate());
|
|
175
|
+
}
|
|
176
|
+
if ($data && !$data.isActive) {
|
|
177
|
+
this._deactivationHandlers.set($data, $data.activate());
|
|
178
|
+
}
|
|
179
|
+
if ($behaviors) {
|
|
180
|
+
for (const behavior of $behaviors) {
|
|
181
|
+
this._activateBehavior(behavior);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
_activateBehavior(behavior) {
|
|
186
|
+
if (behavior instanceof SceneObjectBase) {
|
|
187
|
+
this._deactivationHandlers.set(behavior, behavior.activate());
|
|
188
|
+
} else if (typeof behavior === "function") {
|
|
189
|
+
const deactivate = behavior(this);
|
|
190
|
+
if (deactivate) {
|
|
191
|
+
this._deactivationHandlers.set(behavior, deactivate);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
activate() {
|
|
196
|
+
if (!this.isActive) {
|
|
197
|
+
this._internalActivate();
|
|
198
|
+
}
|
|
199
|
+
this._refCount++;
|
|
200
|
+
let called = false;
|
|
201
|
+
return () => {
|
|
202
|
+
this._refCount--;
|
|
203
|
+
if (called) {
|
|
204
|
+
const msg = `SceneObject cancelation handler returned by activate() called a second time`;
|
|
205
|
+
throw new Error(msg);
|
|
206
|
+
}
|
|
207
|
+
called = true;
|
|
208
|
+
if (this._refCount === 0) {
|
|
209
|
+
this._internalDeactivate();
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
_internalDeactivate() {
|
|
214
|
+
this._isActive = false;
|
|
215
|
+
for (let handler of this._deactivationHandlers.values()) {
|
|
216
|
+
handler();
|
|
217
|
+
}
|
|
218
|
+
this._deactivationHandlers.clear();
|
|
219
|
+
this._events.removeAllListeners();
|
|
220
|
+
this._subs.unsubscribe();
|
|
221
|
+
this._subs = new Subscription();
|
|
222
|
+
}
|
|
223
|
+
useState() {
|
|
224
|
+
return useSceneObjectState(this);
|
|
225
|
+
}
|
|
226
|
+
forceRender() {
|
|
227
|
+
this.setState({});
|
|
228
|
+
}
|
|
229
|
+
clone(withState) {
|
|
230
|
+
return cloneSceneObject(this, withState);
|
|
231
|
+
}
|
|
232
|
+
addActivationHandler(handler) {
|
|
233
|
+
this._activationHandlers.push(handler);
|
|
234
|
+
}
|
|
235
|
+
forEachChild(callback) {
|
|
236
|
+
forEachChild(this.state, callback);
|
|
237
|
+
}
|
|
238
|
+
getRef() {
|
|
239
|
+
if (!this._ref) {
|
|
240
|
+
this._ref = new SceneObjectRef(this);
|
|
241
|
+
}
|
|
242
|
+
return this._ref;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function useSceneObjectState(model, options) {
|
|
246
|
+
var _a;
|
|
247
|
+
const [_, setState] = useState(model.state);
|
|
248
|
+
const stateAtFirstRender = model.state;
|
|
249
|
+
const shouldActivateOrKeepAlive = (_a = options == null ? void 0 : options.shouldActivateOrKeepAlive) != null ? _a : false;
|
|
250
|
+
useEffect(() => {
|
|
251
|
+
let unactivate;
|
|
252
|
+
if (shouldActivateOrKeepAlive) {
|
|
253
|
+
unactivate = model.activate();
|
|
254
|
+
}
|
|
255
|
+
const s = model.subscribeToState((state) => {
|
|
256
|
+
setState(state);
|
|
257
|
+
});
|
|
258
|
+
if (model.state !== stateAtFirstRender) {
|
|
259
|
+
setState(model.state);
|
|
260
|
+
}
|
|
261
|
+
return () => {
|
|
262
|
+
s.unsubscribe();
|
|
263
|
+
if (unactivate) {
|
|
264
|
+
unactivate();
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
}, [model, shouldActivateOrKeepAlive]);
|
|
268
|
+
return model.state;
|
|
269
|
+
}
|
|
270
|
+
function forEachChild(state, callback) {
|
|
271
|
+
for (const propValue of Object.values(state)) {
|
|
272
|
+
if (propValue instanceof SceneObjectBase) {
|
|
273
|
+
callback(propValue);
|
|
274
|
+
}
|
|
275
|
+
if (Array.isArray(propValue)) {
|
|
276
|
+
for (const child of propValue) {
|
|
277
|
+
if (child instanceof SceneObjectBase) {
|
|
278
|
+
callback(child);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
export { SceneObjectBase, useSceneObjectState };
|
|
286
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVPYmplY3RCYXNlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9TY2VuZU9iamVjdEJhc2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFVuc3Vic2NyaWJhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgQnVzRXZlbnQsIEJ1c0V2ZW50SGFuZGxlciwgQnVzRXZlbnRUeXBlLCBFdmVudEJ1cywgRXZlbnRCdXNTcnYgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7XG4gIFNjZW5lT2JqZWN0LFxuICBTY2VuZUNvbXBvbmVudCxcbiAgU2NlbmVPYmplY3RVcmxTeW5jSGFuZGxlcixcbiAgU2NlbmVTdGF0ZUNoYW5nZWRIYW5kbGVyLFxuICBTY2VuZUFjdGl2YXRpb25IYW5kbGVyLFxuICBTY2VuZURlYWN0aXZhdGlvbkhhbmRsZXIsXG4gIENhbmNlbEFjdGl2YXRpb25IYW5kbGVyLFxuICBTY2VuZU9iamVjdFN0YXRlLFxuICBVc2VTdGF0ZUhvb2tPcHRpb25zLFxuICBTY2VuZVN0YXRlbGVzc0JlaGF2aW9yLFxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgU2NlbmVDb21wb25lbnRXcmFwcGVyIH0gZnJvbSAnLi9TY2VuZUNvbXBvbmVudFdyYXBwZXInO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RTdGF0ZUNoYW5nZWRFdmVudCB9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB7IGNsb25lU2NlbmVPYmplY3QgfSBmcm9tICcuL3NjZW5lR3JhcGgvdXRpbHMnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZURlcGVuZGVuY3lDb25maWdMaWtlIH0gZnJvbSAnLi4vdmFyaWFibGVzL3R5cGVzJztcbmltcG9ydCB7IFNjZW5lT2JqZWN0UmVmIH0gZnJvbSAnLi9TY2VuZU9iamVjdFJlZic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTY2VuZU9iamVjdEJhc2U8VFN0YXRlIGV4dGVuZHMgU2NlbmVPYmplY3RTdGF0ZSA9IFNjZW5lT2JqZWN0U3RhdGU+XG4gIGltcGxlbWVudHMgU2NlbmVPYmplY3Q8VFN0YXRlPlxue1xuICBwcml2YXRlIF9pc0FjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIF9zdGF0ZTogVFN0YXRlO1xuICBwcml2YXRlIF9hY3RpdmF0aW9uSGFuZGxlcnM6IFNjZW5lQWN0aXZhdGlvbkhhbmRsZXJbXSA9IFtdO1xuICBwcml2YXRlIF9kZWFjdGl2YXRpb25IYW5kbGVycyA9IG5ldyBNYXA8b2JqZWN0LCBTY2VuZURlYWN0aXZhdGlvbkhhbmRsZXI+KCk7XG4gIHByaXZhdGUgX3JlZj86IFNjZW5lT2JqZWN0UmVmPHRoaXM+O1xuXG4gIHByb3RlY3RlZCBfZXZlbnRzPzogRXZlbnRCdXM7XG4gIHByb3RlY3RlZCBfcGFyZW50PzogU2NlbmVPYmplY3Q7XG4gIHByb3RlY3RlZCBfc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJvdGVjdGVkIF9yZWZDb3VudCA9IDA7XG4gIHByb3RlY3RlZCBfcmVuZGVyQmVmb3JlQWN0aXZhdGlvbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBfdmFyaWFibGVEZXBlbmRlbmN5OiBTY2VuZVZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZ0xpa2UgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfdXJsU3luYzogU2NlbmVPYmplY3RVcmxTeW5jSGFuZGxlciB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc3RhdGU6IFRTdGF0ZSkge1xuICAgIGlmICghc3RhdGUua2V5KSB7XG4gICAgICBzdGF0ZS5rZXkgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRCdXNTcnYoKTtcblxuICAgIHRoaXMuX3N0YXRlID0gT2JqZWN0LmZyZWV6ZShzdGF0ZSk7XG4gICAgdGhpcy5fc2V0UGFyZW50KHRoaXMuX3N0YXRlKTtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IHN0YXRlICovXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogVFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gIH1cblxuICAvKiogVHJ1ZSBpZiBjdXJyZW50bHkgYmVpbmcgYWN0aXZlIChpZSBkaXNwbGF5ZWQgZm9yIHZpc3VhbCBvYmplY3RzKSAqL1xuICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVuZGVyQmVmb3JlQWN0aXZhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyQmVmb3JlQWN0aXZhdGlvbjtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBwYXJlbnQsIHVuZGVmaW5lZCBmb3Igcm9vdCBvYmplY3QgKi9cbiAgcHVibGljIGdldCBwYXJlbnQoKTogU2NlbmVPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gIH1cblxuICAvKiogUmV0dXJucyB2YXJpYWJsZSBkZXBlbmRlbmN5IGNvbmZpZyAqL1xuICBwdWJsaWMgZ2V0IHZhcmlhYmxlRGVwZW5kZW5jeSgpOiBTY2VuZVZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZ0xpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZURlcGVuZGVuY3k7XG4gIH1cblxuICAvKiogUmV0dXJucyB1cmwgc3luYyBjb25maWcgKi9cbiAgcHVibGljIGdldCB1cmxTeW5jKCk6IFNjZW5lT2JqZWN0VXJsU3luY0hhbmRsZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl91cmxTeW5jO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgaW4gcmVuZGVyIGZ1bmN0aW9ucyB3aGVuIHJlbmRlcmluZyBhIFNjZW5lT2JqZWN0LlxuICAgKiBXcmFwcyB0aGUgY29tcG9uZW50IGluIGFuIEVkaXRXcmFwcGVyIHRoYXQgaGFuZGxlcyBlZGl0IG1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgQ29tcG9uZW50KCk6IFNjZW5lQ29tcG9uZW50PHRoaXM+IHtcbiAgICByZXR1cm4gU2NlbmVDb21wb25lbnRXcmFwcGVyIGFzIFNjZW5lQ29tcG9uZW50PHRoaXM+O1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0UGFyZW50KHN0YXRlOiBQYXJ0aWFsPFRTdGF0ZT4pIHtcbiAgICBmb3JFYWNoQ2hpbGQoc3RhdGUsIChjaGlsZCkgPT4ge1xuICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcGFyZW50IGFuZCBpdCdzIG5vdCB0aGlzLCB0aGVuIHdlIGxpa2VseSBoYXZlIGEgYnVnXG4gICAgICBpZiAoY2hpbGQuX3BhcmVudCAmJiBjaGlsZC5fcGFyZW50ICE9PSB0aGlzKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnU2NlbmVPYmplY3QgYWxyZWFkeSBoYXMgYSBwYXJlbnQgc2V0IHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG5ldyBwYXJlbnQuIFlvdSBjYW5ub3Qgc2hhcmUgdGhlIHNhbWUgU2NlbmVPYmplY3QgaW5zdGFuY2UgaW4gbXVsdGlwbGUgc2NlbmVzIG9yIGluIG11bHRpcGxlIGRpZmZlcmVudCBwbGFjZXMgb2YgdGhlIHNhbWUgc2NlbmUgZ3JhcGguIFVzZSBTY2VuZU9iamVjdC5jbG9uZSgpIHRvIGR1cGxpY2F0ZSBhIFNjZW5lT2JqZWN0IG9yIHN0b3JlIGEgc3RhdGUga2V5IHJlZmVyZW5jZSBhbmQgdXNlIHNjZW5lR3JhcGguZmluZE9iamVjdCB0byBsb2NhdGUgaXQuJyxcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjaGlsZC5fcGFyZW50ID0gdGhpcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb21ldGltZXMgeW91IHdhbnQgdG8gbW92ZSBvbmUgaW5zdGFuY2UgdG8gYW5vdGhlciBwYXJlbnQuXG4gICAqIFRoaXMgaXMgYSB3YXkgdG8gZG8gdGhhdCB3aXRob3V0IGdldHRpbmcgdGhlIGNvbnNvbGUgd2FybmluZy5cbiAgICovXG4gIHB1YmxpYyBjbGVhclBhcmVudCgpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBzY2VuZSBzdGF0ZSBzdWJqZWN0XG4gICAqKi9cbiAgcHVibGljIHN1YnNjcmliZVRvU3RhdGUoaGFuZGxlcjogU2NlbmVTdGF0ZUNoYW5nZWRIYW5kbGVyPFRTdGF0ZT4pOiBVbnN1YnNjcmliYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50cyEuc3Vic2NyaWJlKFNjZW5lT2JqZWN0U3RhdGVDaGFuZ2VkRXZlbnQsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnBheWxvYWQuY2hhbmdlZE9iamVjdCA9PT0gdGhpcykge1xuICAgICAgICBoYW5kbGVyKGV2ZW50LnBheWxvYWQubmV3U3RhdGUgYXMgVFN0YXRlLCBldmVudC5wYXlsb2FkLnByZXZTdGF0ZSBhcyBUU3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgc2NlbmUgZXZlbnRcbiAgICoqL1xuICBwdWJsaWMgc3Vic2NyaWJlVG9FdmVudDxUIGV4dGVuZHMgQnVzRXZlbnQ+KGV2ZW50VHlwZTogQnVzRXZlbnRUeXBlPFQ+LCBoYW5kbGVyOiBCdXNFdmVudEhhbmRsZXI8VD4pOiBVbnN1YnNjcmliYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50cyEuc3Vic2NyaWJlKGV2ZW50VHlwZSwgaGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgc2V0U3RhdGUodXBkYXRlOiBQYXJ0aWFsPFRTdGF0ZT4pIHtcbiAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLl9zdGF0ZTtcbiAgICBjb25zdCBuZXdTdGF0ZTogVFN0YXRlID0ge1xuICAgICAgLi4udGhpcy5fc3RhdGUsXG4gICAgICAuLi51cGRhdGUsXG4gICAgfTtcblxuICAgIHRoaXMuX3N0YXRlID0gT2JqZWN0LmZyZWV6ZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5fc2V0UGFyZW50KHVwZGF0ZSk7XG5cbiAgICAvLyBIYW5kbGVzIGNhc2VzIHdoZW4gJGRhdGEsICR0aW1lUmFuZ2UsIG9yICR2YXJpYWJsZXMgYXJlIGNoYW5nZWRcbiAgICB0aGlzLl9oYW5kbGVBY3RpdmF0aW9uT2ZDaGFuZ2VkU3RhdGVQcm9wcyhwcmV2U3RhdGUsIG5ld1N0YXRlKTtcblxuICAgIC8vIEJ1YmJsZSBzdGF0ZSBjaGFuZ2UgZXZlbnQuIFRoaXMgaXMgZXZlbnQgaXMgc3Vic2NyaWJlZCB0byBieSBVcmxTeW5jTWFuYWdlciBhbmQgVW5kb01hbmFnZXJcbiAgICB0aGlzLnB1Ymxpc2hFdmVudChcbiAgICAgIG5ldyBTY2VuZU9iamVjdFN0YXRlQ2hhbmdlZEV2ZW50KHtcbiAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgcGFydGlhbFVwZGF0ZTogdXBkYXRlLFxuICAgICAgICBjaGFuZ2VkT2JqZWN0OiB0aGlzLFxuICAgICAgfSksXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGhhbmRsZXMgYWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIG9mICRkYXRhLCAkdGltZVJhbmdlIGFuZCAkdmFyaWFibGVzIHdoZW4gdGhleSBjaGFuZ2VcbiAgICogZHVyaW5nIHRoZSBhY3RpdmUgcGhhc2Ugb2YgdGhlIHNjZW5lIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgX2hhbmRsZUFjdGl2YXRpb25PZkNoYW5nZWRTdGF0ZVByb3BzKHByZXZTdGF0ZTogVFN0YXRlLCBuZXdTdGF0ZTogVFN0YXRlKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByZXZTdGF0ZS4kYmVoYXZpb3JzICE9PSBuZXdTdGF0ZS4kYmVoYXZpb3JzKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDaGFuZ2VkQmVoYXZpb3JzKHByZXZTdGF0ZS4kYmVoYXZpb3JzLCBuZXdTdGF0ZS4kYmVoYXZpb3JzKTtcbiAgICB9XG5cbiAgICBpZiAocHJldlN0YXRlLiRkYXRhICE9PSBuZXdTdGF0ZS4kZGF0YSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2hhbmdlZFN0YXRlQWN0aXZhdGlvbihwcmV2U3RhdGUuJGRhdGEsIG5ld1N0YXRlLiRkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAocHJldlN0YXRlLiR2YXJpYWJsZXMgIT09IG5ld1N0YXRlLiR2YXJpYWJsZXMpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNoYW5nZWRTdGF0ZUFjdGl2YXRpb24ocHJldlN0YXRlLiR2YXJpYWJsZXMsIG5ld1N0YXRlLiR2YXJpYWJsZXMpO1xuICAgIH1cblxuICAgIGlmIChwcmV2U3RhdGUuJHRpbWVSYW5nZSAhPT0gbmV3U3RhdGUuJHRpbWVSYW5nZSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2hhbmdlZFN0YXRlQWN0aXZhdGlvbihwcmV2U3RhdGUuJHRpbWVSYW5nZSwgbmV3U3RhdGUuJHRpbWVSYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2hhbmdlZFN0YXRlQWN0aXZhdGlvbihvbGRWYWx1ZTogU2NlbmVPYmplY3QgfCB1bmRlZmluZWQsIG5ld1ZhbHVlOiBTY2VuZU9iamVjdCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChvbGRWYWx1ZSkge1xuICAgICAgY29uc3QgZGVhY3RpdmF0aW9uSGFuZGxlciA9IHRoaXMuX2RlYWN0aXZhdGlvbkhhbmRsZXJzLmdldChvbGRWYWx1ZSk7XG4gICAgICBpZiAoZGVhY3RpdmF0aW9uSGFuZGxlcikge1xuICAgICAgICBkZWFjdGl2YXRpb25IYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2RlYWN0aXZhdGlvbkhhbmRsZXJzLmRlbGV0ZShvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLl9kZWFjdGl2YXRpb25IYW5kbGVycy5zZXQobmV3VmFsdWUsIG5ld1ZhbHVlLmFjdGl2YXRlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNoYW5nZWRCZWhhdmlvcnMoXG4gICAgb2xkVmFsdWU6IEFycmF5PFNjZW5lT2JqZWN0IHwgU2NlbmVTdGF0ZWxlc3NCZWhhdmlvcj4gfCB1bmRlZmluZWQsXG4gICAgbmV3VmFsdWU6IEFycmF5PFNjZW5lT2JqZWN0IHwgU2NlbmVTdGF0ZWxlc3NCZWhhdmlvcj4gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgLy8gSGFuZGxlIHJlbW92ZWQgYmVoYXZpb3JzXG4gICAgaWYgKG9sZFZhbHVlKSB7XG4gICAgICBmb3IgKGNvbnN0IG9sZEJlaGF2aW9yIG9mIG9sZFZhbHVlKSB7XG4gICAgICAgIGlmICghbmV3VmFsdWUgfHwgIW5ld1ZhbHVlLmluY2x1ZGVzKG9sZEJlaGF2aW9yKSkge1xuICAgICAgICAgIGNvbnN0IGRlYWN0aXZhdGlvbkhhbmRsZXIgPSB0aGlzLl9kZWFjdGl2YXRpb25IYW5kbGVycy5nZXQob2xkQmVoYXZpb3IpO1xuICAgICAgICAgIGlmIChkZWFjdGl2YXRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgICBkZWFjdGl2YXRpb25IYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRpb25IYW5kbGVycy5kZWxldGUob2xkQmVoYXZpb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBuZXcgYmVoYXZpb3JzXG4gICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICBmb3IgKGNvbnN0IG5ld0JlaGF2aW9yIG9mIG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICghb2xkVmFsdWUgfHwgIW9sZFZhbHVlLmluY2x1ZGVzKG5ld0JlaGF2aW9yKSkge1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlQmVoYXZpb3IobmV3QmVoYXZpb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUHVibGlzaCBhbiBldmVudCBhbmQgb3B0aW9uYWxseSBidWJibGUgaXQgdXAgdGhlIHNjZW5lXG4gICAqKi9cbiAgcHVibGljIHB1Ymxpc2hFdmVudChldmVudDogQnVzRXZlbnQsIGJ1YmJsZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ldmVudHMhLnB1Ymxpc2goZXZlbnQpO1xuXG4gICAgaWYgKGJ1YmJsZSAmJiB0aGlzLnBhcmVudCkge1xuICAgICAgdGhpcy5wYXJlbnQucHVibGlzaEV2ZW50KGV2ZW50LCBidWJibGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRSb290KCk6IFNjZW5lT2JqZWN0IHtcbiAgICByZXR1cm4gIXRoaXMuX3BhcmVudCA/IHRoaXMgOiB0aGlzLl9wYXJlbnQuZ2V0Um9vdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW50ZXJuYWxBY3RpdmF0ZSgpIHtcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICBjb25zdCB7ICRkYXRhLCAkdmFyaWFibGVzLCAkdGltZVJhbmdlLCAkYmVoYXZpb3JzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgdGhpcy5fYWN0aXZhdGlvbkhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZXIoKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5fZGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KHJlc3VsdCwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICgkdGltZVJhbmdlICYmICEkdGltZVJhbmdlLmlzQWN0aXZlKSB7XG4gICAgICB0aGlzLl9kZWFjdGl2YXRpb25IYW5kbGVycy5zZXQoJHRpbWVSYW5nZSwgJHRpbWVSYW5nZS5hY3RpdmF0ZSgpKTtcbiAgICB9XG5cbiAgICBpZiAoJHZhcmlhYmxlcyAmJiAhJHZhcmlhYmxlcy5pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5fZGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KCR2YXJpYWJsZXMsICR2YXJpYWJsZXMuYWN0aXZhdGUoKSk7XG4gICAgfVxuXG4gICAgaWYgKCRkYXRhICYmICEkZGF0YS5pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5fZGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KCRkYXRhLCAkZGF0YS5hY3RpdmF0ZSgpKTtcbiAgICB9XG5cbiAgICBpZiAoJGJlaGF2aW9ycykge1xuICAgICAgZm9yIChjb25zdCBiZWhhdmlvciBvZiAkYmVoYXZpb3JzKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlQmVoYXZpb3IoYmVoYXZpb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2FjdGl2YXRlQmVoYXZpb3IoYmVoYXZpb3I6IFNjZW5lT2JqZWN0IHwgU2NlbmVTdGF0ZWxlc3NCZWhhdmlvcik6IFNjZW5lRGVhY3RpdmF0aW9uSGFuZGxlciB8IHZvaWQge1xuICAgIGlmIChiZWhhdmlvciBpbnN0YW5jZW9mIFNjZW5lT2JqZWN0QmFzZSkge1xuICAgICAgdGhpcy5fZGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGJlaGF2aW9yLCBiZWhhdmlvci5hY3RpdmF0ZSgpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBiZWhhdmlvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZGVhY3RpdmF0ZSA9IGJlaGF2aW9yKHRoaXMpO1xuICAgICAgaWYgKGRlYWN0aXZhdGUpIHtcbiAgICAgICAgdGhpcy5fZGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGJlaGF2aW9yLCBkZWFjdGl2YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBwcmltYXJpbHkgY2FsbGVkIGZyb20gU2NlbmVDb21wb25lbnRXcmFwcGVyIHdoZW4gdGhlIFNjZW5lT2JqZWN0J3MgQ29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEJ1dCBpbiBzb21lIHNjZW5hcmlvcyB0aGlzIGNhbiBhbHNvIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGFub3RoZXIgc2NlbmUgb2JqZWN0LiBXaGVuIGNhbGxlZCBtYW51YWxseSBmcm9tIGFub3RoZXIgc2NlbmUgb2JqZWN0XG4gICAqIG1ha2Ugc3VyZSB0byBjYWxsIHRoZSByZXR1cm5lZCBmdW5jdGlvbiB3aGVuIHRoZSBzb3VyY2Ugc2NlbmUgb2JqZWN0IGlzIGRlYWN0aXZhdGVkLlxuICAgKi9cbiAgcHVibGljIGFjdGl2YXRlKCk6IENhbmNlbEFjdGl2YXRpb25IYW5kbGVyIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuX2ludGVybmFsQWN0aXZhdGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWZDb3VudCsrO1xuXG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuX3JlZkNvdW50LS07XG5cbiAgICAgIGlmIChjYWxsZWQpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYFNjZW5lT2JqZWN0IGNhbmNlbGF0aW9uIGhhbmRsZXIgcmV0dXJuZWQgYnkgYWN0aXZhdGUoKSBjYWxsZWQgYSBzZWNvbmQgdGltZWA7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuXG4gICAgICBjYWxsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5fcmVmQ291bnQgPT09IDApIHtcbiAgICAgICAgdGhpcy5faW50ZXJuYWxEZWFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIFNjZW5lQ29tcG9uZW50V3JhcHBlciB3aGVuIHRoZSByZWFjdCBjb21wb25lbnQgaXMgdW5tb3VudGVkLlxuICAgKiBEb24ndCBvdmVycmlkZSB0aGlzLCBpbnN0ZWFkIHVzZSBhZGRBY3RpdmF0aW9uSGFuZGxlci4gVGhlIGFjdGl2YXRpb24gaGFuZGxlciBjYW4gcmV0dXJuIGEgZGVhY3RpdmF0aW9uIGhhbmRsZXIuXG4gICAqL1xuICBwcml2YXRlIF9pbnRlcm5hbERlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGhhbmRsZXIgb2YgdGhpcy5fZGVhY3RpdmF0aW9uSGFuZGxlcnMudmFsdWVzKCkpIHtcbiAgICAgIGhhbmRsZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWFjdGl2YXRpb25IYW5kbGVycy5jbGVhcigpO1xuXG4gICAgLy8gQ2xlYXIgc3Vic2NyaXB0aW9ucyBhbmQgbGlzdGVuZXJzXG4gICAgdGhpcy5fZXZlbnRzIS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVdGlsaXR5IGhvb2sgdG8gZ2V0IGFuZCBzdWJzY3JpYmUgdG8gc3RhdGVcbiAgICovXG4gIHB1YmxpYyB1c2VTdGF0ZSgpOiBUU3RhdGUge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIHJldHVybiB1c2VTY2VuZU9iamVjdFN0YXRlKHRoaXMpO1xuICB9XG5cbiAgLyoqIEZvcmNlIGEgcmUtcmVuZGVyLCBzaG91bGQgb25seSBiZSBuZWVkZWQgd2hlbiB2YXJpYWJsZSB2YWx1ZXMgY2hhbmdlICovXG4gIHB1YmxpYyBmb3JjZVJlbmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGNyZWF0ZSBuZXcgU2NlbmVPYmplY3Qgd2l0aCBzaGFsbG93LWNsb25lZCBzdGF0ZSwgYnV0IGFsbCBzdGF0ZSBpdGVtcyBvZiB0eXBlIFNjZW5lT2JqZWN0IGFyZSBkZWVwIGNsb25lZFxuICAgKi9cbiAgcHVibGljIGNsb25lKHdpdGhTdGF0ZT86IFBhcnRpYWw8VFN0YXRlPik6IHRoaXMge1xuICAgIHJldHVybiBjbG9uZVNjZW5lT2JqZWN0KHRoaXMsIHdpdGhTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIGV4dGVybmFsIGNvZGUgdG8gcmVnaXN0ZXIgY29kZSB0aGF0IGlzIGV4ZWN1dGVkIG9uIGFjdGl2YXRlIGFuZCBkZWFjdGl2YXRlLiBUaGlzIGFsbG93IHlvdVxuICAgKiB0byB3aXJlIHVwIHNjZW5lIG9iamVjdHMgdGhhdCBuZWVkIHRvIHJlc3BvbmQgdG8gc3RhdGUgY2hhbmdlcyBpbiBvdGhlciBvYmplY3RzIGZyb20gdGhlIG91dHNpZGUuXG4gICAqKi9cbiAgcHVibGljIGFkZEFjdGl2YXRpb25IYW5kbGVyKGhhbmRsZXI6IFNjZW5lQWN0aXZhdGlvbkhhbmRsZXIpIHtcbiAgICB0aGlzLl9hY3RpdmF0aW9uSGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29wIHRocm91Z2ggc3RhdGUgYW5kIGNhbGwgY2FsbGJhY2sgZm9yIGVhY2ggZGlyZWN0IGNoaWxkIHNjZW5lIG9iamVjdC5cbiAgICogQ2hlY2tzIDEgbGV2ZWwgZGVlcCBwcm9wZXJ0aWVzIGFuZCBhcnJheXMuIFNvIGEgc2NlbmUgb2JqZWN0IGhpZGRlbiBpbiBhIG5lc3RlZCBwbGFpbiBvYmplY3Qgd2lsbCBub3QgYmUgZGV0ZWN0ZWQuXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaENoaWxkKGNhbGxiYWNrOiAoY2hpbGQ6IFNjZW5lT2JqZWN0QmFzZSkgPT4gdm9pZCkge1xuICAgIGZvckVhY2hDaGlsZCh0aGlzLnN0YXRlLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIFNjZW5lT2JqZWN0UmVmIHRoYXQgd2lsbCByZXNvbHZlIHRvIHRoaXMgb2JqZWN0ICovXG4gIHB1YmxpYyBnZXRSZWYoKTogU2NlbmVPYmplY3RSZWY8dGhpcz4ge1xuICAgIGlmICghdGhpcy5fcmVmKSB7XG4gICAgICB0aGlzLl9yZWYgPSBuZXcgU2NlbmVPYmplY3RSZWYodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlZjtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaG9vayBpcyBhbHdheXMgcmV0dXJuaW5nIG1vZGVsLnN0YXRlIGluc3RlYWQgb2YgYSB1c2VTdGF0ZSB0aGF0IHJlbWVtYmVycyB0aGUgbGFzdCBzdGF0ZSBlbWl0dGVkIG9uIHRoZSBzdWJqZWN0XG4gKiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHNvIHRoYXQgaWYgdGhlIG1vZGVsIGluc3RhbmNlIGNoYW5nZSB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgbGF0ZXN0IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2NlbmVPYmplY3RTdGF0ZTxUU3RhdGUgZXh0ZW5kcyBTY2VuZU9iamVjdFN0YXRlPihcbiAgbW9kZWw6IFNjZW5lT2JqZWN0PFRTdGF0ZT4sXG4gIG9wdGlvbnM/OiBVc2VTdGF0ZUhvb2tPcHRpb25zXG4pOiBUU3RhdGUge1xuICBjb25zdCBbXywgc2V0U3RhdGVdID0gdXNlU3RhdGU8VFN0YXRlPihtb2RlbC5zdGF0ZSk7XG4gIGNvbnN0IHN0YXRlQXRGaXJzdFJlbmRlciA9IG1vZGVsLnN0YXRlO1xuICBjb25zdCBzaG91bGRBY3RpdmF0ZU9yS2VlcEFsaXZlID0gb3B0aW9ucz8uc2hvdWxkQWN0aXZhdGVPcktlZXBBbGl2ZSA/PyBmYWxzZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCB1bmFjdGl2YXRlOiBDYW5jZWxBY3RpdmF0aW9uSGFuZGxlciB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChzaG91bGRBY3RpdmF0ZU9yS2VlcEFsaXZlKSB7XG4gICAgICB1bmFjdGl2YXRlID0gbW9kZWwuYWN0aXZhdGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzID0gbW9kZWwuc3Vic2NyaWJlVG9TdGF0ZSgoc3RhdGUpID0+IHtcbiAgICAgIHNldFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcblxuICAgIC8vIFJlLXJlbmRlciBjb21wb25lbnQgaWYgdGhlIHN0YXRlIGNoYW5nZWQgYmV0d2VlbiBmaXJzdCByZW5kZXIgYW5kIHVzZUVmZmVjdCAobW91bnQpXG4gICAgaWYgKG1vZGVsLnN0YXRlICE9PSBzdGF0ZUF0Rmlyc3RSZW5kZXIpIHtcbiAgICAgIHNldFN0YXRlKG1vZGVsLnN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcy51bnN1YnNjcmliZSgpO1xuXG4gICAgICBpZiAodW5hY3RpdmF0ZSkge1xuICAgICAgICB1bmFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFttb2RlbCwgc2hvdWxkQWN0aXZhdGVPcktlZXBBbGl2ZV0pO1xuXG4gIHJldHVybiBtb2RlbC5zdGF0ZTtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaENoaWxkPFQgZXh0ZW5kcyBvYmplY3Q+KHN0YXRlOiBULCBjYWxsYmFjazogKGNoaWxkOiBTY2VuZU9iamVjdEJhc2UpID0+IHZvaWQpIHtcbiAgZm9yIChjb25zdCBwcm9wVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhzdGF0ZSkpIHtcbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgU2NlbmVPYmplY3RCYXNlKSB7XG4gICAgICBjYWxsYmFjayhwcm9wVmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFNjZW5lT2JqZWN0QmFzZSkge1xuICAgICAgICAgIGNhbGxiYWNrKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5h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
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
var __accessCheck = (obj, member, msg) => {
|
|
2
|
+
if (!member.has(obj))
|
|
3
|
+
throw TypeError("Cannot " + msg);
|
|
4
|
+
};
|
|
5
|
+
var __privateGet = (obj, member, getter) => {
|
|
6
|
+
__accessCheck(obj, member, "read from private field");
|
|
7
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
8
|
+
};
|
|
9
|
+
var __privateAdd = (obj, member, value) => {
|
|
10
|
+
if (member.has(obj))
|
|
11
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
12
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
13
|
+
};
|
|
14
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
15
|
+
__accessCheck(obj, member, "write to private field");
|
|
16
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
var _ref;
|
|
20
|
+
class SceneObjectRef {
|
|
21
|
+
constructor(ref) {
|
|
22
|
+
__privateAdd(this, _ref, void 0);
|
|
23
|
+
__privateSet(this, _ref, ref);
|
|
24
|
+
}
|
|
25
|
+
resolve() {
|
|
26
|
+
return __privateGet(this, _ref);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
_ref = new WeakMap();
|
|
30
|
+
|
|
31
|
+
export { SceneObjectRef };
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVPYmplY3RSZWYuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL1NjZW5lT2JqZWN0UmVmLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBTY2VuZU9iamVjdFJlZjxUPiB7XG4gICNyZWY6IFQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHJlZjogVCkge1xuICAgIHRoaXMuI3JlZiA9IHJlZjtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLiNyZWY7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBLElBQUEsQ0FBQTtBQUFPLE1BQU0sY0FBa0IsQ0FBQTtBQUFBLEVBR3RCLFlBQVksR0FBUSxFQUFBO0FBRjNCLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBQSxJQUFBLEVBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQTtBQUdFLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBSyxJQUFPLEVBQUEsR0FBQSxDQUFBLENBQUE7QUFBQSxHQUNkO0FBQUEsRUFFTyxPQUFhLEdBQUE7QUFDbEIsSUFBQSxPQUFPLFlBQUssQ0FBQSxJQUFBLEVBQUEsSUFBQSxDQUFBLENBQUE7QUFBQSxHQUNkO0FBQ0YsQ0FBQTtBQVRFLElBQUEsR0FBQSxJQUFBLE9BQUEsRUFBQTs7OzsifQ==
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { getTimeZone, rangeUtil, toUtc } from '@grafana/data';
|
|
2
|
+
import { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig.js';
|
|
3
|
+
import { SceneObjectBase } from './SceneObjectBase.js';
|
|
4
|
+
import { getClosest } from './sceneGraph/utils.js';
|
|
5
|
+
import { parseUrlParam } from '../utils/parseUrlParam.js';
|
|
6
|
+
import { evaluateTimeRange } from '../utils/evaluateTimeRange.js';
|
|
7
|
+
import { RefreshEvent, locationService } from '@grafana/runtime';
|
|
8
|
+
import { isValid } from '../utils/date.js';
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
12
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
13
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
14
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
15
|
+
var __spreadValues = (a, b) => {
|
|
16
|
+
for (var prop in b || (b = {}))
|
|
17
|
+
if (__hasOwnProp.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
if (__getOwnPropSymbols)
|
|
20
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
21
|
+
if (__propIsEnum.call(b, prop))
|
|
22
|
+
__defNormalProp(a, prop, b[prop]);
|
|
23
|
+
}
|
|
24
|
+
return a;
|
|
25
|
+
};
|
|
26
|
+
class SceneTimeRange extends SceneObjectBase {
|
|
27
|
+
constructor(state = {}) {
|
|
28
|
+
var _a;
|
|
29
|
+
const from = state.from && isValid(state.from) ? state.from : "now-6h";
|
|
30
|
+
const to = state.to && isValid(state.to) ? state.to : "now";
|
|
31
|
+
const timeZone = state.timeZone;
|
|
32
|
+
const value = evaluateTimeRange(
|
|
33
|
+
from,
|
|
34
|
+
to,
|
|
35
|
+
timeZone || getTimeZone(),
|
|
36
|
+
state.fiscalYearStartMonth,
|
|
37
|
+
state.UNSAFE_nowDelay
|
|
38
|
+
);
|
|
39
|
+
const refreshOnActivate = (_a = state.refreshOnActivate) != null ? _a : { percent: 10 };
|
|
40
|
+
super(__spreadValues({ from, to, timeZone, value, refreshOnActivate }, state));
|
|
41
|
+
this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["from", "to", "timezone", "time", "time.window"] });
|
|
42
|
+
this.onTimeRangeChange = (timeRange) => {
|
|
43
|
+
const update = {};
|
|
44
|
+
if (typeof timeRange.raw.from === "string") {
|
|
45
|
+
update.from = timeRange.raw.from;
|
|
46
|
+
} else {
|
|
47
|
+
update.from = timeRange.raw.from.toISOString();
|
|
48
|
+
}
|
|
49
|
+
if (typeof timeRange.raw.to === "string") {
|
|
50
|
+
update.to = timeRange.raw.to;
|
|
51
|
+
} else {
|
|
52
|
+
update.to = timeRange.raw.to.toISOString();
|
|
53
|
+
}
|
|
54
|
+
update.value = evaluateTimeRange(
|
|
55
|
+
update.from,
|
|
56
|
+
update.to,
|
|
57
|
+
this.getTimeZone(),
|
|
58
|
+
this.state.fiscalYearStartMonth,
|
|
59
|
+
this.state.UNSAFE_nowDelay
|
|
60
|
+
);
|
|
61
|
+
if (update.from !== this.state.from || update.to !== this.state.to) {
|
|
62
|
+
this._urlSync.performBrowserHistoryAction(() => {
|
|
63
|
+
this.setState(update);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
this.onTimeZoneChange = (timeZone) => {
|
|
68
|
+
this._urlSync.performBrowserHistoryAction(() => {
|
|
69
|
+
this.setState({ timeZone });
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
this.onRefresh = () => {
|
|
73
|
+
this.setState({
|
|
74
|
+
value: evaluateTimeRange(
|
|
75
|
+
this.state.from,
|
|
76
|
+
this.state.to,
|
|
77
|
+
this.getTimeZone(),
|
|
78
|
+
this.state.fiscalYearStartMonth,
|
|
79
|
+
this.state.UNSAFE_nowDelay
|
|
80
|
+
)
|
|
81
|
+
});
|
|
82
|
+
this.publishEvent(new RefreshEvent(), true);
|
|
83
|
+
};
|
|
84
|
+
this.addActivationHandler(this._onActivate.bind(this));
|
|
85
|
+
}
|
|
86
|
+
_onActivate() {
|
|
87
|
+
if (!this.state.timeZone) {
|
|
88
|
+
const timeZoneSource = this.getTimeZoneSource();
|
|
89
|
+
if (timeZoneSource !== this) {
|
|
90
|
+
this._subs.add(
|
|
91
|
+
timeZoneSource.subscribeToState((n, p) => {
|
|
92
|
+
if (n.timeZone !== void 0 && n.timeZone !== p.timeZone) {
|
|
93
|
+
this.setState({
|
|
94
|
+
value: evaluateTimeRange(
|
|
95
|
+
this.state.from,
|
|
96
|
+
this.state.to,
|
|
97
|
+
timeZoneSource.getTimeZone(),
|
|
98
|
+
this.state.fiscalYearStartMonth,
|
|
99
|
+
this.state.UNSAFE_nowDelay
|
|
100
|
+
)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (rangeUtil.isRelativeTimeRange(this.state.value.raw)) {
|
|
108
|
+
this.refreshIfStale();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
refreshIfStale() {
|
|
112
|
+
var _a, _b, _c, _d;
|
|
113
|
+
let ms;
|
|
114
|
+
if (((_b = (_a = this.state) == null ? void 0 : _a.refreshOnActivate) == null ? void 0 : _b.percent) !== void 0) {
|
|
115
|
+
ms = this.calculatePercentOfInterval(this.state.refreshOnActivate.percent);
|
|
116
|
+
}
|
|
117
|
+
if (((_d = (_c = this.state) == null ? void 0 : _c.refreshOnActivate) == null ? void 0 : _d.afterMs) !== void 0) {
|
|
118
|
+
ms = Math.min(this.state.refreshOnActivate.afterMs, ms != null ? ms : Infinity);
|
|
119
|
+
}
|
|
120
|
+
if (ms !== void 0) {
|
|
121
|
+
this.refreshRange(ms);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
getTimeZoneSource() {
|
|
125
|
+
if (!this.parent || !this.parent.parent) {
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
const source = getClosest(this.parent.parent, (o) => {
|
|
129
|
+
if (o.state.$timeRange && o.state.$timeRange.state.timeZone) {
|
|
130
|
+
return o.state.$timeRange;
|
|
131
|
+
}
|
|
132
|
+
return void 0;
|
|
133
|
+
});
|
|
134
|
+
if (!source) {
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
return source;
|
|
138
|
+
}
|
|
139
|
+
refreshRange(refreshAfterMs) {
|
|
140
|
+
var _a;
|
|
141
|
+
const value = evaluateTimeRange(
|
|
142
|
+
this.state.from,
|
|
143
|
+
this.state.to,
|
|
144
|
+
(_a = this.state.timeZone) != null ? _a : getTimeZone(),
|
|
145
|
+
this.state.fiscalYearStartMonth,
|
|
146
|
+
this.state.UNSAFE_nowDelay
|
|
147
|
+
);
|
|
148
|
+
const diff = value.to.diff(this.state.value.to, "milliseconds");
|
|
149
|
+
if (diff >= refreshAfterMs) {
|
|
150
|
+
this.setState({
|
|
151
|
+
value
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
calculatePercentOfInterval(percent) {
|
|
156
|
+
const intervalMs = this.state.value.to.diff(this.state.value.from, "milliseconds");
|
|
157
|
+
return Math.ceil(intervalMs / percent);
|
|
158
|
+
}
|
|
159
|
+
getTimeZone() {
|
|
160
|
+
if (this.state.timeZone) {
|
|
161
|
+
return this.state.timeZone;
|
|
162
|
+
}
|
|
163
|
+
const timeZoneSource = this.getTimeZoneSource();
|
|
164
|
+
if (timeZoneSource !== this) {
|
|
165
|
+
return timeZoneSource.state.timeZone;
|
|
166
|
+
}
|
|
167
|
+
return getTimeZone();
|
|
168
|
+
}
|
|
169
|
+
getUrlState() {
|
|
170
|
+
const params = locationService.getSearchObject();
|
|
171
|
+
const urlValues = { from: this.state.from, to: this.state.to, timezone: this.getTimeZone() };
|
|
172
|
+
if (params.time && params["time.window"]) {
|
|
173
|
+
urlValues.time = null;
|
|
174
|
+
urlValues["time.window"] = null;
|
|
175
|
+
}
|
|
176
|
+
return urlValues;
|
|
177
|
+
}
|
|
178
|
+
updateFromUrl(values) {
|
|
179
|
+
var _a, _b, _c;
|
|
180
|
+
const update = {};
|
|
181
|
+
let from = parseUrlParam(values.from);
|
|
182
|
+
let to = parseUrlParam(values.to);
|
|
183
|
+
if (values.time && values["time.window"]) {
|
|
184
|
+
const time = Array.isArray(values.time) ? values.time[0] : values.time;
|
|
185
|
+
const timeWindow = Array.isArray(values["time.window"]) ? values["time.window"][0] : values["time.window"];
|
|
186
|
+
const timeRange = getTimeWindow(time, timeWindow);
|
|
187
|
+
if (timeRange.from && isValid(timeRange.from)) {
|
|
188
|
+
from = timeRange.from;
|
|
189
|
+
}
|
|
190
|
+
if (timeRange.to && isValid(timeRange.to)) {
|
|
191
|
+
to = timeRange.to;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (from && isValid(from)) {
|
|
195
|
+
update.from = from;
|
|
196
|
+
}
|
|
197
|
+
if (to && isValid(to)) {
|
|
198
|
+
update.to = to;
|
|
199
|
+
}
|
|
200
|
+
if (typeof values.timezone === "string") {
|
|
201
|
+
update.timeZone = values.timezone !== "" ? values.timezone : void 0;
|
|
202
|
+
}
|
|
203
|
+
if (Object.keys(update).length === 0) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
update.value = evaluateTimeRange(
|
|
207
|
+
(_a = update.from) != null ? _a : this.state.from,
|
|
208
|
+
(_b = update.to) != null ? _b : this.state.to,
|
|
209
|
+
(_c = update.timeZone) != null ? _c : this.getTimeZone(),
|
|
210
|
+
this.state.fiscalYearStartMonth,
|
|
211
|
+
this.state.UNSAFE_nowDelay
|
|
212
|
+
);
|
|
213
|
+
return this.setState(update);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function getTimeWindow(time, timeWindow) {
|
|
217
|
+
const valueTime = isNaN(Date.parse(time)) ? parseInt(time, 10) : Date.parse(time);
|
|
218
|
+
let timeWindowMs;
|
|
219
|
+
if (timeWindow.match(/^\d+$/) && parseInt(timeWindow, 10)) {
|
|
220
|
+
timeWindowMs = parseInt(timeWindow, 10);
|
|
221
|
+
} else {
|
|
222
|
+
timeWindowMs = rangeUtil.intervalToMs(timeWindow);
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
from: toUtc(valueTime - timeWindowMs / 2).toISOString(),
|
|
226
|
+
to: toUtc(valueTime + timeWindowMs / 2).toISOString()
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { SceneTimeRange };
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVUaW1lUmFuZ2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL1NjZW5lVGltZVJhbmdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRUaW1lWm9uZSwgcmFuZ2VVdGlsLCBUaW1lUmFuZ2UsIHRvVXRjIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyBUaW1lWm9uZSB9IGZyb20gJ0BncmFmYW5hL3NjaGVtYSc7XG5cbmltcG9ydCB7IFNjZW5lT2JqZWN0VXJsU3luY0NvbmZpZyB9IGZyb20gJy4uL3NlcnZpY2VzL1NjZW5lT2JqZWN0VXJsU3luY0NvbmZpZyc7XG5cbmltcG9ydCB7IFNjZW5lT2JqZWN0QmFzZSB9IGZyb20gJy4vU2NlbmVPYmplY3RCYXNlJztcbmltcG9ydCB7IFNjZW5lVGltZVJhbmdlTGlrZSwgU2NlbmVUaW1lUmFuZ2VTdGF0ZSwgU2NlbmVPYmplY3RVcmxWYWx1ZXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldENsb3Nlc3QgfSBmcm9tICcuL3NjZW5lR3JhcGgvdXRpbHMnO1xuaW1wb3J0IHsgcGFyc2VVcmxQYXJhbSB9IGZyb20gJy4uL3V0aWxzL3BhcnNlVXJsUGFyYW0nO1xuaW1wb3J0IHsgZXZhbHVhdGVUaW1lUmFuZ2UgfSBmcm9tICcuLi91dGlscy9ldmFsdWF0ZVRpbWVSYW5nZSc7XG5pbXBvcnQgeyBsb2NhdGlvblNlcnZpY2UsIFJlZnJlc2hFdmVudCB9IGZyb20gJ0BncmFmYW5hL3J1bnRpbWUnO1xuaW1wb3J0IHsgaXNWYWxpZCB9IGZyb20gJy4uL3V0aWxzL2RhdGUnO1xuXG5leHBvcnQgY2xhc3MgU2NlbmVUaW1lUmFuZ2UgZXh0ZW5kcyBTY2VuZU9iamVjdEJhc2U8U2NlbmVUaW1lUmFuZ2VTdGF0ZT4gaW1wbGVtZW50cyBTY2VuZVRpbWVSYW5nZUxpa2Uge1xuICBwcm90ZWN0ZWQgX3VybFN5bmMgPSBuZXcgU2NlbmVPYmplY3RVcmxTeW5jQ29uZmlnKHRoaXMsIHsga2V5czogWydmcm9tJywgJ3RvJywgJ3RpbWV6b25lJywgJ3RpbWUnLCAndGltZS53aW5kb3cnXSB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc3RhdGU6IFBhcnRpYWw8U2NlbmVUaW1lUmFuZ2VTdGF0ZT4gPSB7fSkge1xuICAgIGNvbnN0IGZyb20gPSBzdGF0ZS5mcm9tICYmIGlzVmFsaWQoc3RhdGUuZnJvbSkgPyBzdGF0ZS5mcm9tIDogJ25vdy02aCc7XG4gICAgY29uc3QgdG8gPSBzdGF0ZS50byAmJiBpc1ZhbGlkKHN0YXRlLnRvKSA/IHN0YXRlLnRvIDogJ25vdyc7XG5cbiAgICBjb25zdCB0aW1lWm9uZSA9IHN0YXRlLnRpbWVab25lO1xuICAgIGNvbnN0IHZhbHVlID0gZXZhbHVhdGVUaW1lUmFuZ2UoXG4gICAgICBmcm9tLFxuICAgICAgdG8sXG4gICAgICB0aW1lWm9uZSB8fCBnZXRUaW1lWm9uZSgpLFxuICAgICAgc3RhdGUuZmlzY2FsWWVhclN0YXJ0TW9udGgsXG4gICAgICBzdGF0ZS5VTlNBRkVfbm93RGVsYXlcbiAgICApO1xuICAgIGNvbnN0IHJlZnJlc2hPbkFjdGl2YXRlID0gc3RhdGUucmVmcmVzaE9uQWN0aXZhdGUgPz8geyBwZXJjZW50OiAxMCB9O1xuICAgIHN1cGVyKHsgZnJvbSwgdG8sIHRpbWVab25lLCB2YWx1ZSwgcmVmcmVzaE9uQWN0aXZhdGUsIC4uLnN0YXRlIH0pO1xuXG4gICAgdGhpcy5hZGRBY3RpdmF0aW9uSGFuZGxlcih0aGlzLl9vbkFjdGl2YXRlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25BY3RpdmF0ZSgpIHtcbiAgICAvLyBXaGVuIFNjZW5lVGltZVJhbmdlIGhhcyBubyB0aW1lIHpvbmUgcHJvdmlkZWQsIGZpbmQgY2xvc2VzdCBzb3VyY2Ugb2YgdGltZSB6b25lIGFuZCBzdWJzY3JpYmUgdG8gaXRcbiAgICBpZiAoIXRoaXMuc3RhdGUudGltZVpvbmUpIHtcbiAgICAgIGNvbnN0IHRpbWVab25lU291cmNlID0gdGhpcy5nZXRUaW1lWm9uZVNvdXJjZSgpO1xuICAgICAgaWYgKHRpbWVab25lU291cmNlICE9PSB0aGlzKSB7XG4gICAgICAgIHRoaXMuX3N1YnMuYWRkKFxuICAgICAgICAgIHRpbWVab25lU291cmNlLnN1YnNjcmliZVRvU3RhdGUoKG4sIHApID0+IHtcbiAgICAgICAgICAgIGlmIChuLnRpbWVab25lICE9PSB1bmRlZmluZWQgJiYgbi50aW1lWm9uZSAhPT0gcC50aW1lWm9uZSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZhbHVhdGVUaW1lUmFuZ2UoXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmZyb20sXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRvLFxuICAgICAgICAgICAgICAgICAgdGltZVpvbmVTb3VyY2UuZ2V0VGltZVpvbmUoKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlzY2FsWWVhclN0YXJ0TW9udGgsXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLlVOU0FGRV9ub3dEZWxheVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlVXRpbC5pc1JlbGF0aXZlVGltZVJhbmdlKHRoaXMuc3RhdGUudmFsdWUucmF3KSkge1xuICAgICAgdGhpcy5yZWZyZXNoSWZTdGFsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaElmU3RhbGUoKSB7XG4gICAgbGV0IG1zO1xuICAgIGlmICh0aGlzLnN0YXRlPy5yZWZyZXNoT25BY3RpdmF0ZT8ucGVyY2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtcyA9IHRoaXMuY2FsY3VsYXRlUGVyY2VudE9mSW50ZXJ2YWwodGhpcy5zdGF0ZS5yZWZyZXNoT25BY3RpdmF0ZS5wZXJjZW50KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGU/LnJlZnJlc2hPbkFjdGl2YXRlPy5hZnRlck1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1zID0gTWF0aC5taW4odGhpcy5zdGF0ZS5yZWZyZXNoT25BY3RpdmF0ZS5hZnRlck1zLCBtcyA/PyBJbmZpbml0eSk7XG4gICAgfVxuICAgIGlmIChtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlZnJlc2hSYW5nZShtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdpbGwgdHJhdmVyc2UgdXAgdGhlIHNjZW5lIGdyYXBoIHRvIGZpbmQgdGhlIGNsb3Nlc3QgU2NlbmVUaW1lUmFuZ2VMaWtlIHdpdGggdGltZSB6b25lIHNldFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUaW1lWm9uZVNvdXJjZSgpIHtcbiAgICBpZiAoIXRoaXMucGFyZW50IHx8ICF0aGlzLnBhcmVudC5wYXJlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IHNvdXJjZSBvZiB0aW1lIHpvbmVcbiAgICBjb25zdCBzb3VyY2UgPSBnZXRDbG9zZXN0PFNjZW5lVGltZVJhbmdlTGlrZT4odGhpcy5wYXJlbnQucGFyZW50LCAobykgPT4ge1xuICAgICAgaWYgKG8uc3RhdGUuJHRpbWVSYW5nZSAmJiBvLnN0YXRlLiR0aW1lUmFuZ2Uuc3RhdGUudGltZVpvbmUpIHtcbiAgICAgICAgcmV0dXJuIG8uc3RhdGUuJHRpbWVSYW5nZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGltZSByYW5nZSBpZiBpdCBpcyBvbGRlciB0aGFuIHRoZSBpbnZhbGlkYXRpb24gaW50ZXJ2YWxcbiAgICogQHBhcmFtIHJlZnJlc2hBZnRlck1zIGludmFsaWRhdGlvbiBpbnRlcnZhbCAobWlsbGlzZWNvbmRzKVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoUmFuZ2UocmVmcmVzaEFmdGVyTXM6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbHVlID0gZXZhbHVhdGVUaW1lUmFuZ2UoXG4gICAgICB0aGlzLnN0YXRlLmZyb20sXG4gICAgICB0aGlzLnN0YXRlLnRvLFxuICAgICAgdGhpcy5zdGF0ZS50aW1lWm9uZSA/PyBnZXRUaW1lWm9uZSgpLFxuICAgICAgdGhpcy5zdGF0ZS5maXNjYWxZZWFyU3RhcnRNb250aCxcbiAgICAgIHRoaXMuc3RhdGUuVU5TQUZFX25vd0RlbGF5XG4gICAgKTtcblxuICAgIGNvbnN0IGRpZmYgPSB2YWx1ZS50by5kaWZmKHRoaXMuc3RhdGUudmFsdWUudG8sICdtaWxsaXNlY29uZHMnKTtcbiAgICBpZiAoZGlmZiA+PSByZWZyZXNoQWZ0ZXJNcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVQZXJjZW50T2ZJbnRlcnZhbChwZXJjZW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGludGVydmFsTXMgPSB0aGlzLnN0YXRlLnZhbHVlLnRvLmRpZmYodGhpcy5zdGF0ZS52YWx1ZS5mcm9tLCAnbWlsbGlzZWNvbmRzJyk7XG4gICAgcmV0dXJuIE1hdGguY2VpbChpbnRlcnZhbE1zIC8gcGVyY2VudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZVpvbmUoKTogVGltZVpvbmUge1xuICAgIC8vIFJldHVybiBsb2NhbCB0aW1lIHpvbmUgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5zdGF0ZS50aW1lWm9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGltZVpvbmU7XG4gICAgfVxuXG4gICAgLy8gUmVzb2x2ZSBoaWdoZXIgbGV2ZWwgdGltZSB6b25lIHNvdXJjZVxuICAgIGNvbnN0IHRpbWVab25lU291cmNlID0gdGhpcy5nZXRUaW1lWm9uZVNvdXJjZSgpO1xuICAgIGlmICh0aW1lWm9uZVNvdXJjZSAhPT0gdGhpcykge1xuICAgICAgcmV0dXJuIHRpbWVab25lU291cmNlLnN0YXRlLnRpbWVab25lITtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZGVmYXVsdCB0aW1lIHpvbmVcbiAgICByZXR1cm4gZ2V0VGltZVpvbmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRpbWVSYW5nZUNoYW5nZSA9ICh0aW1lUmFuZ2U6IFRpbWVSYW5nZSkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZTogUGFydGlhbDxTY2VuZVRpbWVSYW5nZVN0YXRlPiA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiB0aW1lUmFuZ2UucmF3LmZyb20gPT09ICdzdHJpbmcnKSB7XG4gICAgICB1cGRhdGUuZnJvbSA9IHRpbWVSYW5nZS5yYXcuZnJvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlLmZyb20gPSB0aW1lUmFuZ2UucmF3LmZyb20udG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRpbWVSYW5nZS5yYXcudG8gPT09ICdzdHJpbmcnKSB7XG4gICAgICB1cGRhdGUudG8gPSB0aW1lUmFuZ2UucmF3LnRvO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGUudG8gPSB0aW1lUmFuZ2UucmF3LnRvLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlLnZhbHVlID0gZXZhbHVhdGVUaW1lUmFuZ2UoXG4gICAgICB1cGRhdGUuZnJvbSxcbiAgICAgIHVwZGF0ZS50byxcbiAgICAgIHRoaXMuZ2V0VGltZVpvbmUoKSxcbiAgICAgIHRoaXMuc3RhdGUuZmlzY2FsWWVhclN0YXJ0TW9udGgsXG4gICAgICB0aGlzLnN0YXRlLlVOU0FGRV9ub3dEZWxheVxuICAgICk7XG5cbiAgICAvLyBPbmx5IHVwZGF0ZSBpZiB0aW1lIHJhbmdlIGFjdHVhbGx5IGNoYW5nZWRcbiAgICBpZiAodXBkYXRlLmZyb20gIT09IHRoaXMuc3RhdGUuZnJvbSB8fCB1cGRhdGUudG8gIT09IHRoaXMuc3RhdGUudG8pIHtcbiAgICAgIHRoaXMuX3VybFN5bmMucGVyZm9ybUJyb3dzZXJIaXN0b3J5QWN0aW9uKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh1cGRhdGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHB1YmxpYyBvblRpbWVab25lQ2hhbmdlID0gKHRpbWVab25lOiBUaW1lWm9uZSkgPT4ge1xuICAgIHRoaXMuX3VybFN5bmMucGVyZm9ybUJyb3dzZXJIaXN0b3J5QWN0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyB0aW1lWm9uZSB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBwdWJsaWMgb25SZWZyZXNoID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgdmFsdWU6IGV2YWx1YXRlVGltZVJhbmdlKFxuICAgICAgICB0aGlzLnN0YXRlLmZyb20sXG4gICAgICAgIHRoaXMuc3RhdGUudG8sXG4gICAgICAgIHRoaXMuZ2V0VGltZVpvbmUoKSxcbiAgICAgICAgdGhpcy5zdGF0ZS5maXNjYWxZZWFyU3RhcnRNb250aCxcbiAgICAgICAgdGhpcy5zdGF0ZS5VTlNBRkVfbm93RGVsYXlcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICB0aGlzLnB1Ymxpc2hFdmVudChuZXcgUmVmcmVzaEV2ZW50KCksIHRydWUpO1xuICB9O1xuXG4gIHB1YmxpYyBnZXRVcmxTdGF0ZSgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBsb2NhdGlvblNlcnZpY2UuZ2V0U2VhcmNoT2JqZWN0KCk7XG4gICAgY29uc3QgdXJsVmFsdWVzOiBTY2VuZU9iamVjdFVybFZhbHVlcyA9IHsgZnJvbTogdGhpcy5zdGF0ZS5mcm9tLCB0bzogdGhpcy5zdGF0ZS50bywgdGltZXpvbmU6IHRoaXMuZ2V0VGltZVpvbmUoKSB9O1xuXG4gICAgLy8gQ2xlYXIgdGltZSBhbmQgdGltZS53aW5kb3cgb25jZSB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gZnJvbSBhbmQgdG9cbiAgICBpZiAocGFyYW1zLnRpbWUgJiYgcGFyYW1zWyd0aW1lLndpbmRvdyddKSB7XG4gICAgICB1cmxWYWx1ZXMudGltZSA9IG51bGw7XG4gICAgICB1cmxWYWx1ZXNbJ3RpbWUud2luZG93J10gPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB1cmxWYWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRnJvbVVybCh2YWx1ZXM6IFNjZW5lT2JqZWN0VXJsVmFsdWVzKSB7XG4gICAgY29uc3QgdXBkYXRlOiBQYXJ0aWFsPFNjZW5lVGltZVJhbmdlU3RhdGU+ID0ge307XG5cbiAgICBsZXQgZnJvbSA9IHBhcnNlVXJsUGFyYW0odmFsdWVzLmZyb20pO1xuICAgIGxldCB0byA9IHBhcnNlVXJsUGFyYW0odmFsdWVzLnRvKTtcblxuICAgIGlmICh2YWx1ZXMudGltZSAmJiB2YWx1ZXNbJ3RpbWUud2luZG93J10pIHtcbiAgICAgIGNvbnN0IHRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlcy50aW1lKSA/IHZhbHVlcy50aW1lWzBdIDogdmFsdWVzLnRpbWU7XG4gICAgICBjb25zdCB0aW1lV2luZG93ID0gQXJyYXkuaXNBcnJheSh2YWx1ZXNbJ3RpbWUud2luZG93J10pID8gdmFsdWVzWyd0aW1lLndpbmRvdyddWzBdIDogdmFsdWVzWyd0aW1lLndpbmRvdyddO1xuICAgICAgY29uc3QgdGltZVJhbmdlID0gZ2V0VGltZVdpbmRvdyh0aW1lLCB0aW1lV2luZG93KTtcbiAgICAgIGlmICh0aW1lUmFuZ2UuZnJvbSAmJiBpc1ZhbGlkKHRpbWVSYW5nZS5mcm9tKSkge1xuICAgICAgICBmcm9tID0gdGltZVJhbmdlLmZyb207XG4gICAgICB9XG5cbiAgICAgIGlmICh0aW1lUmFuZ2UudG8gJiYgaXNWYWxpZCh0aW1lUmFuZ2UudG8pKSB7XG4gICAgICAgIHRvID0gdGltZVJhbmdlLnRvO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcm9tICYmIGlzVmFsaWQoZnJvbSkpIHtcbiAgICAgIHVwZGF0ZS5mcm9tID0gZnJvbTtcbiAgICB9XG5cbiAgICBpZiAodG8gJiYgaXNWYWxpZCh0bykpIHtcbiAgICAgIHVwZGF0ZS50byA9IHRvO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWVzLnRpbWV6b25lID09PSAnc3RyaW5nJykge1xuICAgICAgdXBkYXRlLnRpbWVab25lID0gdmFsdWVzLnRpbWV6b25lICE9PSAnJyA/IHZhbHVlcy50aW1lem9uZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXModXBkYXRlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGUudmFsdWUgPSBldmFsdWF0ZVRpbWVSYW5nZShcbiAgICAgIHVwZGF0ZS5mcm9tID8/IHRoaXMuc3RhdGUuZnJvbSxcbiAgICAgIHVwZGF0ZS50byA/PyB0aGlzLnN0YXRlLnRvLFxuICAgICAgdXBkYXRlLnRpbWVab25lID8/IHRoaXMuZ2V0VGltZVpvbmUoKSxcbiAgICAgIHRoaXMuc3RhdGUuZmlzY2FsWWVhclN0YXJ0TW9udGgsXG4gICAgICB0aGlzLnN0YXRlLlVOU0FGRV9ub3dEZWxheVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh1cGRhdGUpO1xuICB9XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gb2YgdGhlIHRpbWUgcmFuZ2UgZnJvbSB0aW1lLXRpbWUud2luZG93LzIgdG8gdGltZSt0aW1lLndpbmRvdy8yLiBCb3RoIGJlIHNwZWNpZmllZCBpbiBtcy4gRm9yIGV4YW1wbGUgP3RpbWU9MTUwMDAwMDAwMDAwMCZ0aW1lLndpbmRvdz0xMDAwMCByZXN1bHRzIGluIGEgMTAtc2Vjb25kIHRpbWUgcmFuZ2UgZnJvbSAxNDk5OTk5OTk1MDAwIHRvIDE1MDAwMDAwMDUwMDBgLlxuICogQHBhcmFtIHRpbWUgLSB0aW1lIGluIG1zXG4gKiBAcGFyYW0gdGltZVdpbmRvdyAtIHRpbWUgd2luZG93IGluIG1zIG9yIGludGVydmFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRUaW1lV2luZG93KHRpbWU6IHN0cmluZywgdGltZVdpbmRvdzogc3RyaW5nKSB7XG4gIC8vIFBhcnNlIHRoZSB0aW1lLCBhc3N1bWluZyBpdCBjb3VsZCBiZSBhbiBJU08gc3RyaW5nIG9yIGEgbnVtYmVyIGluIG1pbGxpc2Vjb25kc1xuICBjb25zdCB2YWx1ZVRpbWUgPSBpc05hTihEYXRlLnBhcnNlKHRpbWUpKSA/IHBhcnNlSW50KHRpbWUsIDEwKSA6IERhdGUucGFyc2UodGltZSk7XG5cbiAgbGV0IHRpbWVXaW5kb3dNcztcblxuICBpZiAodGltZVdpbmRvdy5tYXRjaCgvXlxcZCskLykgJiYgcGFyc2VJbnQodGltZVdpbmRvdywgMTApKSB7XG4gICAgLy8gd2hlbiB0aW1lIHdpbmRvdyBpcyBzcGVjaWZpZWQgaW4gbXNcbiAgICB0aW1lV2luZG93TXMgPSBwYXJzZUludCh0aW1lV2luZG93LCAxMCk7XG4gIH0gZWxzZSB7XG4gICAgdGltZVdpbmRvd01zID0gcmFuZ2VVdGlsLmludGVydmFsVG9Ncyh0aW1lV2luZG93KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZnJvbTogdG9VdGModmFsdWVUaW1lIC0gdGltZVdpbmRvd01zIC8gMikudG9JU09TdHJpbmcoKSxcbiAgICB0bzogdG9VdGModmFsdWVUaW1lICsgdGltZVdpbmRvd01zIC8gMikudG9JU09TdHJpbmcoKSxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYU8sTUFBTSx1QkFBdUIsZUFBbUUsQ0FBQTtBQUFBLEVBRzlGLFdBQUEsQ0FBWSxLQUFzQyxHQUFBLEVBQUksRUFBQTtBQWhCL0QsSUFBQSxJQUFBLEVBQUEsQ0FBQTtBQWlCSSxJQUFNLE1BQUEsSUFBQSxHQUFPLE1BQU0sSUFBUSxJQUFB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
|