Files
2026-08-07 21:39:30 +02:00

45 lines
1.4 KiB
JavaScript

/**
* Reads `navigator.userAgent` / `navigator.platform` (legacy but universally
* supported) into a normalized shape. In development, prefers the modern
* `navigator.userAgentData` API on Chromium to avoid DevTools warnings about
* the deprecated reads; that branch is dead-code-eliminated in production
* builds to keep the bundle small.
*
* Returns empty/zero values when `navigator` is undefined (SSR), so every
* derived flag safely evaluates to `false`.
*/
function readRawData() {
if (typeof navigator === 'undefined') {
return {
userAgent: '',
platform: '',
maxTouchPoints: 0
};
}
if (process.env.NODE_ENV !== 'production') {
const uaData = navigator.userAgentData;
if (uaData && Array.isArray(uaData.brands)) {
return {
userAgent: uaData.brands.map(({
brand,
version
}) => `${brand}/${version}`).join(' '),
platform: uaData.platform ?? navigator.platform ?? '',
maxTouchPoints: navigator.maxTouchPoints ?? 0
};
}
}
return {
userAgent: navigator.userAgent,
platform: navigator.platform ?? '',
maxTouchPoints: navigator.maxTouchPoints ?? 0
};
}
const {
userAgent,
platform,
maxTouchPoints
} = readRawData();
export const lowerUserAgent = userAgent.toLowerCase();
export const lowerPlatform = platform.toLowerCase();
export { maxTouchPoints };