You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					43 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					43 lines
				
				1.3 KiB
			| 
											3 years ago
										 | 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; | ||
|  | }; |