40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var pathToFileURL = require('url').pathToFileURL;
 | |
| 
 | |
| var importESM;
 | |
| try {
 | |
|   // Node.js <10 errors out with a SyntaxError when loading a script that uses import().
 | |
|   // So a function is dynamically created to catch the SyntaxError at runtime instead of parsetime.
 | |
|   // That way we can keep supporting all Node.js versions all the way back to 0.10.
 | |
|   importESM = new Function('id', 'return import(id);');
 | |
| } catch (e) {
 | |
|   /* istanbul ignore next */
 | |
|   importESM = null;
 | |
| }
 | |
| 
 | |
| function requireOrImport(path, callback) {
 | |
|   var err = null;
 | |
|   var cjs;
 | |
|   try {
 | |
|     cjs = require(path);
 | |
|   } catch (e) {
 | |
|     /* istanbul ignore else */
 | |
|     if (pathToFileURL && importESM) {
 | |
|       // Because e.code is undefined on nyc process.
 | |
|       /* istanbul ignore else */
 | |
|       if (e.code === 'ERR_REQUIRE_ESM' || process.env.NYC_CONFIG) {
 | |
|         // This is needed on Windows, because import() fails if providing a Windows file path.
 | |
|         var url = pathToFileURL(path);
 | |
|         importESM(url).then(function(esm) { callback(null, esm); }, callback);
 | |
|         return;
 | |
|       }
 | |
|     }
 | |
|     /* istanbul ignore next */
 | |
|     err = e;
 | |
|   }
 | |
|   process.nextTick(function() { callback(err, cjs); });
 | |
| }
 | |
| 
 | |
| module.exports = requireOrImport;
 |