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