| 'use strict'; |
| const path = require('path'); |
| const pathKey = require('path-key'); |
| |
| const npmRunPath = options => { |
| options = { |
| cwd: process.cwd(), |
| path: process.env[pathKey()], |
| execPath: process.execPath, |
| ...options |
| }; |
| |
| let previous; |
| let cwdPath = path.resolve(options.cwd); |
| const result = []; |
| |
| while (previous !== cwdPath) { |
| result.push(path.join(cwdPath, 'node_modules/.bin')); |
| previous = cwdPath; |
| cwdPath = path.resolve(cwdPath, '..'); |
| } |
| |
| // Ensure the running `node` binary is used |
| const execPathDir = path.resolve(options.cwd, options.execPath, '..'); |
| result.push(execPathDir); |
| |
| return result.concat(options.path).join(path.delimiter); |
| }; |
| |
| module.exports = npmRunPath; |
| // TODO: Remove this for the next major release |
| module.exports.default = npmRunPath; |
| |
| module.exports.env = options => { |
| options = { |
| env: process.env, |
| ...options |
| }; |
| |
| const env = {...options.env}; |
| const path = pathKey({env}); |
| |
| options.path = env[path]; |
| env[path] = module.exports(options); |
| |
| return env; |
| }; |