'use strict'; var cp = require('child_process'); var parse = require('./lib/parse'); var enoent = require('./lib/enoent'); var cpSpawnSync = cp.spawnSync; function spawn(command, args, options) { var parsed; var spawned; // Parse the arguments parsed = parse(command, args, options); // Spawn the child process spawned = cp.spawn(parsed.command, parsed.args, parsed.options); // Hook into child process "exit" event to emit an error if the command // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 enoent.hookChildProcess(spawned, parsed); return spawned; } function spawnSync(command, args, options) { var parsed; var result; if (!cpSpawnSync) { try { cpSpawnSync = require('spawn-sync'); // eslint-disable-line global-require } catch (ex) { throw new Error( 'In order to use spawnSync on node 0.10 or older, you must ' + 'install spawn-sync:\n\n' + ' npm install spawn-sync --save' ); } } // Parse the arguments parsed = parse(command, args, options); // Spawn the child process result = cpSpawnSync(parsed.command, parsed.args, parsed.options); // Analyze if the command does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); return result; } module.exports = spawn; module.exports.spawn = spawn; module.exports.sync = spawnSync; module.exports._parse = parse; module.exports._enoent = enoent;