From 89945b1bc21b843193df6217cca9ba994f3947a5 Mon Sep 17 00:00:00 2001 From: Dominik Prokop Date: Tue, 23 Jul 2024 15:28:15 +0200 Subject: [PATCH] Revert "TemplateSrv: Backportable version of 90808 (#90816)" (#90831) This reverts commit 6849a6b86b40a09cf2a46860e40724ecd60903f6. --- .betterer.results | 6 ++---- public/app/features/templating/template_srv.ts | 5 ++--- public/app/plugins/datasource/dashboard/datasource.ts | 10 ++++++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.betterer.results b/.betterer.results index 304db52d9ae..ef38d09552e 100644 --- a/.betterer.results +++ b/.betterer.results @@ -5429,7 +5429,8 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Do not use any type assertions.", "9"], [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"] + [0, 0, 0, "Do not use any type assertions.", "11"], + [0, 0, 0, "Do not use any type assertions.", "12"] ], "public/app/features/trails/ActionTabs/AddToFiltersGraphAction.tsx:5381": [ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"] @@ -6112,9 +6113,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/plugins/datasource/dashboard/datasource.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/plugins/datasource/dashboard/index.ts:5381": [ [0, 0, 0, "Do not re-export imported variable (\`./runSharedRequest\`)", "0"], [0, 0, 0, "Do not re-export imported variable (\`./DashboardQueryEditor\`)", "1"], diff --git a/public/app/features/templating/template_srv.ts b/public/app/features/templating/template_srv.ts index babc6d2cbd4..e0618c7404d 100644 --- a/public/app/features/templating/template_srv.ts +++ b/public/app/features/templating/template_srv.ts @@ -15,7 +15,7 @@ import { TemplateSrv as BaseTemplateSrv, VariableInterpolation, } from '@grafana/runtime'; -import { sceneGraph, VariableCustomFormatterFn, SceneObject } from '@grafana/scenes'; +import { sceneGraph, VariableCustomFormatterFn, SafeSerializableSceneObject } from '@grafana/scenes'; import { VariableFormatID } from '@grafana/schema'; import { getVariablesCompatibility } from '../dashboard-scene/utils/getVariablesCompatibility'; @@ -259,8 +259,7 @@ export class TemplateSrv implements BaseTemplateSrv { ): string { // Scenes compatability (primary method) is via SceneObject inside scopedVars. This way we get a much more accurate "local" scope for the evaluation if (scopedVars && scopedVars.__sceneObject) { - // We are using valueOf here as __sceneObject can be after scenes 5.6.0 a SafeSerializableSceneObject that overrides valueOf to return the underlying SceneObject - const sceneObject: SceneObject = scopedVars.__sceneObject.value.valueOf(); + const sceneObject = (scopedVars.__sceneObject.value as SafeSerializableSceneObject).valueOf(); return sceneGraph.interpolate( sceneObject, target, diff --git a/public/app/plugins/datasource/dashboard/datasource.ts b/public/app/plugins/datasource/dashboard/datasource.ts index 58f848e963f..d942b397478 100644 --- a/public/app/plugins/datasource/dashboard/datasource.ts +++ b/public/app/plugins/datasource/dashboard/datasource.ts @@ -8,7 +8,7 @@ import { TestDataSourceResponse, ScopedVar, } from '@grafana/data'; -import { SceneDataProvider, SceneDataTransformer, SceneObject } from '@grafana/scenes'; +import { SafeSerializableSceneObject, SceneDataProvider, SceneDataTransformer, SceneObject } from '@grafana/scenes'; import { findVizPanelByKey, getVizPanelKeyForPanelId } from 'app/features/dashboard-scene/utils/utils'; import { DashboardQuery } from './types'; @@ -27,7 +27,13 @@ export class DashboardDatasource extends DataSourceApi { query(options: DataQueryRequest): Observable { const sceneScopedVar: ScopedVar | undefined = options.scopedVars?.__sceneObject; - let scene: SceneObject | undefined = sceneScopedVar ? (sceneScopedVar.valueOf() as SceneObject) : undefined; + let scene: SceneObject | undefined; + + if (!(sceneScopedVar instanceof SafeSerializableSceneObject)) { + throw new Error('Scene object from scopedVars is not safe serializable.'); + } + + scene = sceneScopedVar.valueOf(); if (options.requestId.indexOf('mixed') > -1) { throw new Error('Dashboard data source cannot be used with Mixed data source.');