/
githubmirror
/
jest
Обзор
Документация
Войти
/
githubmirror
/
jest
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/jest-util/src/requireOrImportModule.ts
75 строк
2 KB
Simen Bekkhus
chore: update some more deps (#16299)
07 авг 2026, 09:45
Не верифицирован
07 авг 2026, 09:45
01e18c6
Код
Авторство
О чём код?
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import {isAbsolute} from 'path'; import {pathToFileURL} from 'url'; import interopRequireDefault from './interopRequireDefault'; async function importModule( filePath: string, applyInteropRequireDefault: boolean, ) { try { const moduleUrl = pathToFileURL(filePath); // node `import()` supports URL, but TypeScript doesn't know that const importedModule = await import( /* webpackIgnore: true */ moduleUrl.href ); if (!applyInteropRequireDefault) { return importedModule; } if (!importedModule.default) { throw new Error( `Jest: Failed to load ESM at ${filePath} - did you use a default export?`, ); } return importedModule.default; } catch (error: any) { if (error.message === 'Not supported') { throw new Error( `Jest: Your version of Node does not support dynamic import - please enable it or use a .cjs file extension for file ${filePath}`, {cause: error}, ); } throw error; } } export default async function requireOrImportModule<T>( filePath: string, applyInteropRequireDefault = true, ): Promise<T> { if (!isAbsolute(filePath) && filePath[0] === '.') { throw new Error( `Jest: requireOrImportModule path must be absolute, was "${filePath}"`, ); } try { if (filePath.endsWith('.mjs') || filePath.endsWith('.mts')) { return importModule(filePath, applyInteropRequireDefault); } const requiredModule = require(filePath); if (!applyInteropRequireDefault) { return requiredModule; } return interopRequireDefault(requiredModule).default; } catch (error: any) { if ( error.code === 'ERR_REQUIRE_ESM' || error.code === 'ERR_REQUIRE_ASYNC_MODULE' ) { return importModule(filePath, applyInteropRequireDefault); } else { throw error; } } }