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