@@ -112,40 +112,6 @@ const boot = async (initialState: InitialState) => {
112112 interruptFuture = future ;
113113 } ;
114114
115- Object . defineProperty ( navigator . usb , 'requestDevice' , {
116- get : ( ) => async ( ...args : Parameters < USB [ 'requestDevice' ] > ) => {
117- const cloner = ( value : unknown ) => {
118- if ( value instanceof pyodide . ffi . PyProxy ) {
119- return value . toJs ( {
120- create_pyproxies : false ,
121- dict_converter : Object . fromEntries ,
122- } ) ;
123- }
124- } ;
125-
126- const newArgs : Parameters < USB [ 'requestDevice' ] > = cloneDeepWith ( args , cloner ) ;
127- await rpc . send ( 'requestUSBDevice' , newArgs ) ;
128-
129- // USBDevice is not transferrable ;_;
130-
131- let devices = await navigator . usb . getDevices ( ) ;
132- const [ options ] = newArgs ;
133- if ( options ?. filters ?. length ) {
134- const { filters } = options ;
135- devices = devices . filter ( ( device ) => filters . some ( ( filter ) => {
136- return Object . keys ( filter ) . every ( ( _key ) => {
137- let key = _key as ( keyof USBDeviceFilter & keyof USBDevice ) ;
138- return filter [ key ] === undefined || device [ key ] === filter [ key ] ;
139- } ) ;
140- } ) ) ;
141- }
142- if ( ! devices [ 0 ] ) {
143- throw new Error ( 'Requested USB device not found (most likely programmer error)' ) ;
144- }
145- return devices [ 0 ] ;
146- } ,
147- } ) ;
148-
149115 const terminal = new TerminalHandle ( {
150116 size : initialState . termSize ,
151117 ptyAttrs : initialState . termPtyAttrs ,
@@ -187,6 +153,40 @@ const boot = async (initialState: InitialState) => {
187153 return printError ( 'WebUSB is required but not available.' ) ;
188154 }
189155
156+ Object . defineProperty ( navigator . usb , 'requestDevice' , {
157+ get : ( ) => async ( ...args : Parameters < USB [ 'requestDevice' ] > ) => {
158+ const cloner = ( value : unknown ) => {
159+ if ( value instanceof pyodide . ffi . PyProxy ) {
160+ return value . toJs ( {
161+ create_pyproxies : false ,
162+ dict_converter : Object . fromEntries ,
163+ } ) ;
164+ }
165+ } ;
166+
167+ const newArgs : Parameters < USB [ 'requestDevice' ] > = cloneDeepWith ( args , cloner ) ;
168+ await rpc . send ( 'requestUSBDevice' , newArgs ) ;
169+
170+ // USBDevice is not transferrable ;_;
171+
172+ let devices = await navigator . usb . getDevices ( ) ;
173+ const [ options ] = newArgs ;
174+ if ( options ?. filters ?. length ) {
175+ const { filters } = options ;
176+ devices = devices . filter ( ( device ) => filters . some ( ( filter ) => {
177+ return Object . keys ( filter ) . every ( ( _key ) => {
178+ let key = _key as ( keyof USBDeviceFilter & keyof USBDevice ) ;
179+ return filter [ key ] === undefined || device [ key ] === filter [ key ] ;
180+ } ) ;
181+ } ) ) ;
182+ }
183+ if ( ! devices [ 0 ] ) {
184+ throw new Error ( 'Requested USB device not found (most likely programmer error)' ) ;
185+ }
186+ return devices [ 0 ] ;
187+ } ,
188+ } ) ;
189+
190190 printProgress ( 'Loading toolchain...' ) ;
191191 await loadToolchain ( {
192192 loadProgress ( { command, totalLength, doneLength } ) {
0 commit comments