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.
		
		
		
		
		
			
		
			
				
					38 lines
				
				641 B
			
		
		
			
		
	
	
					38 lines
				
				641 B
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								const callsites = require('callsites');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = filepath => {
							 | 
						||
| 
								 | 
							
									const stacks = callsites();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (!filepath) {
							 | 
						||
| 
								 | 
							
										return stacks[2].getFileName();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									let seenVal = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Skip the first stack as it's this function
							 | 
						||
| 
								 | 
							
									stacks.shift();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for (const stack of stacks) {
							 | 
						||
| 
								 | 
							
										const parentFilepath = stack.getFileName();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (typeof parentFilepath !== 'string') {
							 | 
						||
| 
								 | 
							
											continue;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (parentFilepath === filepath) {
							 | 
						||
| 
								 | 
							
											seenVal = true;
							 | 
						||
| 
								 | 
							
											continue;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Skip native modules
							 | 
						||
| 
								 | 
							
										if (parentFilepath === 'module.js') {
							 | 
						||
| 
								 | 
							
											continue;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (seenVal && parentFilepath !== filepath) {
							 | 
						||
| 
								 | 
							
											return parentFilepath;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								};
							 |