UNPKG

@mornya/platform-libs

Version:

Parses UA (user-agent) information of the current platform.

171 lines (170 loc) 5.85 kB
var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var patterns = { OS: { IOS: [/iPhone\sOS\s([0-9]+)_([0-9]+)_?([0-9]+)?/, /iPad;\sCPU\sOS\s([0-9]+)_([0-9]+)_?([0-9]+)?/], AOS: [/Android\s([0-9]+)(?:\.([0-9]+))?(?:\.([0-9]+))?/], WOS: [/Windows\sPhone\sOS\s([0-9]+)\.([0-9]+)\.?([0-9]+)?/], WIN: [/Windows\sNT\s([0-9]+)\.([0-9]+)/], MAC: [/Mac\sOS\sX\s?([0-9a-z]+)[_.]([0-9a-z]+)[_.]?([0-9]+)?/], LINUX: [/Linux\sx86_64/], }, Browser: { OPERA: [/OPR\/([0-9]+)\.([0-9]+)\.([0-9]+)\.?([0-9]+)?$/], EDGE: [/Edge\/([0-9]+)\.([0-9]+)\.?([0-9]+)?$/], CHROME: [/Chrome\/([0-9]+)\.([0-9]+)\.([0-9]+)/], SAFARI: [/Safari\/([0-9]+)\.([0-9]+)\.?([0-9]+)?$/], FIREFOX: [/Firefox\/([0-9]+)\.([0-9]+)$/], IE: [ /compatible;\sMSIE\s([0-9]+)\.([0-9]+);/, /Trident\/7.0;\srv:([0-9]+)\.([0-9]+)/, ], }, }; function getAsSemVer(rawVersion) { var temp = (rawVersion === null || rawVersion === void 0 ? void 0 : rawVersion.length) ? __spreadArray([], __read(rawVersion.filter(Boolean)), false) : ['0']; if (temp.length < 2) { temp.push('0'); temp.push('0'); } else if (temp.length < 3) { temp.push('0'); } return temp.join('.'); } export function resolveMatches(pattern, target) { var e_1, _a, e_2, _b; if (target) { try { for (var _c = __values(Object.keys(pattern)), _d = _c.next(); !_d.done; _d = _c.next()) { var name_1 = _d.value; try { for (var _e = (e_2 = void 0, __values(pattern[name_1])), _f = _e.next(); !_f.done; _f = _e.next()) { var p = _f.value; var matches = target.match(p); if (matches) { return { name: name_1, matches: matches }; } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_f && !_f.done && (_b = _e.return)) _b.call(_e); } finally { if (e_2) throw e_2.error; } } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } finally { if (e_1) throw e_1.error; } } } return { name: '', matches: [] }; } export function checkVersion(baseVersion, currVersion) { var req = baseVersion .split('.') .slice(0, 3) .map(function (item) { return Number(item); }); var cur = currVersion .split('.') .slice(0, 3) .map(function (item) { return Number(item); }); for (var i = 0; i < 3; i++) { if (req[i] < cur[i]) { return 1; } else if (req[i] > cur[i]) { return -1; } } return 0; } export function isTouchDevice() { if (typeof window === 'undefined') { return false; } else if ('ontouchstart' in window || navigator.maxTouchPoints > 0) { return true; } else if (window.matchMedia) { var matches = window.matchMedia('(hover: none), (pointer: coarse)').matches; return matches && 'VisualViewport' in window; } else { return false; } } export function getInfo(userAgent) { var UA = { productName: '', productVersion: '', systemInfo: '', extras: '', }; var uaMatches = userAgent.match(/(.*?)\/(.*?)\s\((.*?)\)\s?(.*)/); if (uaMatches) { UA.productName = uaMatches[1]; UA.productVersion = uaMatches[2]; UA.systemInfo = uaMatches[3]; UA.extras = uaMatches[4]; } var os = resolveMatches(patterns.OS, UA.systemInfo); var browser = resolveMatches(patterns.Browser, userAgent); var browserType = ['AOS', 'IOS', 'WOS'].includes(os.name) ? 'MOBILE' : 'DESKTOP'; return { UA: UA, OS: { vendor: os.name, version: getAsSemVer(os.matches.slice(1, 4)).replace(/[x|y]/g, '0'), }, Browser: { type: browserType, vendor: browser.name, version: getAsSemVer(browser.matches.slice(1, 4)), }, isDesktop: browserType === 'DESKTOP', isMobile: browserType === 'MOBILE', isAOS: os.name === 'AOS', isIOS: os.name === 'IOS', }; }