Spaces:
Running
Running
| var path = require('path'); | |
| var parse = path.parse || require('path-parse'); // eslint-disable-line global-require | |
| var getNodeModulesDirs = function getNodeModulesDirs(absoluteStart, modules) { | |
| var prefix = '/'; | |
| if ((/^([A-Za-z]:)/).test(absoluteStart)) { | |
| prefix = ''; | |
| } else if ((/^\\\\/).test(absoluteStart)) { | |
| prefix = '\\\\'; | |
| } | |
| var paths = [absoluteStart]; | |
| var parsed = parse(absoluteStart); | |
| while (parsed.dir !== paths[paths.length - 1]) { | |
| paths.push(parsed.dir); | |
| parsed = parse(parsed.dir); | |
| } | |
| return paths.reduce(function (dirs, aPath) { | |
| return dirs.concat(modules.map(function (moduleDir) { | |
| return path.resolve(prefix, aPath, moduleDir); | |
| })); | |
| }, []); | |
| }; | |
| module.exports = function nodeModulesPaths(start, opts, request) { | |
| var modules = opts && opts.moduleDirectory | |
| ? [].concat(opts.moduleDirectory) | |
| : ['node_modules']; | |
| if (opts && typeof opts.paths === 'function') { | |
| return opts.paths( | |
| request, | |
| start, | |
| function () { return getNodeModulesDirs(start, modules); }, | |
| opts | |
| ); | |
| } | |
| var dirs = getNodeModulesDirs(start, modules); | |
| return opts && opts.paths ? dirs.concat(opts.paths) : dirs; | |
| }; | |