{"version":3,"file":"operations.mjs","sources":["../../../src/querybuilder/operations.ts"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/operations.ts\nimport { binaryScalarOperations } from './binaryScalarOperations';\nimport {\n  defaultAddOperationHandler,\n  functionRendererLeft,\n  functionRendererRight,\n  getPromOperationDisplayName,\n  getRangeVectorParamDef,\n  rangeRendererLeftWithParams,\n  rangeRendererRightWithParams,\n} from './operationUtils';\nimport {\n  type QueryBuilderOperation,\n  type QueryBuilderOperationDef,\n  type QueryWithOperations,\n  type VisualQueryModeller,\n} from './shared/types';\nimport { PromOperationId, type PromVisualQuery, PromVisualQueryOperationCategory } from './types';\n\nexport function getOperationDefinitions(): QueryBuilderOperationDef[] {\n  const list: QueryBuilderOperationDef[] = [\n    {\n      id: PromOperationId.HistogramQuantile,\n      name: 'Histogram quantile',\n      params: [{ name: 'Quantile', type: 'number', options: [0.99, 0.95, 0.9, 0.75, 0.5, 0.25] }],\n      defaultParams: [0.9],\n      category: PromVisualQueryOperationCategory.Functions,\n      renderer: functionRendererLeft,\n      addOperationHandler: defaultAddOperationHandler,\n    },\n    createFunction({ id: PromOperationId.HistogramAvg }),\n    createFunction({ id: PromOperationId.HistogramCount }),\n    createFunction({ id: PromOperationId.HistogramSum }),\n    {\n      id: PromOperationId.HistogramFraction,\n      name: 'Histogram fraction',\n      params: [\n        { name: 'Lower scalar', type: 'number' },\n        { name: 'Upper scalar', type: 'number' },\n      ],\n      defaultParams: [0.0, 0.2],\n      category: PromVisualQueryOperationCategory.Functions,\n      renderer: functionRendererLeft,\n      addOperationHandler: defaultAddOperationHandler,\n    },\n    createFunction({ id: PromOperationId.HistogramStddev }),\n    createFunction({ id: PromOperationId.HistogramStdvar }),\n    {\n      id: PromOperationId.LabelReplace,\n      name: 'Label replace',\n      params: [\n        { name: 'Destination label', type: 'string' },\n        { name: 'Replacement', type: 'string' },\n        { name: 'Source label', type: 'string' },\n        { name: 'Regex', type: 'string' },\n      ],\n      category: PromVisualQueryOperationCategory.Functions,\n      defaultParams: ['', '$1', '', '(.*)'],\n      renderer: functionRendererRight,\n      addOperationHandler: defaultAddOperationHandler,\n    },\n    {\n      id: PromOperationId.Ln,\n      name: 'Ln',\n      params: [],\n      defaultParams: [],\n      category: PromVisualQueryOperationCategory.Functions,\n      renderer: functionRendererLeft,\n      addOperationHandler: defaultAddOperationHandler,\n    },\n    createRangeFunction(PromOperationId.Changes),\n    createRangeFunction(PromOperationId.Rate, true),\n    createRangeFunction(PromOperationId.Irate),\n    createRangeFunction(PromOperationId.Increase, true),\n    createRangeFunction(PromOperationId.Idelta),\n    createRangeFunction(PromOperationId.Delta),\n    createFunction({\n      id: PromOperationId.DoubleExponentialSmoothing,\n      params: [\n        getRangeVectorParamDef(),\n        { name: 'Smoothing Factor', type: 'number' },\n        { name: 'Trend Factor', type: 'number' },\n      ],\n      defaultParams: ['$__interval', 0.5, 0.5],\n      alternativesKey: 'range function',\n      category: PromVisualQueryOperationCategory.RangeFunctions,\n      renderer: rangeRendererRightWithParams,\n      addOperationHandler: addOperationWithRangeVector,\n      changeTypeHandler: operationTypeChangedHandlerForRangeFunction,\n    }),\n    createFunction({\n      id: PromOperationId.HoltWinters,\n      params: [\n        getRangeVectorParamDef(),\n        { name: 'Smoothing Factor', type: 'number' },\n        { name: 'Trend Factor', type: 'number' },\n      ],\n      defaultParams: ['$__interval', 0.5, 0.5],\n      alternativesKey: 'range function',\n      category: PromVisualQueryOperationCategory.RangeFunctions,\n      renderer: rangeRendererRightWithParams,\n      addOperationHandler: addOperationWithRangeVector,\n      changeTypeHandler: operationTypeChangedHandlerForRangeFunction,\n    }),\n    createFunction({\n      id: PromOperationId.PredictLinear,\n      params: [getRangeVectorParamDef(), { name: 'Seconds from now', type: 'number' }],\n      defaultParams: ['$__interval', 60],\n      alternativesKey: 'range function',\n      category: PromVisualQueryOperationCategory.RangeFunctions,\n      renderer: rangeRendererRightWithParams,\n      addOperationHandler: addOperationWithRangeVector,\n      changeTypeHandler: operationTypeChangedHandlerForRangeFunction,\n    }),\n    createFunction({\n      id: PromOperationId.QuantileOverTime,\n      params: [getRangeVectorParamDef(), { name: 'Quantile', type: 'number' }],\n      defaultParams: ['$__interval', 0.5],\n      alternativesKey: 'overtime function',\n      category: PromVisualQueryOperationCategory.RangeFunctions,\n      renderer: rangeRendererLeftWithParams,\n      addOperationHandler: addOperationWithRangeVector,\n      changeTypeHandler: operationTypeChangedHandlerForRangeFunction,\n    }),\n    ...binaryScalarOperations,\n    {\n      id: PromOperationId.NestedQuery,\n      name: 'Binary operation with query',\n      params: [],\n      defaultParams: [],\n      category: PromVisualQueryOperationCategory.BinaryOps,\n      renderer: (model, def, innerExpr) => innerExpr,\n      addOperationHandler: addNestedQueryHandler,\n    },\n    createFunction({ id: PromOperationId.Abs }),\n    createFunction({ id: PromOperationId.Absent }),\n    createFunction({\n      id: PromOperationId.Acos,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Acosh,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Asin,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Asinh,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Atan,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Atanh,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({ id: PromOperationId.Ceil }),\n    createFunction({\n      id: PromOperationId.Clamp,\n      name: 'Clamp',\n      params: [\n        { name: 'Minimum Scalar', type: 'number' },\n        { name: 'Maximum Scalar', type: 'number' },\n      ],\n      defaultParams: [1, 1],\n    }),\n\n    createFunction({\n      id: PromOperationId.ClampMax,\n      params: [{ name: 'Maximum Scalar', type: 'number' }],\n      defaultParams: [1],\n    }),\n    createFunction({\n      id: PromOperationId.ClampMin,\n      params: [{ name: 'Minimum Scalar', type: 'number' }],\n      defaultParams: [1],\n    }),\n    createFunction({\n      id: PromOperationId.Cos,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Cosh,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.DayOfMonth,\n      category: PromVisualQueryOperationCategory.Time,\n    }),\n    createFunction({\n      id: PromOperationId.DayOfWeek,\n      category: PromVisualQueryOperationCategory.Time,\n    }),\n    createFunction({\n      id: PromOperationId.DayOfYear,\n      category: PromVisualQueryOperationCategory.Time,\n    }),\n    createFunction({\n      id: PromOperationId.DaysInMonth,\n      category: PromVisualQueryOperationCategory.Time,\n    }),\n    createFunction({ id: PromOperationId.Deg }),\n    createRangeFunction(PromOperationId.Deriv),\n    //\n    createFunction({ id: PromOperationId.Exp }),\n    createFunction({ id: PromOperationId.Floor }),\n    createFunction({ id: PromOperationId.Hour }),\n    createFunction({\n      id: PromOperationId.LabelJoin,\n      params: [\n        {\n          name: 'Destination Label',\n          type: 'string',\n        },\n        {\n          name: 'Separator',\n          type: 'string',\n        },\n        {\n          name: 'Source Label',\n          type: 'string',\n          restParam: true,\n          optional: true,\n        },\n      ],\n      defaultParams: ['', ',', ''],\n      renderer: labelJoinRenderer,\n      explainHandler: labelJoinExplainHandler,\n      addOperationHandler: labelJoinAddOperationHandler,\n    }),\n    createFunction({ id: PromOperationId.Log10 }),\n    createFunction({ id: PromOperationId.Log2 }),\n    createFunction({ id: PromOperationId.Minute }),\n    createFunction({ id: PromOperationId.Month }),\n    createFunction({\n      id: PromOperationId.Pi,\n      renderer: (model) => `${model.id}()`,\n    }),\n    createFunction({ id: PromOperationId.Rad }),\n    createRangeFunction(PromOperationId.Resets),\n    createFunction({\n      id: PromOperationId.Round,\n      category: PromVisualQueryOperationCategory.Functions,\n      params: [{ name: 'To Nearest', type: 'number' }],\n      defaultParams: [1],\n    }),\n    createFunction({ id: PromOperationId.Scalar }),\n    createFunction({ id: PromOperationId.Sgn }),\n    createFunction({ id: PromOperationId.Sin, category: PromVisualQueryOperationCategory.Trigonometric }),\n    createFunction({\n      id: PromOperationId.Sinh,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({ id: PromOperationId.Sort }),\n    createFunction({ id: PromOperationId.SortDesc }),\n    createFunction({ id: PromOperationId.Sqrt }),\n    createFunction({\n      id: PromOperationId.Tan,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Tanh,\n      category: PromVisualQueryOperationCategory.Trigonometric,\n    }),\n    createFunction({\n      id: PromOperationId.Time,\n      renderer: (model) => `${model.id}()`,\n    }),\n    createFunction({ id: PromOperationId.Timestamp }),\n    createFunction({\n      id: PromOperationId.Vector,\n      params: [{ name: 'Value', type: 'number' }],\n      defaultParams: [1],\n      renderer: (model) => `${model.id}(${model.params[0]})`,\n    }),\n    createFunction({ id: PromOperationId.Year }),\n  ];\n\n  return list;\n}\n\nfunction createFunction(definition: Partial<QueryBuilderOperationDef>): QueryBuilderOperationDef {\n  return {\n    ...definition,\n    id: definition.id!,\n    name: definition.name ?? getPromOperationDisplayName(definition.id!),\n    params: definition.params ?? [],\n    defaultParams: definition.defaultParams ?? [],\n    category: definition.category ?? PromVisualQueryOperationCategory.Functions,\n    renderer: definition.renderer ?? (definition.params ? functionRendererRight : functionRendererLeft),\n    addOperationHandler: definition.addOperationHandler ?? defaultAddOperationHandler,\n  };\n}\n\nfunction createRangeFunction(name: string, withRateInterval = false): QueryBuilderOperationDef {\n  return {\n    id: name,\n    name: getPromOperationDisplayName(name),\n    params: [getRangeVectorParamDef(withRateInterval)],\n    defaultParams: [withRateInterval ? '$__rate_interval' : '$__interval'],\n    alternativesKey: 'range function',\n    category: PromVisualQueryOperationCategory.RangeFunctions,\n    renderer: operationWithRangeVectorRenderer,\n    addOperationHandler: addOperationWithRangeVector,\n    changeTypeHandler: operationTypeChangedHandlerForRangeFunction,\n  };\n}\n\nfunction operationTypeChangedHandlerForRangeFunction(\n  operation: QueryBuilderOperation,\n  newDef: QueryBuilderOperationDef\n) {\n  // validate current parameter\n  if (operation.params[0] === '$__rate_interval' && newDef.defaultParams[0] !== '$__rate_interval') {\n    operation.params = newDef.defaultParams;\n  } else if (operation.params[0] === '$__interval' && newDef.defaultParams[0] !== '$__interval') {\n    operation.params = newDef.defaultParams;\n  }\n\n  return operation;\n}\n\nfunction operationWithRangeVectorRenderer(\n  model: QueryBuilderOperation,\n  def: QueryBuilderOperationDef,\n  innerExpr: string\n) {\n  let rangeVector = (model.params ?? [])[0] ?? '5m';\n  return `${def.id}(${innerExpr}[${rangeVector}])`;\n}\n\n/**\n * Since there can only be one operation with range vector this will replace the current one (if one was added )\n */\nexport function addOperationWithRangeVector(\n  def: QueryBuilderOperationDef,\n  query: PromVisualQuery,\n  modeller: VisualQueryModeller\n) {\n  const newOperation: QueryBuilderOperation = {\n    id: def.id,\n    params: def.defaultParams,\n  };\n\n  if (query.operations.length > 0) {\n    // If operation exists it has to be in the registry so no point to check if it was found\n    const firstOp = modeller.getOperationDef(query.operations[0].id)!;\n\n    if (firstOp.addOperationHandler === addOperationWithRangeVector) {\n      return {\n        ...query,\n        operations: [newOperation, ...query.operations.slice(1)],\n      };\n    }\n  }\n\n  return {\n    ...query,\n    operations: [newOperation, ...query.operations],\n  };\n}\n\nfunction addNestedQueryHandler(def: QueryBuilderOperationDef, query: PromVisualQuery): PromVisualQuery {\n  return {\n    ...query,\n    binaryQueries: [\n      ...(query.binaryQueries ?? []),\n      {\n        operator: '/',\n        query,\n      },\n    ],\n  };\n}\n\nfunction labelJoinRenderer(model: QueryBuilderOperation, def: QueryBuilderOperationDef, innerExpr: string) {\n  const paramZero = model.params[0] ?? '';\n  const paramOne = model.params[1] ?? '';\n\n  const separator = `\"${paramOne}\"`;\n  return `${model.id}(${innerExpr}, \"${paramZero}\", ${separator}, \"${model.params.slice(2).join(separator)}\")`;\n}\n\nfunction labelJoinExplainHandler(op: QueryBuilderOperation, def?: QueryBuilderOperationDef): string {\n  let explainMessage = def?.documentation ?? 'no docs';\n\n  if (typeof op.params[1] !== 'string') {\n    explainMessage += ' 🚨🚨🚨 The `separator` must be a string.';\n  }\n\n  return explainMessage;\n}\n\nfunction labelJoinAddOperationHandler<T extends QueryWithOperations>(def: QueryBuilderOperationDef, query: T) {\n  const newOperation: QueryBuilderOperation = {\n    id: def.id,\n    params: def.defaultParams,\n  };\n\n  return {\n    ...query,\n    operations: [...query.operations, newOperation],\n  };\n}\n"],"names":[],"mappings":"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"}