| 'use strict'; |
| const path = require('path'); |
| const pathKey = require('path-key'); |
| |
| module.exports = opts => { |
| opts = Object.assign({ |
| cwd: process.cwd(), |
| path: process.env[pathKey()] |
| }, opts); |
| |
| let prev; |
| let pth = path.resolve(opts.cwd); |
| const ret = []; |
| |
| while (prev !== pth) { |
| ret.push(path.join(pth, 'node_modules/.bin')); |
| prev = pth; |
| pth = path.resolve(pth, '..'); |
| } |
| |
| // ensure the running `node` binary is used |
| ret.push(path.dirname(process.execPath)); |
| |
| return ret.concat(opts.path).join(path.delimiter); |
| }; |
| |
| module.exports.env = opts => { |
| opts = Object.assign({ |
| env: process.env |
| }, opts); |
| |
| const env = Object.assign({}, opts.env); |
| const path = pathKey({env}); |
| |
| opts.path = env[path]; |
| env[path] = module.exports(opts); |
| |
| return env; |
| }; |