diff --git a/packages/next-swc/crates/core/src/auto_cjs/mod.rs b/packages/next-swc/crates/core/src/auto_cjs/mod.rs index 316736f866279..d61a244b4c6ad 100644 --- a/packages/next-swc/crates/core/src/auto_cjs/mod.rs +++ b/packages/next-swc/crates/core/src/auto_cjs/mod.rs @@ -6,12 +6,13 @@ use turbopack_binding::swc::core::ecma::{ pub(crate) fn contains_cjs(m: &Module) -> bool { let mut v = CjsFinder::default(); m.visit_with(&mut v); - v.found + v.found && !v.is_esm } #[derive(Copy, Clone, Default)] struct CjsFinder { found: bool, + is_esm: bool, } impl CjsFinder { @@ -114,4 +115,13 @@ impl Visit for CjsFinder { n.visit_children_with(self); } + + fn visit_module_decl(&mut self, n: &ModuleDecl) { + match n { + ModuleDecl::Import(_) => {} + _ => { + self.is_esm = true; + } + } + } } diff --git a/packages/next-swc/crates/core/tests/loader/auto-cjs/2/output.js b/packages/next-swc/crates/core/tests/loader/auto-cjs/2/output.js index e5e5cec564cc6..a03bd878428a3 100644 --- a/packages/next-swc/crates/core/tests/loader/auto-cjs/2/output.js +++ b/packages/next-swc/crates/core/tests/loader/auto-cjs/2/output.js @@ -1,14 +1,4 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "default", { - enumerable: true, - get: function() { - return _default; - } -}); -var _default = 1; +export default 1; Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/packages/next-swc/crates/core/tests/loader/auto-cjs/issue-60197/input.js b/packages/next-swc/crates/core/tests/loader/auto-cjs/issue-60197/input.js new file mode 100644 index 0000000000000..1d8d9a7c32963 --- /dev/null +++ b/packages/next-swc/crates/core/tests/loader/auto-cjs/issue-60197/input.js @@ -0,0 +1,16 @@ +var module = {} + +;(function main(global, module) { + module.exports = function () {} + + module.exports.create = () => {} +})( + (function () { + return this || {} + })(), + module, + false +) + +export default module.exports +export var create = module.exports.create diff --git a/packages/next-swc/crates/core/tests/loader/auto-cjs/issue-60197/output.js b/packages/next-swc/crates/core/tests/loader/auto-cjs/issue-60197/output.js new file mode 100644 index 0000000000000..49ea853210606 --- /dev/null +++ b/packages/next-swc/crates/core/tests/loader/auto-cjs/issue-60197/output.js @@ -0,0 +1,9 @@ +var module = {}; +(function main(global, module) { + module.exports = function() {}; + module.exports.create = function() {}; +})(function() { + return this || {}; +}(), module, false); +export default module.exports; +export var create = module.exports.create;