UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

95 lines 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isBraveOrSafari = exports.OperatingSystem = void 0; exports.getClientOperatingSystem = getClientOperatingSystem; exports.isSafari = isSafari; exports.isBrave = isBrave; const _lodash_1 = require("#lodash"); var OperatingSystem; (function (OperatingSystem) { OperatingSystem["Windows"] = "win"; OperatingSystem["Mac"] = "mac"; OperatingSystem["Linux"] = "linux"; OperatingSystem["Android"] = "android"; OperatingSystem["iOS"] = "ios"; OperatingSystem["Other"] = "other"; })(OperatingSystem || (exports.OperatingSystem = OperatingSystem = {})); function resolveOsFromPlatform() { if (!globalThis || !globalThis.navigator || !('platform' in globalThis.navigator)) { return null; } const platform = (globalThis.navigator.platform || '').toLowerCase(); if (platform.startsWith('mac')) return OperatingSystem.Mac; if (platform.startsWith('linux') || platform.startsWith('freebsd') || platform.startsWith('sunos')) return OperatingSystem.Linux; if (platform.startsWith('win')) return OperatingSystem.Windows; if (platform.startsWith('iphone') || platform.startsWith('ipad') || platform.startsWith('ipod')) return OperatingSystem.iOS; if (platform.startsWith('android')) return OperatingSystem.Android; return OperatingSystem.Other; } function resolveOsFromUserAgent() { if (!globalThis || !globalThis.navigator || !('userAgent' in globalThis.navigator)) { return null; } const userAgent = globalThis.navigator.userAgent; if (userAgent.includes('X11') || userAgent.includes('Linux')) return OperatingSystem.Linux; if (userAgent.includes('Win')) return OperatingSystem.Windows; if (userAgent.includes('Mac')) return OperatingSystem.Mac; if (userAgent.includes('Android')) return OperatingSystem.Android; if (userAgent.includes('iPhone') || userAgent.includes('iPad') || userAgent.includes('iPhone')) return OperatingSystem.iOS; return OperatingSystem.Other; } function getClientOperatingSystem() { if (!globalThis || !globalThis.navigator) { // Skipped in server-side return OperatingSystem.Other; } const osFromPlatform = resolveOsFromPlatform(); // If Linux it could actually be Android, so let's check userAgent if (osFromPlatform && ![OperatingSystem.Other, OperatingSystem.Linux].includes(osFromPlatform)) { return osFromPlatform; } const userAgentPlatform = resolveOsFromUserAgent(); return userAgentPlatform || OperatingSystem.Other; } /** * Check if user is in Safari browser */ function isSafari() { if (!globalThis || !globalThis.navigator || !('userAgent' in globalThis.navigator)) { return false; } const userAgent = globalThis.navigator.userAgent; return /^((?!chrome|android).)*safari/i.test(userAgent); } /** * Check if user is in Brave browser */ function isBrave() { if (!globalThis || !globalThis.navigator || !('brave' in globalThis.navigator)) { return false; } const braveObj = (0, _lodash_1.get)(globalThis.navigator, 'brave'); if (!braveObj) return false; return !!(0, _lodash_1.get)(braveObj, 'isBrave', false); } const isBraveOrSafari = () => isBrave() || isSafari(); exports.isBraveOrSafari = isBraveOrSafari; //# sourceMappingURL=os.js.map