37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const path = require('path');
 | |
| const url = require('url');
 | |
| 
 | |
| const formattedImport = async file => {
 | |
|   if (path.isAbsolute(file)) {
 | |
|     return import(url.pathToFileURL(file));
 | |
|   }
 | |
|   return import(file);
 | |
| };
 | |
| 
 | |
| exports.requireOrImport = async file => {
 | |
|   if (path.extname(file) === '.mjs') {
 | |
|     return formattedImport(file);
 | |
|   }
 | |
|   // This is currently the only known way of figuring out whether a file is CJS or ESM.
 | |
|   // If Node.js or the community establish a better procedure for that, we can fix this code.
 | |
|   // Another option here would be to always use `import()`, as this also supports CJS, but I would be
 | |
|   // wary of using it for _all_ existing test files, till ESM is fully stable.
 | |
|   try {
 | |
|     return require(file);
 | |
|   } catch (err) {
 | |
|     if (err.code === 'ERR_REQUIRE_ESM') {
 | |
|       return formattedImport(file);
 | |
|     } else {
 | |
|       throw err;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| exports.loadFilesAsync = async (files, preLoadFunc, postLoadFunc) => {
 | |
|   for (const file of files) {
 | |
|     preLoadFunc(file);
 | |
|     const result = await exports.requireOrImport(path.resolve(file));
 | |
|     postLoadFunc(file, result);
 | |
|   }
 | |
| };
 | 
