mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-10-31 06:08:33 +00:00 
			
		
		
		
	
		
			
	
	
		
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | var path = require('path'); | ||
|  | var parse = path.parse || require('path-parse'); | ||
|  | 
 | ||
|  | 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; | ||
|  | }; |