{"version":3,"file":"resolver.cjs","sources":["../../src/resolver.ts"],"sourcesContent":["import { gte, compare, valid } from 'semver';\n\nimport {\n  type FunctionSelector,\n  type Selectors,\n  type SelectorsOf,\n  type StringSelector,\n  type VersionedSelectorGroup,\n  type VersionedSelectors,\n  type CssSelector,\n  type UrlSelector,\n  type FunctionSelectorTwoArgs,\n} from './types';\n\n/**\n * Resolves selectors based on the Grafana version\n */\nexport function resolveSelectors<T extends VersionedSelectorGroup>(\n  versionedSelectors: T,\n  grafanaVersion = 'latest'\n): SelectorsOf<T> {\n  const version = grafanaVersion.replace(/\\-.*/, '');\n\n  // If version is empty or invalid after regex replacement, use 'latest'\n  const finalVersion = version && valid(version) ? version : 'latest';\n\n  return resolveSelectorGroup(versionedSelectors, finalVersion);\n}\n\nfunction resolveSelectorGroup<T extends VersionedSelectorGroup>(group: T, grafanaVersion: string): SelectorsOf<T> {\n  const result: Selectors = {};\n\n  for (const [key, value] of Object.entries(group)) {\n    if (isVersionedSelectorGroup(value)) {\n      result[key] = resolveSelectorGroup(value, grafanaVersion);\n    } else {\n      assertIsSemverValid(value, key);\n      result[key] = resolveSelector(value, grafanaVersion);\n    }\n  }\n\n  return result as SelectorsOf<T>;\n}\n\nfunction isVersionedSelectorGroup(\n  target: VersionedSelectors | VersionedSelectorGroup\n): target is VersionedSelectorGroup {\n  if (typeof target === 'object') {\n    const [first] = Object.keys(target);\n    return !valid(first);\n  }\n\n  return false;\n}\n\nfunction resolveSelector(\n  versionedSelector: VersionedSelectors,\n  grafanaVersion: string\n): StringSelector | FunctionSelector | FunctionSelectorTwoArgs | CssSelector | UrlSelector {\n  let versionToUse;\n  let versions = Object.keys(versionedSelector).sort(compare);\n\n  if (grafanaVersion === 'latest') {\n    return versionedSelector[versions[versions.length - 1]];\n  }\n\n  for (const version of versions) {\n    if (gte(grafanaVersion, version)) {\n      versionToUse = version;\n    }\n  }\n\n  if (!versionToUse) {\n    versionToUse = versions[versions.length - 1];\n  }\n\n  return versionedSelector[versionToUse];\n}\n\nfunction assertIsSemverValid(versionedSelector: VersionedSelectors, selectorName: string) {\n  if (!Object.keys(versionedSelector).every((version) => valid(version))) {\n    throw new Error(`Invalid semver version: '${selectorName}'`);\n  }\n}\n"],"names":["valid","compare","gte"],"mappings":";;;;;;;AAiBO,SAAS,gBAAA,CACd,kBAAA,EACA,cAAA,GAAiB,QAAA,EACD;AAChB,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAGjD,EAAA,MAAM,YAAA,GAAe,OAAA,IAAWA,YAAA,CAAM,OAAO,IAAI,OAAA,GAAU,QAAA;AAE3D,EAAA,OAAO,oBAAA,CAAqB,oBAAoB,YAAY,CAAA;AAC9D;AAEA,SAAS,oBAAA,CAAuD,OAAU,cAAA,EAAwC;AAChH,EAAA,MAAM,SAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,wBAAA,CAAyB,KAAK,CAAA,EAAG;AACnC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,oBAAA,CAAqB,KAAA,EAAO,cAAc,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,mBAAA,CAAoB,OAAO,GAAG,CAAA;AAC9B,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,eAAA,CAAgB,KAAA,EAAO,cAAc,CAAA;AAAA,IACrD;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,yBACP,MAAA,EACkC;AAClC,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,CAAC,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,MAAM,CAAA;AAClC,IAAA,OAAO,CAACA,aAAM,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAA,CACP,mBACA,cAAA,EACyF;AACzF,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,WAAW,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA,CAAE,KAAKC,cAAO,CAAA;AAE1D,EAAA,IAAI,mBAAmB,QAAA,EAAU;AAC/B,IAAA,OAAO,iBAAA,CAAkB,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EACxD;AAEA,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAIC,UAAA,CAAI,cAAA,EAAgB,OAAO,CAAA,EAAG;AAChC,MAAA,YAAA,GAAe,OAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,YAAA,GAAe,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAAA,EAC7C;AAEA,EAAA,OAAO,kBAAkB,YAAY,CAAA;AACvC;AAEA,SAAS,mBAAA,CAAoB,mBAAuC,YAAA,EAAsB;AACxF,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA,CAAE,KAAA,CAAM,CAAC,OAAA,KAAYF,YAAA,CAAM,OAAO,CAAC,CAAA,EAAG;AACtE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,EAC7D;AACF;;;;"}