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