| '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; | 
| }; |