@@ -12,50 +12,66 @@ export type CompatibilityStatus = {
1212 bluetooth : boolean ;
1313 usb : boolean ;
1414 platformAllowed : boolean ;
15- webGL : boolean
15+ webGL : boolean ,
16+ webUSB : boolean
1617} ;
1718
18- // TODO: Why is this a class? No constructor, no internal state, and only
19- // a single static method. Might as well just be a function?
20- class CompatibilityChecker {
21- public static checkCompatibility ( ) : CompatibilityStatus {
22- if ( localStorage . getItem ( 'isTesting' ) ) {
23- return { bluetooth : true , usb : true , platformAllowed : true , webGL : true } ;
24- }
25- const browser = Bowser . getParser ( window . navigator . userAgent ) ;
26- const browserName = browser . getBrowser ( ) . name ?? 'unknown' ;
27- const osName = browser . getOS ( ) . name ?? 'unknown' ;
28-
29- const canvas = document . createElement ( "canvas" )
30- // TODO: Handle webgl1 vs webgl2 in relation to threejs
31- const webGL = canvas . getContext ( "webgl" ) instanceof WebGLRenderingContext
32-
33- const browserVersion = browser . getBrowserVersion ( ) ;
34- if ( ! browserVersion ) {
35- return { bluetooth : false , usb : false , platformAllowed : true , webGL : webGL } ;
36- }
37- const majorVersion = browser . getBrowserVersion ( ) . split ( '.' ) [ 0 ] ;
38- const minorVersion = browser . getBrowserVersion ( ) . split ( '.' ) [ 1 ] ;
39- const semVer : SemVer = new SemVerImpl ( majorVersion , minorVersion ) ;
40- const isBluetoothSupported = BTComp . isVersionSupported ( browserName , semVer , osName ) ;
41-
42- const isUsbSupported = USBComp . isVersionSupported ( browserName , semVer , osName ) ;
43- let platformType = browser . getPlatform ( ) . type ;
44-
45- // If platform won't report what it is, just assume desktop (ChromeOS doesnt report it)
46- if ( platformType == undefined ) {
47- platformType = 'desktop' ;
48- }
49- const isPlatformAllowed =
50- Environment . isInDevelopment || ! nonAllowedPlatforms . includes ( platformType ) ;
51-
52- return {
53- bluetooth : isBluetoothSupported ,
54- usb : isUsbSupported ,
55- platformAllowed : isPlatformAllowed ,
56- webGL : webGL
57- } ;
19+ export function checkCompatibility ( ) : CompatibilityStatus {
20+ if ( localStorage . getItem ( 'isTesting' ) ) {
21+ return { bluetooth : true , usb : true , platformAllowed : true , webGL : true , webUSB : true } ;
22+ }
23+ const browser = Bowser . getParser ( window . navigator . userAgent ) ;
24+ const browserName = browser . getBrowser ( ) . name ?? 'unknown' ;
25+ const osName = browser . getOS ( ) . name ?? 'unknown' ;
26+
27+ const canvas = document . createElement ( "canvas" )
28+ // TODO: Handle webgl1 vs webgl2 in relation to threejs
29+ const webGL = canvas . getContext ( "webgl" ) instanceof WebGLRenderingContext
30+
31+ const webUSB = false // Check for this is async, so another function is used
32+ // try {
33+ // await navigator.usb.getDevices()
34+ // webUSB = true
35+ // } catch {
36+ // webUSB = false
37+ // }
38+
39+ const browserVersion = browser . getBrowserVersion ( ) ;
40+ if ( ! browserVersion ) {
41+ return { bluetooth : false , usb : false , platformAllowed : true , webGL : webGL , webUSB } ;
42+ }
43+ const majorVersion = browser . getBrowserVersion ( ) . split ( '.' ) [ 0 ] ;
44+ const minorVersion = browser . getBrowserVersion ( ) . split ( '.' ) [ 1 ] ;
45+ const semVer : SemVer = new SemVerImpl ( majorVersion , minorVersion ) ;
46+ const isBluetoothSupported = BTComp . isVersionSupported ( browserName , semVer , osName ) ;
47+
48+ const isUsbSupported = USBComp . isVersionSupported ( browserName , semVer , osName ) ;
49+ let platformType = browser . getPlatform ( ) . type ;
50+
51+ // If platform won't report what it is, just assume desktop (ChromeOS doesnt report it)
52+ if ( platformType == undefined ) {
53+ platformType = 'desktop' ;
54+ }
55+ const isPlatformAllowed =
56+ Environment . isInDevelopment || ! nonAllowedPlatforms . includes ( platformType ) ;
57+
58+ return {
59+ bluetooth : isBluetoothSupported ,
60+ usb : isUsbSupported ,
61+ platformAllowed : isPlatformAllowed ,
62+ webGL : webGL ,
63+ webUSB : webUSB
64+ } ;
65+ }
66+
67+ export async function checkUSBCompatibility ( ) : Promise < boolean > {
68+ try {
69+ await navigator . usb . getDevices ( )
70+ return true
71+ } catch {
72+ return false
5873 }
5974}
75+ // }
6076
61- export default CompatibilityChecker ;
77+ // export default CompatibilityChecker;
0 commit comments