@@ -263,36 +263,38 @@ interface RuntimeInfo {
263
263
* @return Promise of infomation of runtime of `target`.
264
264
*/
265
265
async function searchScriptRuntime ( target : string , opts : InternalOptions ) : Promise < RuntimeInfo > {
266
+ let shebang ;
266
267
try {
267
268
const data = await opts . fs_ . readFile ( target , 'utf8' )
268
269
269
270
// First, check if the bin is a #! of some sort.
270
271
const firstLine = data . trim ( ) . split ( / \r * \n / ) [ 0 ]
271
- const shebang = firstLine . match ( shebangExpr )
272
- if ( ! shebang ) {
273
- // If not, infer script type from its extension.
274
- // If the inference fails, it's something that'll be compiled, or some other
275
- // sort of script, and just call it directly.
276
- const targetExtension = path . extname ( target ) . toLowerCase ( )
277
- return {
278
- // undefined if extension is unknown but it's converted to null.
279
- program : extensionToProgramMap . get ( targetExtension ) || null ,
280
- additionalArgs : ''
272
+ shebang = firstLine . match ( shebangExpr )
273
+ } catch ( err : any ) {
274
+ if ( isWindows ( ) && err . code === 'ENOENT' ) {
275
+ if ( await opts . fs_ . stat ( `${ target } ${ getExeExtension ( ) } ` ) ) {
276
+ return {
277
+ program : null ,
278
+ additionalArgs : '' ,
279
+ }
281
280
}
282
281
}
282
+ if ( err . code !== 'ENOENT' ) throw err
283
+ }
284
+ if ( ! shebang ) {
285
+ // If not, infer script type from its extension.
286
+ // If the inference fails, it's something that'll be compiled, or some other
287
+ // sort of script, and just call it directly.
288
+ const targetExtension = path . extname ( target ) . toLowerCase ( )
283
289
return {
284
- program : shebang [ 1 ] ,
285
- additionalArgs : shebang [ 2 ]
286
- }
287
- } catch ( err : any ) {
288
- if ( ! isWindows ( ) || err . code !== 'ENOENT' ) throw err
289
- if ( await opts . fs_ . stat ( `${ target } ${ getExeExtension ( ) } ` ) ) {
290
- return {
291
- program : null ,
292
- additionalArgs : '' ,
293
- }
290
+ // undefined if extension is unknown but it's converted to null.
291
+ program : extensionToProgramMap . get ( targetExtension ) || null ,
292
+ additionalArgs : ''
294
293
}
295
- throw err
294
+ }
295
+ return {
296
+ program : shebang [ 1 ] ,
297
+ additionalArgs : shebang [ 2 ]
296
298
}
297
299
}
298
300
0 commit comments