time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

enoent.js (1480B)


      1 'use strict';
      2 
      3 const isWin = process.platform === 'win32';
      4 
      5 function notFoundError(original, syscall) {
      6     return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
      7         code: 'ENOENT',
      8         errno: 'ENOENT',
      9         syscall: `${syscall} ${original.command}`,
     10         path: original.command,
     11         spawnargs: original.args,
     12     });
     13 }
     14 
     15 function hookChildProcess(cp, parsed) {
     16     if (!isWin) {
     17         return;
     18     }
     19 
     20     const originalEmit = cp.emit;
     21 
     22     cp.emit = function (name, arg1) {
     23         // If emitting "exit" event and exit code is 1, we need to check if
     24         // the command exists and emit an "error" instead
     25         // See https://github.com/IndigoUnited/node-cross-spawn/issues/16
     26         if (name === 'exit') {
     27             const err = verifyENOENT(arg1, parsed, 'spawn');
     28 
     29             if (err) {
     30                 return originalEmit.call(cp, 'error', err);
     31             }
     32         }
     33 
     34         return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params
     35     };
     36 }
     37 
     38 function verifyENOENT(status, parsed) {
     39     if (isWin && status === 1 && !parsed.file) {
     40         return notFoundError(parsed.original, 'spawn');
     41     }
     42 
     43     return null;
     44 }
     45 
     46 function verifyENOENTSync(status, parsed) {
     47     if (isWin && status === 1 && !parsed.file) {
     48         return notFoundError(parsed.original, 'spawnSync');
     49     }
     50 
     51     return null;
     52 }
     53 
     54 module.exports = {
     55     hookChildProcess,
     56     verifyENOENT,
     57     verifyENOENTSync,
     58     notFoundError,
     59 };