1*e671e832SEvan Baconexport async function tryRequireThenImport<TModule>(moduleId: string): Promise<TModule> { 2*e671e832SEvan Bacon try { 3*e671e832SEvan Bacon return require(moduleId); 4*e671e832SEvan Bacon } catch (requireError: any) { 5*e671e832SEvan Bacon let importESM; 6*e671e832SEvan Bacon try { 7*e671e832SEvan Bacon // eslint-disable-next-line no-new-func 8*e671e832SEvan Bacon importESM = new Function('id', 'return import(id);'); 9*e671e832SEvan Bacon } catch { 10*e671e832SEvan Bacon importESM = null; 11*e671e832SEvan Bacon } 12*e671e832SEvan Bacon 13*e671e832SEvan Bacon if (requireError?.code === 'ERR_REQUIRE_ESM' && importESM) { 14*e671e832SEvan Bacon return (await importESM(moduleId)).default; 15*e671e832SEvan Bacon } 16*e671e832SEvan Bacon 17*e671e832SEvan Bacon throw requireError; 18*e671e832SEvan Bacon } 19*e671e832SEvan Bacon} 20*e671e832SEvan Bacon 21*e671e832SEvan Baconexport function requireUncachedFile(moduleId: string) { 22*e671e832SEvan Bacon try { 23*e671e832SEvan Bacon // delete require.cache[require.resolve(moduleId)]; 24*e671e832SEvan Bacon } catch {} 25*e671e832SEvan Bacon try { 26*e671e832SEvan Bacon return require(moduleId); 27*e671e832SEvan Bacon } catch (error: unknown) { 28*e671e832SEvan Bacon if (error instanceof Error) { 29*e671e832SEvan Bacon error.message = `Cannot load file ${moduleId}: ${error.message}`; 30*e671e832SEvan Bacon } 31*e671e832SEvan Bacon throw error; 32*e671e832SEvan Bacon } 33*e671e832SEvan Bacon} 34