@grafana/scenes 8.17.0 → 8.18.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.
@@ -7,11 +7,18 @@ import { SceneObjectBase } from '../core/SceneObjectBase.js';
7
7
  import { VariableDependencyConfig } from '../variables/VariableDependencyConfig.js';
8
8
  import { SceneDataLayerSet } from './SceneDataLayerSet.js';
9
9
  import { findPanelProfiler } from '../utils/findPanelProfiler.js';
10
+ import { isSystemTransformationsProvider, freezeResolved, toSystemTransformation } from './systemTransformations/systemTransformationProvider.js';
11
+ import { NO_SYSTEM_TRANSFORMATIONS, NO_SERIES } from './systemTransformations/constants.js';
10
12
 
11
13
  class SceneDataTransformer extends SceneObjectBase {
12
14
  constructor(state) {
13
15
  super(state);
14
16
  this._results = new ReplaySubject(1);
17
+ /**
18
+ * Whether a previous activation already ran a pass, which is what makes the provider found on this one a
19
+ * *change* rather than a first discovery. Not carried over by clone, unlike `_prevDataFromSource`.
20
+ */
21
+ this._hasActivatedBefore = false;
15
22
  /**
16
23
  * Scan transformations for variable usage and re-process transforms when a variable values change
17
24
  */
@@ -27,15 +34,50 @@ class SceneDataTransformer extends SceneObjectBase {
27
34
  activationHandler() {
28
35
  const sourceData = this.getSourceData();
29
36
  this._subs.add(sourceData.subscribeToState((state) => this.transform(state.data)));
37
+ const providerChanged = this._discoverProvider();
30
38
  if (sourceData.state.data) {
31
- this.transform(sourceData.state.data);
39
+ this.transform(sourceData.state.data, providerChanged);
32
40
  }
41
+ this._hasActivatedBefore = true;
33
42
  return () => {
34
43
  if (this._transformSub) {
35
44
  this._transformSub.unsubscribe();
36
45
  }
37
46
  };
38
47
  }
48
+ /**
49
+ * Checks the parent for system transformation provider.
50
+ * Reports whether what the pipeline should run has changed since the last pass, so the caller can force one.
51
+ */
52
+ _discoverProvider() {
53
+ const previous = this._provider;
54
+ const provider = this.parent;
55
+ if (!isSystemTransformationsProvider(provider)) {
56
+ this._provider = void 0;
57
+ this._resolvedSystem = void 0;
58
+ return this._hasActivatedBefore && previous !== void 0;
59
+ }
60
+ this._provider = provider;
61
+ this._resolvedSystem = void 0;
62
+ if (this._hasActivatedBefore && previous !== provider) {
63
+ return true;
64
+ }
65
+ return this._systemChangedSinceLastPass();
66
+ }
67
+ /**
68
+ * Whether the provider resolves to something other than what the last pass ran.
69
+ *
70
+ * The provider instance being unchanged is not enough to conclude the pipeline is unchanged: nothing
71
+ * was watching while this was inactive, so a plugin that finished importing in that window resolves
72
+ * differently now. Source frames usually survive a re-activation unchanged, so without this the pass
73
+ * is skipped as already transformed and state.data keeps frames the reported pipeline never produced.
74
+ */
75
+ _systemChangedSinceLastPass() {
76
+ if (!this._lastPassSystem) {
77
+ return false;
78
+ }
79
+ return !isEqual(this._lastPassSystem, this.getResolvedSystemTransformations());
80
+ }
39
81
  getSourceData() {
40
82
  if (this.state.$data) {
41
83
  if (this.state.$data instanceof SceneDataLayerSet) {
@@ -60,9 +102,79 @@ class SceneDataTransformer extends SceneObjectBase {
60
102
  }
61
103
  return true;
62
104
  }
105
+ /**
106
+ * @internal
107
+ * Whether the pass behind the current state.data applied any system transformations. A provider that has
108
+ * stopped contributing still needs one more pass to take them back out.
109
+ */
110
+ hasAppliedSystemTransformations() {
111
+ const last = this._lastPassSystem;
112
+ return last !== void 0 && (last.prepend.length > 0 || last.append.length > 0);
113
+ }
63
114
  reprocessTransformations() {
115
+ this._resolvedSystem = void 0;
64
116
  this.transform(this.getSourceData().state.data, true);
65
117
  }
118
+ /**
119
+ * The system transformations for the given source frames.
120
+ * Public because provider output never reaches state, so this is the only way for readers
121
+ * (the transformations editor, the inspect data tab) to see what the pipeline is running.
122
+ */
123
+ getResolvedSystemTransformations(series) {
124
+ const provider = this._provider;
125
+ if (!provider) {
126
+ return NO_SYSTEM_TRANSFORMATIONS;
127
+ }
128
+ const frames = series != null ? series : this._sourceSeriesOrNone();
129
+ const memo = this._resolvedSystem;
130
+ if (memo && memo.series === frames) {
131
+ return memo.resolved;
132
+ }
133
+ const { prepend = [], append = [] } = this._resolveProvider(provider, frames);
134
+ const resolved = freezeResolved({
135
+ prepend: prepend.map((t) => toSystemTransformation(t, "prepend", provider.origin)),
136
+ append: append.map((t) => toSystemTransformation(t, "append", provider.origin))
137
+ });
138
+ this._resolvedSystem = { series: frames, resolved };
139
+ return resolved;
140
+ }
141
+ /**
142
+ * The source frames to resolve a provider against when the caller did not supply their own.
143
+ *
144
+ * Mirrors getSourceData's precondition: reading what is running must not throw for a transformer that is not wired.
145
+ * Since every VizPanel is a provider, a panel without `$data` would throw.
146
+ */
147
+ _sourceSeriesOrNone() {
148
+ var _a, _b, _c;
149
+ if (!this.state.$data && !((_a = this.parent) == null ? void 0 : _a.parent)) {
150
+ return NO_SERIES;
151
+ }
152
+ return (_c = (_b = this.getSourceData().state.data) == null ? void 0 : _b.series) != null ? _c : NO_SERIES;
153
+ }
154
+ _resolveProvider(provider, series) {
155
+ var _a;
156
+ try {
157
+ return (_a = provider.getSystemTransformations({ series })) != null ? _a : {};
158
+ } catch (err) {
159
+ console.error(`Error resolving system transformations for origin '${provider.origin}': `, err);
160
+ return {};
161
+ }
162
+ }
163
+ /**
164
+ * The system transformations to run for the given source frames.
165
+ */
166
+ _systemTransformationsFor(series) {
167
+ return this._provider ? this.getResolvedSystemTransformations(series) : NO_SYSTEM_TRANSFORMATIONS;
168
+ }
169
+ /**
170
+ * Places the user configured transformations between the system tiers, in prepend, user, append order.
171
+ */
172
+ _withSystemTransformations(system, transformations) {
173
+ if (system.prepend.length === 0 && system.append.length === 0) {
174
+ return transformations;
175
+ }
176
+ return [...system.prepend, ...transformations, ...system.append];
177
+ }
66
178
  /**
67
179
  * S3.1: Calculate transformation complexity metrics
68
180
  */
@@ -97,6 +209,7 @@ class SceneDataTransformer extends SceneObjectBase {
97
209
  const clone = super.clone(withState);
98
210
  if (this._prevDataFromSource) {
99
211
  clone["_prevDataFromSource"] = this._prevDataFromSource;
212
+ clone["_lastPassSystem"] = this._lastPassSystem;
100
213
  }
101
214
  return clone;
102
215
  }
@@ -136,15 +249,21 @@ class SceneDataTransformer extends SceneObjectBase {
136
249
  return false;
137
250
  }
138
251
  transform(data, force = false) {
139
- var _a;
252
+ var _a, _b;
140
253
  const timestamp = performance.now();
141
254
  const profiler = findPanelProfiler(this);
142
255
  const transformStartTime = performance.now();
143
256
  let transformationId;
144
257
  let endTransformCallback = null;
145
- if (this.state.transformations.length === 0 || !data) {
258
+ const system = data ? this._systemTransformationsFor(data.series) : NO_SYSTEM_TRANSFORMATIONS;
259
+ const transformations = data ? this._withSystemTransformations(system, this.state.transformations) : [];
260
+ if (transformations.length === 0 || !data) {
261
+ (_a = this._transformSub) == null ? void 0 : _a.unsubscribe();
146
262
  this._prevDataFromSource = data;
147
- this.setState({ data });
263
+ this._lastPassSystem = system;
264
+ if (data !== this.state.data) {
265
+ this.setState({ data });
266
+ }
148
267
  if (data) {
149
268
  this._results.next({ origin: this, data });
150
269
  }
@@ -154,7 +273,7 @@ class SceneDataTransformer extends SceneObjectBase {
154
273
  return;
155
274
  }
156
275
  if (profiler) {
157
- const transformationTypes = this.state.transformations.map((t) => {
276
+ const transformationTypes = transformations.map((t) => {
158
277
  if ("id" in t) {
159
278
  return t.id;
160
279
  } else {
@@ -162,10 +281,13 @@ class SceneDataTransformer extends SceneObjectBase {
162
281
  }
163
282
  }).join("+");
164
283
  transformationId = transformationTypes || "no-transforms";
165
- const metrics = this._calculateTransformationMetrics(data, this.state.transformations);
284
+ const metrics = this._calculateTransformationMetrics(data, transformations);
166
285
  endTransformCallback = profiler.onDataTransformStart(timestamp, transformationId, metrics);
167
286
  }
168
- const interpolatedTransformations = this._interpolateVariablesInTransformationConfigs(data);
287
+ const interpolatedTransformations = this._withSystemTransformations(
288
+ system,
289
+ this._interpolateVariablesInTransformationConfigs(data, this.state.transformations)
290
+ );
169
291
  const seriesTransformations = this._filterAndPrepareTransformationsByTopic(
170
292
  interpolatedTransformations,
171
293
  (transformation) => {
@@ -194,7 +316,7 @@ class SceneDataTransformer extends SceneObjectBase {
194
316
  }
195
317
  };
196
318
  const seriesStream = transformDataFrame(seriesTransformations, data.series, ctx);
197
- const annotationsStream = transformDataFrame(annotationsTransformations, (_a = data.annotations) != null ? _a : []);
319
+ const annotationsStream = transformDataFrame(annotationsTransformations, (_b = data.annotations) != null ? _b : []);
198
320
  let series = [];
199
321
  let annotations = [];
200
322
  this._transformSub = forkJoin([seriesStream, annotationsStream]).pipe(
@@ -245,21 +367,21 @@ class SceneDataTransformer extends SceneObjectBase {
245
367
  this.setState({ data: transformedData });
246
368
  this._results.next({ origin: this, data: transformedData });
247
369
  this._prevDataFromSource = data;
370
+ this._lastPassSystem = system;
248
371
  });
249
372
  }
250
- _interpolateVariablesInTransformationConfigs(data) {
373
+ _interpolateVariablesInTransformationConfigs(data, transformations) {
251
374
  var _a;
252
- const transformations = this.state.transformations;
253
375
  if (this._variableDependency.getNames().size === 0) {
254
376
  return transformations;
255
377
  }
256
- const onlyObjects = transformations.every((t) => typeof t === "object");
257
- if (onlyObjects) {
378
+ const isInterpolatable = (t) => typeof t === "object" && !("operator" in t);
379
+ if (transformations.every(isInterpolatable)) {
258
380
  return JSON.parse(sceneGraph.interpolate(this, JSON.stringify(transformations), (_a = data.request) == null ? void 0 : _a.scopedVars));
259
381
  }
260
382
  return transformations.map((t) => {
261
383
  var _a2;
262
- return typeof t === "object" ? JSON.parse(sceneGraph.interpolate(this, JSON.stringify(t), (_a2 = data.request) == null ? void 0 : _a2.scopedVars)) : t;
384
+ return isInterpolatable(t) ? JSON.parse(sceneGraph.interpolate(this, JSON.stringify(t), (_a2 = data.request) == null ? void 0 : _a2.scopedVars)) : t;
263
385
  });
264
386
  }
265
387
  _filterAndPrepareTransformationsByTopic(interpolatedTransformations, transformationFilter) {
@@ -1 +1 @@
1
- {"version":3,"file":"SceneDataTransformer.js","sources":["../../../src/querying/SceneDataTransformer.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport {\n CustomTransformOperator,\n DataFrame,\n DataTopic,\n DataTransformerConfig,\n LoadingState,\n PanelData,\n ScopedVars,\n transformDataFrame,\n} from '@grafana/data';\nimport { toDataQueryError } from '@grafana/runtime';\nimport { catchError, forkJoin, map, of, ReplaySubject, Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { CustomTransformerDefinition, SceneDataProvider, SceneDataProviderResult, SceneDataState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneDataLayerSet } from './SceneDataLayerSet';\nimport { findPanelProfiler } from '../utils/findPanelProfiler';\n\nexport interface SceneDataTransformerState extends SceneDataState {\n /**\n * Array of standard transformation configs and custom transform operators\n */\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n}\n\n/**\n * You can use this as a $data object. It can either transform an inner $data DataProvider or if that is not set it will\n * subscribe to a DataProvider higher up in the scene graph and transform its data.\n *\n * The transformations array supports custom (runtime defined) transformation as well as declarative core transformations.\n * You can manually re-process the transformations by calling reprocessTransformations(). This is useful if you have\n * transformations that depend on other scene object states.\n */\nexport class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerState> implements SceneDataProvider {\n private _transformSub?: Unsubscribable;\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _prevDataFromSource?: PanelData;\n\n /**\n * Scan transformations for variable usage and re-process transforms when a variable values change\n */\n protected _variableDependency: VariableDependencyConfig<SceneDataTransformerState> = new VariableDependencyConfig(\n this,\n {\n statePaths: ['transformations'],\n onReferencedVariableValueChanged: () => this.reprocessTransformations(),\n }\n );\n\n public constructor(state: SceneDataTransformerState) {\n super(state);\n\n this.addActivationHandler(() => this.activationHandler());\n }\n\n private activationHandler() {\n const sourceData = this.getSourceData();\n\n this._subs.add(sourceData.subscribeToState((state) => this.transform(state.data)));\n\n if (sourceData.state.data) {\n this.transform(sourceData.state.data);\n }\n\n return () => {\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n };\n }\n\n private getSourceData(): SceneDataProvider {\n if (this.state.$data) {\n if (this.state.$data instanceof SceneDataLayerSet) {\n throw new Error('SceneDataLayerSet can not be used as data provider for SceneDataTransformer.');\n }\n return this.state.$data;\n }\n\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneDataTransformer must either have $data set on it or have a parent.parent with $data');\n }\n\n return sceneGraph.getData(this.parent.parent);\n }\n\n public setContainerWidth(width: number) {\n if (this.state.$data && this.state.$data.setContainerWidth) {\n this.state.$data.setContainerWidth(width);\n }\n }\n\n public isDataReadyToDisplay() {\n const dataObject = this.getSourceData();\n if (dataObject.isDataReadyToDisplay) {\n return dataObject.isDataReadyToDisplay();\n }\n\n return true;\n }\n\n public reprocessTransformations() {\n this.transform(this.getSourceData().state.data, true);\n }\n\n /**\n * S3.1: Calculate transformation complexity metrics\n */\n private _calculateTransformationMetrics(\n data: PanelData,\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>\n ): {\n transformationCount: number;\n seriesTransformationCount: number;\n annotationTransformationCount: number;\n } {\n const transformationCount = transformations.length;\n\n // Count transformations by topic (series vs annotations)\n const seriesTransformationCount = transformations.filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic == null || transformation.topic === DataTopic.Series;\n }\n return true; // Custom transformations default to series\n }).length;\n\n const annotationTransformationCount = transformations.filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic === DataTopic.Annotations;\n }\n return false;\n }).length;\n\n return {\n transformationCount,\n seriesTransformationCount,\n annotationTransformationCount,\n };\n }\n\n public cancelQuery() {\n this.getSourceData().cancelQuery?.();\n }\n\n public getResultsStream() {\n return this._results;\n }\n\n public clone(withState?: Partial<SceneDataTransformerState>) {\n const clone = super.clone(withState);\n\n if (this._prevDataFromSource) {\n clone['_prevDataFromSource'] = this._prevDataFromSource;\n }\n\n return clone;\n }\n\n public isInViewChanged(isInView: boolean) {\n this.state.$data?.isInViewChanged?.(isInView);\n }\n\n public bypassIsInViewChanged(bypassIsInView: boolean) {\n this.state.$data?.bypassIsInViewChanged?.(bypassIsInView);\n }\n\n private haveAlreadyTransformedData(data: PanelData) {\n if (!this._prevDataFromSource) {\n return false;\n }\n\n if (data === this._prevDataFromSource) {\n return true;\n }\n\n const { series, annotations } = this._prevDataFromSource;\n\n if (data.series === series && data.annotations === annotations) {\n if (this.state.data) {\n const currentData = this.state.data;\n const nextData: PanelData = {\n ...data,\n series: currentData.series,\n annotations: currentData.annotations,\n };\n\n const metadataChanged =\n currentData.state !== nextData.state ||\n currentData.request?.requestId !== nextData.request?.requestId ||\n currentData.error !== nextData.error ||\n !isEqual(currentData.errors, nextData.errors) ||\n !isEqual(currentData.timeRange, nextData.timeRange);\n\n if (metadataChanged) {\n this.setState({ data: nextData });\n this._results.next({ origin: this, data: nextData });\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n private transform(data: PanelData | undefined, force = false) {\n const timestamp = performance.now();\n // S3.1: Performance tracking entry point\n const profiler = findPanelProfiler(this);\n const transformStartTime = performance.now();\n let transformationId: string | undefined;\n let endTransformCallback:\n | ((\n endTimestamp: number,\n duration: number,\n success: boolean,\n result?: {\n outputSeriesCount?: number;\n outputAnnotationsCount?: number;\n error?: string;\n }\n ) => void)\n | null = null;\n\n if (this.state.transformations.length === 0 || !data) {\n this._prevDataFromSource = data;\n this.setState({ data });\n\n if (data) {\n this._results.next({ origin: this, data });\n }\n return;\n }\n\n // Skip transform step if we have already transformed this data\n if (!force && this.haveAlreadyTransformedData(data)) {\n return;\n }\n\n // S3.1: Start transformation tracking\n if (profiler) {\n // Create meaningful transformation identifier from actual transformations\n const transformationTypes = this.state.transformations\n .map((t) => {\n if ('id' in t) {\n // Standard DataTransformerConfig\n return t.id;\n } else {\n // CustomTransformerDefinition\n return 'customTransformation';\n }\n })\n .join('+');\n transformationId = transformationTypes || 'no-transforms';\n\n // Calculate transformation complexity metrics\n const metrics = this._calculateTransformationMetrics(data, this.state.transformations);\n\n // Start the DataProcessing phase with centralized logging - get end callback\n endTransformCallback = profiler.onDataTransformStart(timestamp, transformationId, metrics);\n }\n\n const interpolatedTransformations = this._interpolateVariablesInTransformationConfigs(data);\n\n const seriesTransformations = this._filterAndPrepareTransformationsByTopic(\n interpolatedTransformations,\n (transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic == null || transformation.topic === DataTopic.Series;\n }\n return true;\n }\n );\n const annotationsTransformations = this._filterAndPrepareTransformationsByTopic(\n interpolatedTransformations,\n (transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic === DataTopic.Annotations;\n }\n return false;\n }\n );\n\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n\n const ctx = {\n interpolate: (value: string, scopedVars?: ScopedVars) => {\n return sceneGraph.interpolate(this, value, { ...data.request?.scopedVars, ...scopedVars });\n },\n };\n\n const seriesStream = transformDataFrame(seriesTransformations, data.series, ctx);\n const annotationsStream = transformDataFrame(annotationsTransformations, data.annotations ?? []);\n\n let series: DataFrame[] = [];\n let annotations: DataFrame[] = [];\n\n this._transformSub = forkJoin([seriesStream, annotationsStream])\n .pipe(\n map((results) => {\n // this strategy allows transformations to take in series frames and produce anno frames\n // we look at each transformation's result and put it in the correct place\n results.forEach((frames) => {\n for (const frame of frames) {\n if (frame.meta?.dataTopic === DataTopic.Annotations) {\n annotations.push(frame);\n } else {\n series.push(frame);\n }\n }\n });\n\n return { ...data, series, annotations };\n }),\n catchError((err) => {\n const timestamp = performance.now();\n // S3.1: Performance tracking for transformation errors\n const duration = timestamp - transformStartTime;\n\n if (endTransformCallback) {\n // End the DataProcessing phase with centralized logging using callback\n endTransformCallback(timestamp, duration, false, {\n error: err.message || err,\n });\n }\n\n console.error('Error transforming data: ', err);\n const sourceErr = this.getSourceData().state.data?.errors || [];\n\n const transformationError = toDataQueryError(err);\n transformationError.message = `Error transforming data: ${transformationError.message}`;\n\n const result: PanelData = {\n ...data,\n state: LoadingState.Error,\n // Combine transformation error with upstream errors\n errors: [...sourceErr, transformationError],\n };\n\n return of(result);\n })\n )\n .subscribe((transformedData) => {\n const timestamp = performance.now();\n const duration = timestamp - transformStartTime;\n if (endTransformCallback) {\n // End the DataProcessing phase with centralized logging using callback\n endTransformCallback(timestamp, duration, true, {\n outputSeriesCount: transformedData.series.length,\n outputAnnotationsCount: transformedData.annotations?.length || 0,\n });\n }\n this.setState({ data: transformedData });\n this._results.next({ origin: this, data: transformedData });\n this._prevDataFromSource = data;\n });\n }\n\n private _interpolateVariablesInTransformationConfigs(\n data: PanelData\n ): Array<DataTransformerConfig | CustomTransformerDefinition> {\n const transformations = this.state.transformations;\n\n if (this._variableDependency.getNames().size === 0) {\n return transformations;\n }\n\n const onlyObjects = transformations.every((t) => typeof t === 'object');\n\n // If all transformations are config object we can interpolate them all at once\n if (onlyObjects) {\n return JSON.parse(sceneGraph.interpolate(this, JSON.stringify(transformations), data.request?.scopedVars));\n }\n\n return transformations.map((t) => {\n return typeof t === 'object'\n ? JSON.parse(sceneGraph.interpolate(this, JSON.stringify(t), data.request?.scopedVars))\n : t;\n });\n }\n\n private _filterAndPrepareTransformationsByTopic(\n interpolatedTransformations: Array<DataTransformerConfig<any> | CustomTransformerDefinition>,\n transformationFilter: (transformation: DataTransformerConfig<any> | CustomTransformerDefinition) => boolean\n ): Array<DataTransformerConfig<any> | CustomTransformOperator> {\n return interpolatedTransformations\n .filter(transformationFilter)\n .map((transformation) => ('operator' in transformation ? transformation.operator : transformation));\n }\n}\n"],"names":["_a","timestamp"],"mappings":"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"}
1
+ {"version":3,"file":"SceneDataTransformer.js","sources":["../../../src/querying/SceneDataTransformer.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport {\n CustomTransformOperator,\n DataFrame,\n DataTopic,\n DataTransformerConfig,\n LoadingState,\n PanelData,\n ScopedVars,\n transformDataFrame,\n} from '@grafana/data';\nimport { toDataQueryError } from '@grafana/runtime';\nimport { catchError, forkJoin, map, of, ReplaySubject, Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { CustomTransformerDefinition, SceneDataProvider, SceneDataProviderResult, SceneDataState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneDataLayerSet } from './SceneDataLayerSet';\nimport { findPanelProfiler } from '../utils/findPanelProfiler';\nimport {\n ResolvedSystemTransformations,\n SystemTransformationsProvider,\n} from './systemTransformations/systemTransformationTypes';\nimport {\n freezeResolved,\n isSystemTransformationsProvider,\n toSystemTransformation,\n} from './systemTransformations/systemTransformationProvider';\nimport { NO_SERIES, NO_SYSTEM_TRANSFORMATIONS } from './systemTransformations/constants';\n\nexport interface SceneDataTransformerState extends SceneDataState {\n /**\n * Array of standard transformation configs and custom transform operators.\n * User configured only: system contributed transformations provided by getResolvedSystemTransformations.\n */\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n}\n\n/**\n * You can use this as a $data object. It can either transform an inner $data DataProvider or if that is not set it will\n * subscribe to a DataProvider higher up in the scene graph and transform its data.\n *\n * The transformations array supports custom (runtime defined) transformation as well as declarative core transformations.\n * You can manually re-process the transformations by calling reprocessTransformations(). This is useful if you have\n * transformations that depend on other scene object states.\n */\nexport class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerState> implements SceneDataProvider {\n private _transformSub?: Unsubscribable;\n private _results = new ReplaySubject<SceneDataProviderResult>(1);\n private _prevDataFromSource?: PanelData;\n /**\n * The provider found on the parent. Kept across deactivation rather than cleared with the subscription:\n * the transformations editor reads getResolvedSystemTransformations for panels that are not currently\n * rendering, and re-discovering on the next activation would be too late. Re-derived from the parent on\n * every activation, so it does not survive a move to a tree whose parent contributes nothing.\n */\n private _provider?: SystemTransformationsProvider;\n /**\n * One slot memo so that a pass resolves the provider once and the editors reading\n * getResolvedSystemTransformations see what the pipeline used rather than re-resolving.\n */\n private _resolvedSystem?: {\n series: DataFrame[];\n resolved: ResolvedSystemTransformations;\n };\n /**\n * Whether a previous activation already ran a pass, which is what makes the provider found on this one a\n * *change* rather than a first discovery. Not carried over by clone, unlike `_prevDataFromSource`.\n */\n private _hasActivatedBefore = false;\n /**\n * The system transformations that produced the current `state.data`, as opposed to what resolves now.\n * Written only where `_prevDataFromSource` is, so the two always describe the same pass: a pass\n * cancelled by deactivation has applied neither, and must not be taken for one that landed.\n */\n private _lastPassSystem?: ResolvedSystemTransformations;\n\n /**\n * Scan transformations for variable usage and re-process transforms when a variable values change\n */\n protected _variableDependency: VariableDependencyConfig<SceneDataTransformerState> = new VariableDependencyConfig(\n this,\n {\n statePaths: ['transformations'],\n onReferencedVariableValueChanged: () => this.reprocessTransformations(),\n }\n );\n\n public constructor(state: SceneDataTransformerState) {\n super(state);\n\n this.addActivationHandler(() => this.activationHandler());\n }\n\n private activationHandler() {\n const sourceData = this.getSourceData();\n\n this._subs.add(sourceData.subscribeToState((state) => this.transform(state.data)));\n\n // Before the first transform below, so a discovered provider is part of that first pass rather than\n // needing a second, corrective one.\n const providerChanged = this._discoverProvider();\n\n if (sourceData.state.data) {\n this.transform(sourceData.state.data, providerChanged);\n }\n\n this._hasActivatedBefore = true;\n\n return () => {\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n };\n }\n\n /**\n * Checks the parent for system transformation provider.\n * Reports whether what the pipeline should run has changed since the last pass, so the caller can force one.\n */\n private _discoverProvider(): boolean {\n const previous = this._provider;\n const provider = this.parent;\n\n if (!isSystemTransformationsProvider(provider)) {\n // This only ever runs from the activation handler, where the parent is already final, so a parent\n // that is not a provider means anything discovered on a previous activation belongs to a tree this\n // transformer is no longer part of.\n this._provider = undefined;\n this._resolvedSystem = undefined;\n\n return this._hasActivatedBefore && previous !== undefined;\n }\n\n this._provider = provider;\n\n // Nothing was watching the provider while this was inactive, so what it resolves to may have moved on\n // from what the last pass memoized.\n this._resolvedSystem = undefined;\n\n if (this._hasActivatedBefore && previous !== provider) {\n return true;\n }\n\n return this._systemChangedSinceLastPass();\n }\n\n /**\n * Whether the provider resolves to something other than what the last pass ran.\n *\n * The provider instance being unchanged is not enough to conclude the pipeline is unchanged: nothing\n * was watching while this was inactive, so a plugin that finished importing in that window resolves\n * differently now. Source frames usually survive a re-activation unchanged, so without this the pass\n * is skipped as already transformed and state.data keeps frames the reported pipeline never produced.\n */\n private _systemChangedSinceLastPass(): boolean {\n if (!this._lastPassSystem) {\n return false;\n }\n\n return !isEqual(this._lastPassSystem, this.getResolvedSystemTransformations());\n }\n\n private getSourceData(): SceneDataProvider {\n if (this.state.$data) {\n if (this.state.$data instanceof SceneDataLayerSet) {\n throw new Error('SceneDataLayerSet can not be used as data provider for SceneDataTransformer.');\n }\n return this.state.$data;\n }\n\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneDataTransformer must either have $data set on it or have a parent.parent with $data');\n }\n\n return sceneGraph.getData(this.parent.parent);\n }\n\n public setContainerWidth(width: number) {\n if (this.state.$data && this.state.$data.setContainerWidth) {\n this.state.$data.setContainerWidth(width);\n }\n }\n\n public isDataReadyToDisplay() {\n const dataObject = this.getSourceData();\n if (dataObject.isDataReadyToDisplay) {\n return dataObject.isDataReadyToDisplay();\n }\n\n return true;\n }\n\n /**\n * @internal\n * Whether the pass behind the current state.data applied any system transformations. A provider that has\n * stopped contributing still needs one more pass to take them back out.\n */\n public hasAppliedSystemTransformations(): boolean {\n const last = this._lastPassSystem;\n\n return last !== undefined && (last.prepend.length > 0 || last.append.length > 0);\n }\n\n public reprocessTransformations() {\n // A provider can resolve differently for the same frames - a plugin that was not loaded on the last pass\n // is the reason callers reach for this - so the memo cannot survive a forced re-run.\n this._resolvedSystem = undefined;\n this.transform(this.getSourceData().state.data, true);\n }\n\n /**\n * The system transformations for the given source frames.\n * Public because provider output never reaches state, so this is the only way for readers\n * (the transformations editor, the inspect data tab) to see what the pipeline is running.\n */\n public getResolvedSystemTransformations(series?: DataFrame[]): ResolvedSystemTransformations {\n const provider = this._provider;\n\n if (!provider) {\n return NO_SYSTEM_TRANSFORMATIONS;\n }\n\n const frames = series ?? this._sourceSeriesOrNone();\n const memo = this._resolvedSystem;\n\n if (memo && memo.series === frames) {\n return memo.resolved;\n }\n\n const { prepend = [], append = [] } = this._resolveProvider(provider, frames);\n\n const resolved = freezeResolved({\n prepend: prepend.map((t) => toSystemTransformation(t, 'prepend', provider.origin)),\n append: append.map((t) => toSystemTransformation(t, 'append', provider.origin)),\n });\n\n this._resolvedSystem = { series: frames, resolved };\n\n return resolved;\n }\n\n /**\n * The source frames to resolve a provider against when the caller did not supply their own.\n *\n * Mirrors getSourceData's precondition: reading what is running must not throw for a transformer that is not wired.\n * Since every VizPanel is a provider, a panel without `$data` would throw.\n */\n private _sourceSeriesOrNone(): DataFrame[] {\n if (!this.state.$data && !this.parent?.parent) {\n return NO_SERIES;\n }\n\n return this.getSourceData().state.data?.series ?? NO_SERIES;\n }\n\n private _resolveProvider(\n provider: SystemTransformationsProvider,\n series: DataFrame[]\n ): ReturnType<SystemTransformationsProvider['getSystemTransformations']> {\n try {\n return provider.getSystemTransformations({ series }) ?? {};\n } catch (err) {\n // A provider is someone else's code running in our data pipeline; contributing nothing is better than erroring\n console.error(`Error resolving system transformations for origin '${provider.origin}': `, err);\n return {};\n }\n }\n\n /**\n * The system transformations to run for the given source frames.\n */\n private _systemTransformationsFor(series: DataFrame[]): ResolvedSystemTransformations {\n // Without a provider state already holds everything in pipeline order, so the common case stays free.\n return this._provider ? this.getResolvedSystemTransformations(series) : NO_SYSTEM_TRANSFORMATIONS;\n }\n\n /**\n * Places the user configured transformations between the system tiers, in prepend, user, append order.\n */\n private _withSystemTransformations(\n system: ResolvedSystemTransformations,\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>\n ): Array<DataTransformerConfig | CustomTransformerDefinition> {\n if (system.prepend.length === 0 && system.append.length === 0) {\n return transformations;\n }\n\n return [...system.prepend, ...transformations, ...system.append];\n }\n\n /**\n * S3.1: Calculate transformation complexity metrics\n */\n private _calculateTransformationMetrics(\n data: PanelData,\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>\n ): {\n transformationCount: number;\n seriesTransformationCount: number;\n annotationTransformationCount: number;\n } {\n const transformationCount = transformations.length;\n\n // Count transformations by topic (series vs annotations)\n const seriesTransformationCount = transformations.filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic == null || transformation.topic === DataTopic.Series;\n }\n return true; // Custom transformations default to series\n }).length;\n\n const annotationTransformationCount = transformations.filter((transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic === DataTopic.Annotations;\n }\n return false;\n }).length;\n\n return {\n transformationCount,\n seriesTransformationCount,\n annotationTransformationCount,\n };\n }\n\n public cancelQuery() {\n this.getSourceData().cancelQuery?.();\n }\n\n public getResultsStream() {\n return this._results;\n }\n\n public clone(withState?: Partial<SceneDataTransformerState>) {\n const clone = super.clone(withState);\n\n if (this._prevDataFromSource) {\n clone['_prevDataFromSource'] = this._prevDataFromSource;\n clone['_lastPassSystem'] = this._lastPassSystem;\n }\n\n return clone;\n }\n\n public isInViewChanged(isInView: boolean) {\n this.state.$data?.isInViewChanged?.(isInView);\n }\n\n public bypassIsInViewChanged(bypassIsInView: boolean) {\n this.state.$data?.bypassIsInViewChanged?.(bypassIsInView);\n }\n\n private haveAlreadyTransformedData(data: PanelData) {\n if (!this._prevDataFromSource) {\n return false;\n }\n\n if (data === this._prevDataFromSource) {\n return true;\n }\n\n const { series, annotations } = this._prevDataFromSource;\n\n if (data.series === series && data.annotations === annotations) {\n if (this.state.data) {\n const currentData = this.state.data;\n const nextData: PanelData = {\n ...data,\n series: currentData.series,\n annotations: currentData.annotations,\n };\n\n const metadataChanged =\n currentData.state !== nextData.state ||\n currentData.request?.requestId !== nextData.request?.requestId ||\n currentData.error !== nextData.error ||\n !isEqual(currentData.errors, nextData.errors) ||\n !isEqual(currentData.timeRange, nextData.timeRange);\n\n if (metadataChanged) {\n this.setState({ data: nextData });\n this._results.next({ origin: this, data: nextData });\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n private transform(data: PanelData | undefined, force = false) {\n const timestamp = performance.now();\n // S3.1: Performance tracking entry point\n const profiler = findPanelProfiler(this);\n const transformStartTime = performance.now();\n let transformationId: string | undefined;\n let endTransformCallback:\n | ((\n endTimestamp: number,\n duration: number,\n success: boolean,\n result?: {\n outputSeriesCount?: number;\n outputAnnotationsCount?: number;\n error?: string;\n }\n ) => void)\n | null = null;\n\n // Resolved once for the whole pass and handed to both tiers, rather than re-derived per position.\n const system = data ? this._systemTransformationsFor(data.series) : NO_SYSTEM_TRANSFORMATIONS;\n const transformations = data ? this._withSystemTransformations(system, this.state.transformations) : [];\n\n if (transformations.length === 0 || !data) {\n // Transformations are asynchronous, so a pass started when there were some is likely still running.\n // Left subscribed it would complete after this and overwrite the passthrough with stale frames. Not\n // hoisted above the haveAlreadyTransformedData return below: there the data is unchanged, so letting\n // the in-flight pass finish is what we want.\n this._transformSub?.unsubscribe();\n\n this._prevDataFromSource = data;\n this._lastPassSystem = system;\n\n // Any source state change re-runs this, so without the guard a passthrough panel publishes a state\n // change carrying data it already had - one no-op event per listener, DashboardSceneChangeTracker\n // included. The results stream still emits: subscribers there are tracking source emissions, not\n // state transitions.\n if (data !== this.state.data) {\n this.setState({ data });\n }\n\n if (data) {\n this._results.next({ origin: this, data });\n }\n return;\n }\n\n // Skip transform step if we have already transformed this data\n if (!force && this.haveAlreadyTransformedData(data)) {\n return;\n }\n\n // S3.1: Start transformation tracking\n if (profiler) {\n // Create meaningful transformation identifier from actual transformations\n const transformationTypes = transformations\n .map((t) => {\n if ('id' in t) {\n // Standard DataTransformerConfig\n return t.id;\n } else {\n // CustomTransformerDefinition\n return 'customTransformation';\n }\n })\n .join('+');\n transformationId = transformationTypes || 'no-transforms';\n\n // Calculate transformation complexity metrics\n const metrics = this._calculateTransformationMetrics(data, transformations);\n\n // Start the DataProcessing phase with centralized logging - get end callback\n endTransformCallback = profiler.onDataTransformStart(timestamp, transformationId, metrics);\n }\n\n // Only the user transforms are interpolated.\n const interpolatedTransformations = this._withSystemTransformations(\n system,\n this._interpolateVariablesInTransformationConfigs(data, this.state.transformations)\n );\n\n const seriesTransformations = this._filterAndPrepareTransformationsByTopic(\n interpolatedTransformations,\n (transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic == null || transformation.topic === DataTopic.Series;\n }\n return true;\n }\n );\n const annotationsTransformations = this._filterAndPrepareTransformationsByTopic(\n interpolatedTransformations,\n (transformation) => {\n if ('options' in transformation || 'topic' in transformation) {\n return transformation.topic === DataTopic.Annotations;\n }\n return false;\n }\n );\n\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n\n const ctx = {\n interpolate: (value: string, scopedVars?: ScopedVars) => {\n return sceneGraph.interpolate(this, value, { ...data.request?.scopedVars, ...scopedVars });\n },\n };\n\n const seriesStream = transformDataFrame(seriesTransformations, data.series, ctx);\n const annotationsStream = transformDataFrame(annotationsTransformations, data.annotations ?? []);\n\n let series: DataFrame[] = [];\n let annotations: DataFrame[] = [];\n\n this._transformSub = forkJoin([seriesStream, annotationsStream])\n .pipe(\n map((results) => {\n // this strategy allows transformations to take in series frames and produce anno frames\n // we look at each transformation's result and put it in the correct place\n results.forEach((frames) => {\n for (const frame of frames) {\n if (frame.meta?.dataTopic === DataTopic.Annotations) {\n annotations.push(frame);\n } else {\n series.push(frame);\n }\n }\n });\n\n return { ...data, series, annotations };\n }),\n catchError((err) => {\n const timestamp = performance.now();\n // S3.1: Performance tracking for transformation errors\n const duration = timestamp - transformStartTime;\n\n if (endTransformCallback) {\n // End the DataProcessing phase with centralized logging using callback\n endTransformCallback(timestamp, duration, false, {\n error: err.message || err,\n });\n }\n\n console.error('Error transforming data: ', err);\n const sourceErr = this.getSourceData().state.data?.errors || [];\n\n const transformationError = toDataQueryError(err);\n transformationError.message = `Error transforming data: ${transformationError.message}`;\n\n const result: PanelData = {\n ...data,\n state: LoadingState.Error,\n // Combine transformation error with upstream errors\n errors: [...sourceErr, transformationError],\n };\n\n return of(result);\n })\n )\n .subscribe((transformedData) => {\n const timestamp = performance.now();\n const duration = timestamp - transformStartTime;\n if (endTransformCallback) {\n // End the DataProcessing phase with centralized logging using callback\n endTransformCallback(timestamp, duration, true, {\n outputSeriesCount: transformedData.series.length,\n outputAnnotationsCount: transformedData.annotations?.length || 0,\n });\n }\n this.setState({ data: transformedData });\n this._results.next({ origin: this, data: transformedData });\n this._prevDataFromSource = data;\n this._lastPassSystem = system;\n });\n }\n\n private _interpolateVariablesInTransformationConfigs(\n data: PanelData,\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>\n ): Array<DataTransformerConfig | CustomTransformerDefinition> {\n if (this._variableDependency.getNames().size === 0) {\n return transformations;\n }\n\n // Custom transform operators (bare or in object form) hold functions that a JSON round-trip would drop\n const isInterpolatable = (t: DataTransformerConfig | CustomTransformerDefinition) =>\n typeof t === 'object' && !('operator' in t);\n\n // If all transformations are config objects we can interpolate them all at once\n if (transformations.every(isInterpolatable)) {\n return JSON.parse(sceneGraph.interpolate(this, JSON.stringify(transformations), data.request?.scopedVars));\n }\n\n return transformations.map((t) => {\n return isInterpolatable(t)\n ? JSON.parse(sceneGraph.interpolate(this, JSON.stringify(t), data.request?.scopedVars))\n : t;\n });\n }\n\n private _filterAndPrepareTransformationsByTopic(\n interpolatedTransformations: Array<DataTransformerConfig<any> | CustomTransformerDefinition>,\n transformationFilter: (transformation: DataTransformerConfig<any> | CustomTransformerDefinition) => boolean\n ): Array<DataTransformerConfig<any> | CustomTransformOperator> {\n return interpolatedTransformations\n .filter(transformationFilter)\n .map((transformation) => ('operator' in transformation ? transformation.operator : transformation));\n }\n}\n"],"names":["_a","timestamp"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { freezeResolved } from './systemTransformationProvider.js';
2
+
3
+ const NO_SERIES = [];
4
+ const NO_SYSTEM_TRANSFORMATIONS = { prepend: [], append: [] };
5
+ freezeResolved(NO_SYSTEM_TRANSFORMATIONS);
6
+ Object.freeze(NO_SERIES);
7
+
8
+ export { NO_SERIES, NO_SYSTEM_TRANSFORMATIONS };
9
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/querying/systemTransformations/constants.ts"],"sourcesContent":["import { DataFrame } from '@grafana/data';\n\nimport { ResolvedSystemTransformations } from './systemTransformationTypes';\nimport { freezeResolved } from './systemTransformationProvider';\n\n/**\n * Stands in for the source frames before the first query result. A fresh [] each time would miss memo and re-resolve.\n */\nexport const NO_SERIES: DataFrame[] = [];\n\n/** Shared for the same reason: a transformer with no provider hands the same object to every caller. */\nexport const NO_SYSTEM_TRANSFORMATIONS: ResolvedSystemTransformations = { prepend: [], append: [] };\n\nfreezeResolved(NO_SYSTEM_TRANSFORMATIONS);\nObject.freeze(NO_SERIES);\n"],"names":[],"mappings":";;AAQO,MAAM,YAAyB;AAG/B,MAAM,4BAA2D,EAAE,OAAA,EAAS,EAAC,EAAG,MAAA,EAAQ,EAAC;AAEhG,cAAA,CAAe,yBAAyB,CAAA;AACxC,MAAA,CAAO,OAAO,SAAS,CAAA;;;;"}
@@ -0,0 +1,19 @@
1
+ import { DataTopic } from '@grafana/data';
2
+
3
+ function isSystemTransformationsProvider(o) {
4
+ return typeof o === "object" && o !== null && "isSystemTransformationsProvider" in o;
5
+ }
6
+ function toSystemTransformation(transformation, position, origin) {
7
+ if (typeof transformation === "function") {
8
+ return { operator: transformation, topic: DataTopic.Series, origin, position };
9
+ }
10
+ return { ...transformation, origin, position };
11
+ }
12
+ function freezeResolved(resolved) {
13
+ Object.freeze(resolved.prepend);
14
+ Object.freeze(resolved.append);
15
+ return Object.freeze(resolved);
16
+ }
17
+
18
+ export { freezeResolved, isSystemTransformationsProvider, toSystemTransformation };
19
+ //# sourceMappingURL=systemTransformationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemTransformationProvider.js","sources":["../../../../src/querying/systemTransformations/systemTransformationProvider.ts"],"sourcesContent":["import { DataTopic, DataTransformerConfig } from '@grafana/data';\nimport { CustomTransformerDefinition } from '../../core/types';\nimport {\n ResolvedSystemTransformations,\n SystemTransformation,\n SystemTransformationPosition,\n SystemTransformationsProvider,\n TransformationOrigin,\n} from './systemTransformationTypes';\n\n/**\n * Narrows SystemTransformationsProvider\n */\nexport function isSystemTransformationsProvider(o: unknown): o is SystemTransformationsProvider {\n return typeof o === 'object' && o !== null && 'isSystemTransformationsProvider' in o;\n}\n\n/**\n * @internal\n */\nexport function toSystemTransformation(\n transformation: DataTransformerConfig | CustomTransformerDefinition,\n position: SystemTransformationPosition,\n origin: TransformationOrigin\n): SystemTransformation {\n if (typeof transformation === 'function') {\n return { operator: transformation, topic: DataTopic.Series, origin, position };\n }\n\n return { ...transformation, origin, position };\n}\n\n/**\n * getResolvedSystemTransformations hands the same object to the pipeline and to every editor reading what\n * is running, and the two above are module singletons shared by every transformer. Freezing makes a caller\n * that mutates one fail at the mutation rather than corrupting readers it never knew about.\n */\nexport function freezeResolved(resolved: ResolvedSystemTransformations): ResolvedSystemTransformations {\n Object.freeze(resolved.prepend);\n Object.freeze(resolved.append);\n\n return Object.freeze(resolved);\n}\n"],"names":[],"mappings":";;AAaO,SAAS,gCAAgC,CAAA,EAAgD;AAC9F,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,iCAAA,IAAqC,CAAA;AACrF;AAKO,SAAS,sBAAA,CACd,cAAA,EACA,QAAA,EACA,MAAA,EACsB;AACtB,EAAA,IAAI,OAAO,mBAAmB,UAAA,EAAY;AACxC,IAAA,OAAO,EAAE,QAAA,EAAU,cAAA,EAAgB,OAAO,SAAA,CAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,EAC/E;AAEA,EAAA,OAAO,EAAE,GAAG,cAAA,EAAgB,MAAA,EAAQ,QAAA,EAAS;AAC/C;AAOO,SAAS,eAAe,QAAA,EAAwE;AACrG,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,OAAO,CAAA;AAC9B,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,MAAM,CAAA;AAE7B,EAAA,OAAO,MAAA,CAAO,OAAO,QAAQ,CAAA;AAC/B;;;;"}