From 7038bbe318e738b15b464e7df09833387e0a36fa Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Wed, 13 Nov 2024 14:57:17 -0600 Subject: [PATCH] Matchers: Require explicit regexp syntax in byRefId matcher (#96358) --- .../transformations/matchers/refIdMatcher.ts | 17 ++++++++++++++--- .../transformers/filterByRefId.test.ts | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/grafana-data/src/transformations/matchers/refIdMatcher.ts b/packages/grafana-data/src/transformations/matchers/refIdMatcher.ts index 629600bacfa..9ee6962be47 100644 --- a/packages/grafana-data/src/transformations/matchers/refIdMatcher.ts +++ b/packages/grafana-data/src/transformations/matchers/refIdMatcher.ts @@ -1,4 +1,4 @@ -import { stringToJsRegex } from '../../text/string'; +import { stringStartsAsRegEx, stringToJsRegex } from '../../text/string'; import { DataFrame } from '../../types/dataFrame'; import { FrameMatcherInfo } from '../../types/transformations'; @@ -12,9 +12,20 @@ const refIdMatcher: FrameMatcherInfo = { defaultOptions: 'A', get: (pattern: string) => { - const regex = stringToJsRegex(pattern); + let regex: RegExp | null = null; + + if (stringStartsAsRegEx(pattern)) { + try { + regex = stringToJsRegex(pattern); + } catch (error) { + if (error instanceof Error) { + console.warn(error.message); + } + } + } + return (frame: DataFrame) => { - return regex.test(frame.refId || ''); + return regex?.test(frame.refId || '') ?? frame.refId === pattern; }; }, diff --git a/packages/grafana-data/src/transformations/transformers/filterByRefId.test.ts b/packages/grafana-data/src/transformations/transformers/filterByRefId.test.ts index f3c88698a6c..74a6477529b 100644 --- a/packages/grafana-data/src/transformations/transformers/filterByRefId.test.ts +++ b/packages/grafana-data/src/transformations/transformers/filterByRefId.test.ts @@ -42,7 +42,7 @@ describe('filterByRefId transformer', () => { const cfg = { id: DataTransformerID.filterByRefId, options: { - include: 'A|B', + include: '/A|B/', }, };