@@ -263,36 +263,38 @@ interface RuntimeInfo {
263263 * @return Promise of infomation of runtime of `target`.
264264 */
265265async function searchScriptRuntime ( target : string , opts : InternalOptions ) : Promise < RuntimeInfo > {
266+ let shebang ;
266267 try {
267268 const data = await opts . fs_ . readFile ( target , 'utf8' )
268269
269270 // First, check if the bin is a #! of some sort.
270271 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+ }
281280 }
282281 }
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 ( )
283289 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 : ''
294293 }
295- throw err
294+ }
295+ return {
296+ program : shebang [ 1 ] ,
297+ additionalArgs : shebang [ 2 ]
296298 }
297299}
298300
0 commit comments