UNPKG

@grafana/e2e-selectors

Version:

Grafana End-to-End Test Selectors Library

1 lines 3.86 kB
{"version":3,"file":"resolver.mjs","sources":["../../src/resolver.ts"],"sourcesContent":["import { gte, compare, valid } from 'semver';\n\nimport {\n FunctionSelector,\n Selectors,\n SelectorsOf,\n StringSelector,\n VersionedSelectorGroup,\n VersionedSelectors,\n CssSelector,\n UrlSelector,\n 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 return resolveSelectorGroup(versionedSelectors, version);\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":[],"mappings":";;AAiBgB,SAAA,gBAAA,CACd,kBACA,EAAA,cAAA,GAAiB,QACD,EAAA;AAChB,EAAA,MAAM,OAAU,GAAA,cAAA,CAAe,OAAQ,CAAA,MAAA,EAAQ,EAAE,CAAA;AAEjD,EAAO,OAAA,oBAAA,CAAqB,oBAAoB,OAAO,CAAA;AACzD;AAEA,SAAS,oBAAA,CAAuD,OAAU,cAAwC,EAAA;AAChH,EAAA,MAAM,SAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAChD,IAAI,IAAA,wBAAA,CAAyB,KAAK,CAAG,EAAA;AACnC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,oBAAqB,CAAA,KAAA,EAAO,cAAc,CAAA;AAAA,KACnD,MAAA;AACL,MAAA,mBAAA,CAAoB,OAAO,GAAG,CAAA;AAC9B,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,eAAgB,CAAA,KAAA,EAAO,cAAc,CAAA;AAAA;AACrD;AAGF,EAAO,OAAA,MAAA;AACT;AAEA,SAAS,yBACP,MACkC,EAAA;AAClC,EAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC9B,IAAA,MAAM,CAAC,KAAK,CAAI,GAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAClC,IAAO,OAAA,CAAC,MAAM,KAAK,CAAA;AAAA;AAGrB,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,eAAA,CACP,mBACA,cACyF,EAAA;AACzF,EAAI,IAAA,YAAA;AACJ,EAAA,IAAI,WAAW,MAAO,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAAE,KAAK,OAAO,CAAA;AAE1D,EAAA,IAAI,mBAAmB,QAAU,EAAA;AAC/B,IAAA,OAAO,iBAAkB,CAAA,QAAA,CAAS,QAAS,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA;AAGxD,EAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,IAAI,IAAA,GAAA,CAAI,cAAgB,EAAA,OAAO,CAAG,EAAA;AAChC,MAAe,YAAA,GAAA,OAAA;AAAA;AACjB;AAGF,EAAA,IAAI,CAAC,YAAc,EAAA;AACjB,IAAe,YAAA,GAAA,QAAA,CAAS,QAAS,CAAA,MAAA,GAAS,CAAC,CAAA;AAAA;AAG7C,EAAA,OAAO,kBAAkB,YAAY,CAAA;AACvC;AAEA,SAAS,mBAAA,CAAoB,mBAAuC,YAAsB,EAAA;AACxF,EAAI,IAAA,CAAC,MAAO,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAAE,KAAM,CAAA,CAAC,OAAY,KAAA,KAAA,CAAM,OAAO,CAAC,CAAG,EAAA;AACtE,IAAA,MAAM,IAAI,KAAA,CAAM,CAA4B,yBAAA,EAAA,YAAY,CAAG,CAAA,CAAA,CAAA;AAAA;AAE/D;;;;"}