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