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