{"version":3,"file":"SQLVariableUtils.mjs","sources":["../../src/SQLVariableUtils.ts"],"sourcesContent":["import { uniq } from 'lodash';\n\nimport { type DataFrame, type Field, FieldType } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { applyQueryDefaults } from './defaults';\nimport { type SQLQuery, type SQLVariableQuery, type SQLQueryMeta } from './types';\n\nexport const refId = 'SQLVariableQueryEditor-VariableQuery';\n\nexport const migrateVariableQuery = (rawQuery: string | SQLQuery): SQLVariableQuery => {\n  if (typeof rawQuery !== 'string') {\n    return {\n      ...rawQuery,\n      refId: rawQuery.refId || refId,\n      query: rawQuery.rawSql || '',\n    };\n  }\n  return {\n    ...applyQueryDefaults({\n      refId,\n      rawSql: rawQuery,\n      editorMode: rawQuery ? EditorMode.Code : EditorMode.Builder,\n    }),\n    query: rawQuery,\n  };\n};\n\nexport const updateFrame = (frame: DataFrame, meta?: SQLQueryMeta): DataFrame => {\n  const fields = convertFieldsToVariableFields(frame.fields, meta);\n  let length = fields.length > 0 ? fields[0].values.length : frame.length;\n  return { ...frame, length, fields };\n};\n\nexport const convertFieldsToVariableFields = (original_fields: Field[], meta?: SQLQueryMeta): Field[] => {\n  // scenario 1 : If no fields found, throw error\n  if (original_fields.length < 1) {\n    throw new Error('at least one field expected for variable');\n  }\n  // scenario 2 : If meta field found, use and return ( at least one text field / value field exist / or first field )\n  if (meta) {\n    let tf = meta.textField ? original_fields.find((f) => f.name === meta.textField) : undefined;\n    let vf = meta.valueField ? original_fields.find((f) => f.name === meta.valueField) : undefined;\n    const textField = tf || vf || original_fields[0];\n    const valueField = vf || tf || original_fields[0];\n    const otherFields = original_fields.filter((f: Field) => f.name !== 'value' && f.name !== 'text');\n    return [{ ...textField, name: 'text' }, { ...valueField, name: 'value' }, ...otherFields];\n  }\n  // scenario 3 : If both  __text field & __value field found\n  let tf = original_fields.find((f) => f.name === '__text');\n  let vf = original_fields.find((f) => f.name === '__value');\n  if (tf && vf) {\n    const otherFields = original_fields.filter((f: Field) => f.name !== '__text' && f.name !== '__value');\n    return [\n      { ...tf, name: 'text', values: tf.values.map((v) => '' + v) },\n      { ...vf, name: 'value', values: vf.values.map((v) => '' + v) },\n      ...otherFields,\n    ];\n  }\n  // scenario 4 : fallback scenario / legacy scenario where return all fields into a single field.\n  let values: string[] = [];\n  for (const field of original_fields) {\n    for (const value of field.values) {\n      if (value !== null && value !== undefined) {\n        values.push('' + value);\n      }\n    }\n  }\n  values = uniq(values);\n  return [\n    { name: 'text', type: FieldType.string, config: {}, values },\n    { name: 'value', type: FieldType.string, config: {}, values },\n  ];\n};\n"],"names":["tf","vf"],"mappings":"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"}