detect-features
Version:
Detect and report browser and hardware features.
124 lines (113 loc) • 5.45 kB
JavaScript
// @ts-check
// Browser features
import isAnimationWorkletSupported from './browserFeatures/isAnimationWorkletSupported';
import isAudioWorkletSupported from './browserFeatures/isAudioWorkletSupported';
import getBrowserType from './browserFeatures/getBrowserType';
import getMediaFeatures from './browserFeatures/getMediaFeatures';
import getWebGL2Features from './browserFeatures/getWebGL2Features';
import getWebGLFeatures from './browserFeatures/getWebGLFeatures';
import isBroadcastChannelSupported from './browserFeatures/isBroadcastChannelSupported';
import isFetchSupported from './browserFeatures/isFetchSupported';
import isGamepadSupported from './browserFeatures/isGamepadSupported';
import isImageBitmapSupported from './browserFeatures/isImageBitmapSupported';
import isImageDecodeSupported from './browserFeatures/isImageDecodeSupported';
import isIndexedDBSupported from './browserFeatures/isIndexedDBSupported';
import isIntersectionObserverSupported from './browserFeatures/isIntersectionObserverSupported';
import isLayoutWorkletSupported from './browserFeatures/isLayoutWorkletSupported';
import isLocalStorageSupported from './browserFeatures/isLocalStorageSupported';
import isMutationObserverSupported from './browserFeatures/isMutationObserverSupported';
import isOffscreenCanvasSupported from './browserFeatures/isOffscreenCanvasSupported';
import isPaintWorkletSupported from './browserFeatures/isPaintWorkletSupported';
import isPerformanceObserverSupported from './browserFeatures/isPerformanceObserverSupported';
import isPerformanceNowSupported from './browserFeatures/isPerformanceNowSupported';
import isRequestIdleCallbackSupported from './browserFeatures/isRequestIdleCallbackSupported';
import isServiceWorkerSupported from './browserFeatures/isServiceWorkerSupported';
import isSessionStorageSupported from './browserFeatures/isSessionStorageSupported';
import isUserActivationSupported from './browserFeatures/isUserActivationSupported';
import isWebAssemblySupported from './browserFeatures/isWebAssemblySupported';
import isWebAudioSupported from './browserFeatures/isWebAudioSupported';
import isWebGL2Supported from './browserFeatures/isWebGL2Supported';
import isWebGLSupported from './browserFeatures/isWebGLSupported';
import isWebPSupported from './browserFeatures/isWebPSupported';
import isWebRTCSupported from './browserFeatures/isWebRTCSupported';
import isWebSocketSupported from './browserFeatures/isWebSocketSupported';
import isWebVRSupported from './browserFeatures/isWebVRSupported';
import isWebWorkerInlineSupported from './browserFeatures/isWebWorkerInlineSupported';
import isWebWorkerSupported from './browserFeatures/isWebWorkerSupported';
import isWebXRSupported from './browserFeatures/isWebXRSupported';
// Browser settings
import isCookieEnabled from './browserSettings/isCookieEnabled';
import isDoNotTrackEnabled from './browserSettings/isDoNotTrackEnabled';
// Hardware features
import getDevicePixelRatio from './hardwareFeatures/getDevicePixelRatio';
import getEndianness from './hardwareFeatures/getEndianness';
import getScreenSize from './hardwareFeatures/getScreenSize';
import getWebWorkerPoolSize from './hardwareFeatures/getWebWorkerPoolSize';
import getWindowSize from './hardwareFeatures/getWindowSize';
// Hardware tier
import getGPUTier from './hardwareTier/getGPUTier';
// Features
export const getFeatures = () => {
const features = {
// Browser features
browserFeatures: {
browserType: getBrowserType,
isAnimationWorkletSupported,
isAudioWorkletSupported,
isBroadcastChannelSupported,
isFetchSupported,
isGamepadSupported,
isImageBitmapSupported,
isImageDecodeSupported,
isIndexedDBSupported,
isIntersectionObserverSupported,
isLayoutWorkletSupported,
isLocalStorageSupported,
isMutationObserverSupported,
isOffscreenCanvasSupported,
isPaintWorkletSupported,
isPerformanceObserverSupported,
isPerformanceNowSupported,
isRequestIdleCallbackSupported,
isServiceWorkerSupported,
isSessionStorageSupported,
isUserActivationSupported,
isWebAssemblySupported,
isWebAudioSupported,
// !! Device driver bug: Work around bug on Samsung Galaxy S and A series
// !! it appears to have problems with immediately evaluated support checking for WebGL 2 (not WebGL)
isWebGL2Supported: isWebGL2Supported(),
isWebGLSupported,
isWebPSupported,
isWebRTCSupported,
isWebSocketSupported,
isWebVRSupported,
isWebWorkerInlineSupported,
isWebWorkerSupported,
isWebXRSupported,
mediaFeatures: getMediaFeatures,
// !! Device driver bug: Work around bug on Samsung Galaxy S and A series
// !! it appears to have problems with immediately evaluated support checking for WebGL 2 (not WebGL)
webGL2Features: getWebGL2Features(),
webGLFeatures: getWebGLFeatures,
},
// Browser settings
browserSettings: {
isCookieEnabled,
isDoNotTrackEnabled,
},
// Hardware features
hardwareFeatures: {
devicePixelRatio: getDevicePixelRatio,
endianness: getEndianness,
screenSize: getScreenSize.toString(),
workerPoolSize: getWebWorkerPoolSize,
windowSize: getWindowSize.toString(),
},
// Hardware tier
hardwareTier: {
GPUTier: getGPUTier,
},
};
return features;
};