UNPKG

@grafana/e2e-selectors

Version:

Grafana End-to-End Test Selectors Library

1 lines 3.91 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":";;;AAiBO,SAAS,gBAAA,CACd,kBAAA,EACA,cAAA,GAAiB,QAAA,EACD;AAChB,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAEjD,EAAA,OAAO,oBAAA,CAAqB,oBAAoB,OAAO,CAAA;AACzD;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,CAAC,MAAM,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,KAAK,OAAO,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,IAAI,GAAA,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,KAAY,KAAA,CAAM,OAAO,CAAC,CAAA,EAAG;AACtE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,EAC7D;AACF;;;;"}