{"version":3,"file":"labels.cjs","sources":["../../../src/utils/labels.ts"],"sourcesContent":["import { Labels } from '../types/data';\n\n/**\n * Regexp to extract Prometheus-style labels\n */\nconst labelRegexp = /\\b(\\w+)(!?=~?)\"([^\"\\n]*?)\"/g;\n\n/**\n * Returns a map of label keys to value from an input selector string.\n *\n * Example: `parseLabels('{job=\"foo\", instance=\"bar\"}) // {job: \"foo\", instance: \"bar\"}`\n */\nexport function parseLabels(labels: string): Labels {\n  const labelsByKey: Labels = {};\n  labels.replace(labelRegexp, (_, key, operator, value) => {\n    labelsByKey[key] = value;\n    return '';\n  });\n  return labelsByKey;\n}\n\n/**\n * Returns a map labels that are common to the given label sets.\n */\nexport function findCommonLabels(labelsSets: Labels[]): Labels {\n  return labelsSets.reduce(\n    (acc, labels) => {\n      if (!labels) {\n        throw new Error('Need parsed labels to find common labels.');\n      }\n      // Remove incoming labels that are missing or not matching in value\n      Object.keys(labels).forEach((key) => {\n        if (acc[key] === undefined || acc[key] !== labels[key]) {\n          delete acc[key];\n        }\n      });\n      // Remove common labels that are missing from incoming label set\n      Object.keys(acc).forEach((key) => {\n        if (labels[key] === undefined) {\n          delete acc[key];\n        }\n      });\n      return acc;\n    },\n    { ...labelsSets[0] }\n  );\n}\n\n/**\n * Returns a map of labels that are in `labels`, but not in `commonLabels`.\n */\nexport function findUniqueLabels(labels: Labels | undefined, commonLabels: Labels): Labels {\n  const uncommonLabels: Labels = { ...labels };\n  Object.keys(commonLabels).forEach((key) => {\n    delete uncommonLabels[key];\n  });\n  return uncommonLabels;\n}\n\n/**\n * Check that all labels exist in another set of labels\n */\nexport function matchAllLabels(expect: Labels, against?: Labels): boolean {\n  if (!expect) {\n    return true; // nothing to match\n  }\n  for (const [key, value] of Object.entries(expect)) {\n    if (!against || against[key] !== value) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Serializes the given labels to a string.\n */\nexport function formatLabels(labels: Labels, defaultValue = '', withoutBraces?: boolean): string {\n  if (!labels || Object.keys(labels).length === 0) {\n    return defaultValue;\n  }\n  const labelKeys = Object.keys(labels).sort();\n  const cleanSelector = labelKeys.map((key) => `${key}=\"${labels[key]}\"`).join(', ');\n  if (withoutBraces) {\n    return cleanSelector;\n  }\n  return ['{', cleanSelector, '}'].join('');\n}\n"],"names":[],"mappings":";;;;;AAKA,MAAM,WAAA,GAAc,6BAAA;AAOb,SAAS,YAAY,MAAA,EAAwB;AAClD,EAAA,MAAM,cAAsB,EAAC;AAC7B,EAAA,MAAA,CAAO,QAAQ,WAAA,EAAa,CAAC,CAAA,EAAG,GAAA,EAAK,UAAU,KAAA,KAAU;AACvD,IAAA,WAAA,CAAY,GAAG,CAAA,GAAI,KAAA;AACnB,IAAA,OAAO,EAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,WAAA;AACT;AAKO,SAAS,iBAAiB,UAAA,EAA8B;AAC7D,EAAA,OAAO,UAAA,CAAW,MAAA;AAAA,IAChB,CAAC,KAAK,MAAA,KAAW;AACf,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,MAC7D;AAEA,MAAA,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACnC,QAAA,IAAI,GAAA,CAAI,GAAG,CAAA,KAAM,KAAA,CAAA,IAAa,IAAI,GAAG,CAAA,KAAM,MAAA,CAAO,GAAG,CAAA,EAAG;AACtD,UAAA,OAAO,IAAI,GAAG,CAAA;AAAA,QAChB;AAAA,MACF,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAChC,QAAA,IAAI,MAAA,CAAO,GAAG,CAAA,KAAM,KAAA,CAAA,EAAW;AAC7B,UAAA,OAAO,IAAI,GAAG,CAAA;AAAA,QAChB;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAE,GAAG,UAAA,CAAW,CAAC,CAAA;AAAE,GACrB;AACF;AAKO,SAAS,gBAAA,CAAiB,QAA4B,YAAA,EAA8B;AACzF,EAAA,MAAM,cAAA,GAAyB,EAAE,GAAG,MAAA,EAAO;AAC3C,EAAA,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzC,IAAA,OAAO,eAAe,GAAG,CAAA;AAAA,EAC3B,CAAC,CAAA;AACD,EAAA,OAAO,cAAA;AACT;AAKO,SAAS,cAAA,CAAe,QAAgB,OAAA,EAA2B;AACxE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,GAAG,MAAM,KAAA,EAAO;AACtC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,YAAA,CAAa,MAAA,EAAgB,YAAA,GAAe,EAAA,EAAI,aAAA,EAAiC;AAC/F,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AAC/C,IAAA,OAAO,YAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,IAAA,EAAK;AAC3C,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,GAAA,CAAI,CAAC,QAAQ,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,IAAI,CAAA;AACjF,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAO,aAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAC,GAAA,EAAK,aAAA,EAAe,GAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAC1C;;;;;;;;"}