@speckle/shared
Version:
Shared code between various Speckle JS packages
95 lines • 3.51 kB
JavaScript
"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