diff --git a/examples/test-test/utils/mjs.mjs b/examples/test-test/utils/mjs.mjs new file mode 100644 index 000000000000..c874d5ad9aad --- /dev/null +++ b/examples/test-test/utils/mjs.mjs @@ -0,0 +1,3 @@ +export default function mjs() { + return 'mjs' +}; diff --git a/examples/test-test/utils/mjs.test.ts b/examples/test-test/utils/mjs.test.ts new file mode 100644 index 000000000000..2fd212b31203 --- /dev/null +++ b/examples/test-test/utils/mjs.test.ts @@ -0,0 +1,5 @@ +import mjs from './mjs.mjs'; + +it('imports from mjs', () => { + expect(mjs()).toBe('mjs'); +}); diff --git a/packages/testing/src/index.ts b/packages/testing/src/index.ts index 3d2e1fd7a1fa..aab459daa631 100644 --- a/packages/testing/src/index.ts +++ b/packages/testing/src/index.ts @@ -73,6 +73,10 @@ export function createConfig(opts?: { opts?.jsTransformer || 'esbuild', opts?.jsTransformerOpts, ), + '^.+\\.mjs$': getJSTransformer( + opts?.jsTransformer || 'esbuild', + opts?.jsTransformerOpts, + ), }, moduleNameMapper: { '^.+\\.(css|less|sass|scss|stylus)$': diff --git a/packages/testing/src/transformers/esbuild/index.ts b/packages/testing/src/transformers/esbuild/index.ts index dfd22f7743e6..daed4d76694a 100644 --- a/packages/testing/src/transformers/esbuild/index.ts +++ b/packages/testing/src/transformers/esbuild/index.ts @@ -11,7 +11,9 @@ const TS_TSX_REGEX = /\.tsx?$/; const JS_JSX_REGEX = /\.jsx?$/; function isTarget(path: string) { - return JS_JSX_REGEX.test(path) || TS_TSX_REGEX.test(path); + return ( + JS_JSX_REGEX.test(path) || TS_TSX_REGEX.test(path) || path.endsWith('.mjs') + ); } const createTransformer = ( @@ -70,7 +72,7 @@ const createTransformer = ( const result = transformSync(rawCode, { ...options, ...(config.globals['jest-esbuild'] as UserOptions), - loader: userOptions.loader || (extname(path).slice(1) as Loader), + loader: userOptions.loader || ext2Loader(extname(path)), sourcefile: path, sourcesContent: false, }); @@ -100,6 +102,18 @@ const createTransformer = ( }; }; +const EXT_MAP: Record = { + '.js': 'js', + '.jsx': 'jsx', + '.ts': 'ts', + '.tsx': 'tsx', + '.mjs': 'js', +}; + +function ext2Loader(ext: string): Loader { + return EXT_MAP[ext] || 'js'; +} + export default { createTransformer, };