import { Arr, type Optional } from '@ephox/katamari'; import type { PlatformInfo } from '../info/PlatformInfo'; import type { UaInfo } from '../info/UaInfo'; import { Version } from './Version'; const detect = (candidates: PlatformInfo[], userAgent: any): Optional => { const agent = String(userAgent).toLowerCase(); return Arr.find(candidates, (candidate) => { return candidate.search(agent); }); }; // They (browser and os) are the same at the moment, but they might // not stay that way. const detectBrowser = (browsers: PlatformInfo[], userAgent: any): Optional => { return detect(browsers, userAgent).map((browser): UaInfo => { const version = Version.detect(browser.versionRegexes, userAgent); return { current: browser.name, version }; }); }; const detectOs = (oses: PlatformInfo[], userAgent: any): Optional => { return detect(oses, userAgent).map((os): UaInfo => { const version = Version.detect(os.versionRegexes, userAgent); return { current: os.name, version }; }); }; export { detectBrowser, detectOs };