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.
		
		
		
		
		
			
		
			
				
					48 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					48 lines
				
				1.1 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | const path = require('path'); | ||
|  | const Module = require('module'); | ||
|  | const fs = require('fs'); | ||
|  | 
 | ||
|  | const resolveFrom = (fromDir, moduleId, silent) => { | ||
|  | 	if (typeof fromDir !== 'string') { | ||
|  | 		throw new TypeError(`Expected \`fromDir\` to be of type \`string\`, got \`${typeof fromDir}\``); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (typeof moduleId !== 'string') { | ||
|  | 		throw new TypeError(`Expected \`moduleId\` to be of type \`string\`, got \`${typeof moduleId}\``); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	try { | ||
|  | 		fromDir = fs.realpathSync(fromDir); | ||
|  | 	} catch (err) { | ||
|  | 		if (err.code === 'ENOENT') { | ||
|  | 			fromDir = path.resolve(fromDir); | ||
|  | 		} else if (silent) { | ||
|  | 			return null; | ||
|  | 		} else { | ||
|  | 			throw err; | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	const fromFile = path.join(fromDir, 'noop.js'); | ||
|  | 
 | ||
|  | 	const resolveFileName = () => Module._resolveFilename(moduleId, { | ||
|  | 		id: fromFile, | ||
|  | 		filename: fromFile, | ||
|  | 		paths: Module._nodeModulePaths(fromDir) | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	if (silent) { | ||
|  | 		try { | ||
|  | 			return resolveFileName(); | ||
|  | 		} catch (err) { | ||
|  | 			return null; | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return resolveFileName(); | ||
|  | }; | ||
|  | 
 | ||
|  | module.exports = (fromDir, moduleId) => resolveFrom(fromDir, moduleId); | ||
|  | module.exports.silent = (fromDir, moduleId) => resolveFrom(fromDir, moduleId, true); |