@@ -8,6 +8,7 @@ import PromiseDuplex from 'promise-duplex';
88import ThirdUtils from "../ThirdUtils.js" ;
99import Utils from '../../utils.js' ;
1010import Stats from '../../sync/stats.js' ;
11+ import { resolve } from 'import-meta-resolve' ;
1112
1213/**
1314 * Application binary interface known CPU
@@ -30,6 +31,23 @@ interface IEmissions {
3031 error : ( error : Error ) => void
3132 disconnect : ( cause : string ) => void
3233}
34+ // fs.ReadStream |
35+ function getResource ( path : string ) : string | null {
36+ try {
37+ return require . resolve ( path ) ;
38+ } catch ( e ) {
39+ try {
40+ if ( e instanceof Error && e . message . includes ( 'require is not defined' ) ) {
41+ return resolve ( path , import . meta. url ) ;
42+ // .pathname;
43+ // return new URL(path, import.meta.url).pathname;
44+ }
45+ } catch ( e ) {
46+ return null ;
47+ }
48+ return null ;
49+ }
50+ }
3351
3452export default class Minicap extends EventEmitter {
3553 private config : MinicapOptions ;
@@ -133,29 +151,28 @@ export default class Minicap extends EventEmitter {
133151 const sdkLevel = parseInt ( props [ 'ro.build.version.sdk' ] ) ;
134152 const minicapName = ( sdkLevel >= 16 ) ? 'minicap' : 'minicap-nopie' ;
135153
136- let binFile : string ;
137- let soFile = '' ;
154+ let binFile : string | null = null ;
155+ let soFile : string | null = null ;
138156
139- try {
140- binFile = require . resolve ( `@devicefarmer/minicap-prebuilt/prebuilt/${ abi } /bin/${ minicapName } ` ) ;
141- } catch ( e ) {
142- throw Error ( `minicap not found in @devicefarmer/minicap-prebuilt/prebuilt/${ abi } /bin/ please install @devicefarmer/minicap-prebuilt to use minicap ${ e } ` ) ;
157+
158+ binFile = getResource ( `@devicefarmer/minicap-prebuilt/prebuilt/${ abi } /bin/${ minicapName } ` ) ;
159+ if ( ! binFile )
160+ throw Error ( `minicap not found in @devicefarmer/minicap-prebuilt/prebuilt/${ abi } /bin/ please install @devicefarmer/minicap-prebuilt to use minicap` ) ;
161+
162+ if ( sdkLevel === 32 ) {
163+ soFile = getResource ( `@u4/minicap-prebuilt/prebuilt/${ abi } /lib/android-${ sdkLevel } /minicap.so` ) ;
164+ } else {
165+ soFile = getResource ( `@devicefarmer/minicap-prebuilt/prebuilt/${ abi } /lib/android-${ sdkLevel } /minicap.so` ) ;
143166 }
144167
145- try {
146- if ( sdkLevel === 32 ) {
147- soFile = require . resolve ( `@u4/minicap-prebuilt/prebuilt/${ abi } /lib/android-${ sdkLevel } /minicap.so` ) ;
148- } else {
149- soFile = require . resolve ( `@devicefarmer/minicap-prebuilt/prebuilt/${ abi } /lib/android-${ sdkLevel } /minicap.so` ) ;
150- }
151- } catch ( e ) {
152- throw Error ( `minicap.so for your device check for @devicefarmer/minicap-prebuilt update that support android-${ sdkLevel } , ${ soFile } is missing ${ e } ` ) ;
168+ if ( ! soFile ) {
169+ throw Error ( `minicap.so for your device check for @devicefarmer/minicap-prebuilt update that support android-${ sdkLevel } , ${ soFile } is missing` ) ;
153170 }
154171
155172 // only upload minicap binary in tmp filder if file is missing
156173 try {
157174 await this . client . stat ( '/data/local/tmp/minicap' ) ;
158- debug ( `/data/local/tmp/minicap already presentin ${ this . client . serial } ` )
175+ debug ( `/data/local/tmp/minicap already present in ${ this . client . serial } ` )
159176 } catch {
160177 debug ( `pushing minicap binary to ${ this . client . serial } ` )
161178 const tr = await this . client . push ( binFile , '/data/local/tmp/minicap' , 0o755 ) ;
0 commit comments