{"version":3,"file":"variableMigration.cjs","sources":["../../../src/migrations/variableMigration.ts"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/migrations/variableMigration.ts\nimport { buildVisualQueryFromString } from '../querybuilder/parsing';\nimport { promQueryModeller } from '../querybuilder/shared/modeller_instance';\nimport { type PromVariableQuery, PromVariableQueryType as QueryType } from '../types';\n\nexport const PrometheusLabelNamesRegex = /^label_names\\(\\)\\s*$/;\nexport const PrometheusLabelValuesRegex = /^label_values\\((?:(.+),\\s*)?(.+)\\)\\s*$/;\nexport const PrometheusMetricNamesRegex = /^metrics\\((.+)\\)\\s*$/;\nexport const PrometheusQueryResultRegex = /^query_result\\((.+)\\)\\s*$/;\nexport const PrometheusLabelNamesRegexWithMatch = /^label_names\\((.+)\\)\\s*$/;\n\nexport function migrateVariableQueryToEditor(rawQuery: string | PromVariableQuery): PromVariableQuery {\n  // If not string, we assume PromVariableQuery\n  if (typeof rawQuery !== 'string') {\n    return rawQuery;\n  }\n\n  const queryBase = {\n    refId: 'PrometheusDatasource-VariableQuery',\n    qryType: QueryType.LabelNames,\n  };\n\n  const labelNamesMatchQuery = rawQuery.match(PrometheusLabelNamesRegexWithMatch);\n\n  if (labelNamesMatchQuery) {\n    return {\n      ...queryBase,\n      qryType: QueryType.LabelNames,\n      match: labelNamesMatchQuery[1],\n    };\n  }\n\n  const labelNames = rawQuery.match(PrometheusLabelNamesRegex);\n  if (labelNames) {\n    return {\n      ...queryBase,\n      qryType: QueryType.LabelNames,\n    };\n  }\n\n  const labelValuesCheck = rawQuery.match(/^label_values\\(/);\n  if (labelValuesCheck) {\n    const labelValues = rawQuery.match(PrometheusLabelValuesRegex);\n    const label = labelValues ? labelValues[2] : '';\n    const metric = labelValues ? labelValues[1] : '';\n\n    if (metric) {\n      const visQuery = buildVisualQueryFromString(metric);\n      return {\n        ...queryBase,\n        qryType: QueryType.LabelValues,\n        label,\n        metric: visQuery.query.metric,\n        labelFilters: visQuery.query.labels,\n      };\n    } else {\n      return {\n        ...queryBase,\n        qryType: QueryType.LabelValues,\n        label,\n      };\n    }\n  }\n\n  const metricNamesCheck = rawQuery.match(/^metrics\\(/);\n  if (metricNamesCheck) {\n    const metricNames = rawQuery.match(PrometheusMetricNamesRegex);\n    const metric = metricNames ? metricNames[1] : '';\n    return {\n      ...queryBase,\n      qryType: QueryType.MetricNames,\n      metric,\n    };\n  }\n\n  const queryResultCheck = rawQuery.match(/^query_result\\(/);\n  if (queryResultCheck) {\n    const queryResult = rawQuery.match(PrometheusQueryResultRegex);\n    const varQuery = queryResult ? queryResult[1] : '';\n    return {\n      ...queryBase,\n      qryType: QueryType.VarQueryResult,\n      varQuery,\n    };\n  }\n\n  // seriesQuery does not have a function and no regex above\n  if (!labelNames && !labelValuesCheck && !metricNamesCheck && !queryResultCheck) {\n    return {\n      ...queryBase,\n      qryType: QueryType.SeriesQuery,\n      seriesQuery: rawQuery,\n    };\n  }\n\n  return queryBase;\n}\n\n// migrate it back to a string with the correct variables in place\nexport function migrateVariableEditorBackToVariableSupport(QueryVariable: PromVariableQuery): string {\n  switch (QueryVariable.qryType) {\n    case QueryType.LabelNames:\n      if (QueryVariable.match) {\n        return `label_names(${QueryVariable.match})`;\n      }\n      return 'label_names()';\n    case QueryType.LabelValues:\n      if (QueryVariable.metric || (QueryVariable.labelFilters && QueryVariable.labelFilters.length !== 0)) {\n        const visualQueryQuery = {\n          metric: QueryVariable.metric ?? '',\n          labels: QueryVariable.labelFilters ?? [],\n          operations: [],\n        };\n\n        const metric = promQueryModeller.renderQuery(visualQueryQuery);\n        return `label_values(${metric},${QueryVariable.label})`;\n      } else {\n        return `label_values(${QueryVariable.label})`;\n      }\n    case QueryType.MetricNames:\n      return `metrics(${QueryVariable.metric})`;\n    case QueryType.VarQueryResult:\n      const varQuery = removeLineBreaks(QueryVariable.varQuery);\n      return `query_result(${varQuery})`;\n    case QueryType.SeriesQuery:\n      return QueryVariable.seriesQuery ?? '';\n    case QueryType.ClassicQuery:\n      return QueryVariable.classicQuery ?? '';\n  }\n\n  return '';\n}\n\n// allow line breaks in query result textarea\nfunction removeLineBreaks(input?: string) {\n  return input ? input.replace(/[\\r\\n]+/gm, '') : '';\n}\n"],"names":["QueryType","buildVisualQueryFromString","promQueryModeller"],"mappings":"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"}