From e7baf9804e17712bf715c932c00fe429505284a6 Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Tue, 4 Mar 2025 20:06:24 -0600 Subject: [PATCH] Transformations: Avoid mutation during variable interpolation (#101594) --- .../src/transformations/transformDataFrame.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/grafana-data/src/transformations/transformDataFrame.ts b/packages/grafana-data/src/transformations/transformDataFrame.ts index 1a923ec0d86..35951f9f5f6 100644 --- a/packages/grafana-data/src/transformations/transformDataFrame.ts +++ b/packages/grafana-data/src/transformations/transformDataFrame.ts @@ -1,3 +1,4 @@ +import { cloneDeep } from 'lodash'; import { MonoTypeOperatorFunction, Observable, of } from 'rxjs'; import { map, mergeMap } from 'rxjs/operators'; @@ -12,9 +13,6 @@ import { import { getFrameMatchers } from './matchers'; import { standardTransformersRegistry, TransformerRegistryItem } from './standardTransformersRegistry'; -// when running within Scenes, we can skip var interpolation, since it's already handled upstream -const isScenes = window.__grafanaSceneContext != null; - const getOperator = (config: DataTransformerConfig, ctx: DataTransformContext): MonoTypeOperatorFunction => (source) => { @@ -27,9 +25,12 @@ const getOperator = const defaultOptions = info.transformation.defaultOptions ?? {}; const options = { ...defaultOptions, ...config.options }; + // when running within Scenes, we can skip var interpolation, since it's already handled upstream + const isScenes = window.__grafanaSceneContext != null; + const interpolated = isScenes ? options - : deepIterate(options, (v) => { + : deepIterate(cloneDeep(options), (v) => { if (typeof v === 'string') { return ctx.interpolate(v); }