{"version":3,"file":"nameMatcher.cjs","sources":["../../../../src/transformations/matchers/nameMatcher.ts"],"sourcesContent":["import { getFieldDisplayName } from '../../field/fieldState';\nimport { stringToJsRegex } from '../../text/string';\nimport { DataFrame, Field, FieldType, TIME_SERIES_VALUE_FIELD_NAME } from '../../types/dataFrame';\nimport { FieldMatcher, FieldMatcherInfo, FrameMatcherInfo } from '../../types/transformations';\n\nimport { FieldMatcherID, FrameMatcherID } from './ids';\n\nexport interface RegexpOrNamesMatcherOptions {\n  pattern?: string;\n  names?: string[];\n  variable?: string;\n}\n\n/**\n * Mode to be able to toggle if the names matcher should match fields in provided\n * list or all except provided names.\n * @public\n */\nexport enum ByNamesMatcherMode {\n  exclude = 'exclude',\n  include = 'include',\n}\n\n/**\n * Options to instruct the by names matcher to either match all fields in given list\n * or all except the fields in the list.\n * @public\n */\nexport interface ByNamesMatcherOptions {\n  mode?: ByNamesMatcherMode;\n  names?: string[];\n  readOnly?: boolean;\n  prefix?: string;\n}\n\n// General Field matcher\nconst fieldNameMatcher: FieldMatcherInfo<string> = {\n  id: FieldMatcherID.byName,\n  name: 'Field Name',\n  description: 'match the field name',\n  defaultOptions: '',\n\n  get: (name: string): FieldMatcher => {\n    const uniqueNames = new Set<string>([name]);\n\n    const fallback = fieldNameFallback(uniqueNames);\n\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return (\n        name === field.name ||\n        name === getFieldDisplayName(field, frame, allFrames) ||\n        Boolean(fallback && fallback(field, frame, allFrames))\n      );\n    };\n  },\n\n  getOptionsDisplayText: (name: string) => {\n    return `Field name: ${name}`;\n  },\n};\n\nconst multipleFieldNamesMatcher: FieldMatcherInfo<ByNamesMatcherOptions> = {\n  id: FieldMatcherID.byNames,\n  name: 'Field Names',\n  description: 'match any of the given the field names',\n  defaultOptions: {\n    mode: ByNamesMatcherMode.include,\n    names: [],\n  },\n\n  get: (options: ByNamesMatcherOptions): FieldMatcher => {\n    const { names, mode = ByNamesMatcherMode.include } = options;\n    const uniqueNames = new Set<string>(names ?? []);\n\n    const fallback = fieldNameFallback(uniqueNames);\n\n    const matcher = (field: Field, frame: DataFrame, frames: DataFrame[]) => {\n      return (\n        uniqueNames.has(field.name) ||\n        uniqueNames.has(getFieldDisplayName(field, frame, frames)) ||\n        Boolean(fallback && fallback(field, frame, frames))\n      );\n    };\n\n    if (mode === ByNamesMatcherMode.exclude) {\n      return (field: Field, frame: DataFrame, frames: DataFrame[]) => {\n        return !matcher(field, frame, frames);\n      };\n    }\n    return matcher;\n  },\n\n  getOptionsDisplayText: (options: ByNamesMatcherOptions): string => {\n    const { names, mode } = options;\n    const displayText = (names ?? []).join(', ');\n    if (mode === ByNamesMatcherMode.exclude) {\n      return `All except: ${displayText}`;\n    }\n    return `All of: ${displayText}`;\n  },\n};\n\n// In an effort to support migrating to a consistent data contract, the\n// naming conventions need to get normalized. However, many existing setups\n// exist that would no longer match names if that changes.  This injects\n// fallback logic when the data frame has not type version specified\nexport function fieldNameFallback(fields: Set<string>) {\n  let fallback: FieldMatcher | undefined = undefined;\n\n  if (fields.has(TIME_SERIES_VALUE_FIELD_NAME)) {\n    fallback = (field: Field, frame: DataFrame) => {\n      return (\n        Boolean(field.labels) && // Value was reasonable when the name was set in labels or on the frame\n        field.labels?.__name__ === field.name\n      );\n    };\n  } else if (fields.has('Time') || fields.has('time')) {\n    fallback = (field: Field, frame: DataFrame) => {\n      return frame.meta?.typeVersion == null && field.type === FieldType.time;\n    };\n  }\n\n  return fallback;\n}\n\nconst regexpFieldNameMatcher: FieldMatcherInfo<string> = {\n  id: FieldMatcherID.byRegexp,\n  name: 'Field Name by Regexp',\n  description: 'match the field name by a given regexp pattern',\n  defaultOptions: '/.*/',\n\n  get: (pattern: string): FieldMatcher => {\n    const regexp = patternToRegex(pattern);\n\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      const displayName = getFieldDisplayName(field, frame, allFrames);\n      return !!regexp && regexp.test(displayName);\n    };\n  },\n\n  getOptionsDisplayText: (pattern: string): string => {\n    return `Field name by pattern: ${pattern}`;\n  },\n};\n\n/**\n * Field matcher that will match all fields that exists in a\n * data frame with configured refId.\n * @public\n */\nconst fieldsInFrameMatcher: FieldMatcherInfo<string> = {\n  id: FieldMatcherID.byFrameRefID,\n  name: 'Fields by frame refId',\n  description: 'match all fields returned in data frame with refId.',\n  defaultOptions: '',\n\n  get: (refId: string): FieldMatcher => {\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return frame.refId === refId;\n    };\n  },\n\n  getOptionsDisplayText: (refId: string): string => {\n    return `Math all fields returned by query with reference ID: ${refId}`;\n  },\n};\n\nconst regexpOrMultipleNamesMatcher: FieldMatcherInfo<RegexpOrNamesMatcherOptions> = {\n  id: FieldMatcherID.byRegexpOrNames,\n  name: 'Field Name by Regexp or Names',\n  description: 'match the field name by a given regexp pattern or given names',\n  defaultOptions: {\n    pattern: '/.*/',\n    names: [],\n  },\n\n  get: (options: RegexpOrNamesMatcherOptions): FieldMatcher => {\n    const regexpMatcher = regexpFieldNameMatcher.get(options?.pattern || '');\n    const namesMatcher = multipleFieldNamesMatcher.get({\n      mode: ByNamesMatcherMode.include,\n      names: options?.names ?? [],\n    });\n\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return namesMatcher(field, frame, allFrames) || regexpMatcher(field, frame, allFrames);\n    };\n  },\n\n  getOptionsDisplayText: (options: RegexpOrNamesMatcherOptions): string => {\n    const pattern = options?.pattern ?? '';\n    const names = options?.names?.join(',') ?? '';\n    return `Field name by pattern: ${pattern} or names: ${names}`;\n  },\n};\n\nconst patternToRegex = (pattern?: string): RegExp | undefined => {\n  if (!pattern) {\n    return undefined;\n  }\n\n  try {\n    return stringToJsRegex(pattern);\n  } catch (error) {\n    console.error(error);\n    return undefined;\n  }\n};\n\n// General Frame matcher\nconst frameNameMatcher: FrameMatcherInfo<string> = {\n  id: FrameMatcherID.byName,\n  name: 'Frame Name',\n  description: 'match the frame name',\n  defaultOptions: '/.*/',\n\n  get: (pattern: string) => {\n    const regex = stringToJsRegex(pattern);\n    return (frame: DataFrame) => {\n      return regex.test(frame.name || '');\n    };\n  },\n\n  getOptionsDisplayText: (pattern: string) => {\n    return `Frame name: ${pattern}`;\n  },\n};\n\n/**\n * Registry Initialization\n */\nexport function getFieldNameMatchers(): FieldMatcherInfo[] {\n  return [\n    fieldNameMatcher,\n    regexpFieldNameMatcher,\n    multipleFieldNamesMatcher,\n    regexpOrMultipleNamesMatcher,\n    fieldsInFrameMatcher,\n  ];\n}\n\nexport function getFrameNameMatchers(): FrameMatcherInfo[] {\n  return [frameNameMatcher];\n}\n"],"names":["ByNamesMatcherMode","FieldMatcherID","getFieldDisplayName","TIME_SERIES_VALUE_FIELD_NAME","FieldType","stringToJsRegex","FrameMatcherID"],"mappings":"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"}