diff --git a/test/development/acceptance/ReactRefreshLogBox.test.ts b/test/development/acceptance/ReactRefreshLogBox.test.ts index 6cf70ac6c6247..225352b112cb4 100644 --- a/test/development/acceptance/ReactRefreshLogBox.test.ts +++ b/test/development/acceptance/ReactRefreshLogBox.test.ts @@ -180,8 +180,8 @@ describe('ReactRefreshLogBox', () => { | ^", "stack": [ "[project]/index.js [ssr] (ecmascript) index.js (3:7)", - "", - "", + "[project]/pages/index.js [ssr] (ecmascript) pages/index.js (1:1)", + "[project]/pages/index.js [ssr] (ecmascript) pages/index.js (1:1)", "", ], } diff --git a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs index 92f2c605e5363..fb502a5183f0c 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs @@ -276,6 +276,7 @@ impl AnalyzeEcmascriptModuleResultBuilder { /// If you're unsure about which function to use, use `add_reference()` pub fn add_esm_evaluation_reference(&mut self, idx: usize) { self.esm_references.insert(idx); + self.esm_local_references.insert(idx); self.esm_evaluation_references.insert(idx); } diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/index.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/index.js index 3679165968879..371cacd646dcd 100644 --- a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/index.js +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/index.js @@ -1,3 +1,20 @@ +import { + a as a0, + b as b0, + c as c0, + d as d0, + e as e0, + def as def0, +} from "package-named"; +it("should optimize named reexports from side effect free module", () => { + expect(a0).toBe("a"); + expect(b0).toBe("b"); + expect(c0).toBe("x"); + expect(d0).toBe("y"); + expect(e0).toBe("x"); + expect(def0).toBe("default"); +}); + import { a as a1, b as b1, @@ -7,8 +24,8 @@ import { local as local1, default as default1, def as def1, -} from "package-named"; -it("should optimize named reexports from side effect free module", () => { +} from "package-named-local"; +it("should optimize named reexports with locals from side effect free module", () => { expect(a1).toBe("a"); expect(b1).toBe("b"); expect(c1).toBe("x"); @@ -19,11 +36,10 @@ it("should optimize named reexports from side effect free module", () => { expect(def1).toBe("default"); }); -import { a as a2, b as b2, local as local2 } from "package-star"; +import { a as a2, b as b2 } from "package-star"; it("should optimize star reexports from side effect free module", () => { expect(a2).toBe("a"); expect(b2).toBe("b"); - expect(local2).toBe("local"); }); import { diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/a.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/a.js new file mode 100644 index 0000000000000..9233cce2f0e18 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/a.js @@ -0,0 +1 @@ +export const a = "a"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/b.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/b.js new file mode 100644 index 0000000000000..79044b663db8b --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/b.js @@ -0,0 +1,2 @@ +const myB = "b"; +export { myB as b }; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/default.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/default.js new file mode 100644 index 0000000000000..17e060e96f9f2 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/default.js @@ -0,0 +1 @@ +export default "default"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/index.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/index.js new file mode 100644 index 0000000000000..cf8203e5ada10 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/index.js @@ -0,0 +1,12 @@ +export { notCompiled } from "./not-compiled.js"; +export { notExecuted } from "./not-executed.js"; +export * from "./not-compiled.js"; +export * from "./not-executed.js"; +export { a } from "./a.js"; +export { b } from "./b.js"; +export { x as c } from "./x.js"; +export { y as d } from "./y.js"; +export { x as e } from "./y.js"; +export { default as def } from "./default.js"; +export const local = "local"; +export default "local-default"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/not-compiled.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/not-compiled.js new file mode 100644 index 0000000000000..850b713f4687f --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/not-compiled.js @@ -0,0 +1 @@ +))) diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/not-executed.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/not-executed.js new file mode 100644 index 0000000000000..d7651bb289d5d --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/not-executed.js @@ -0,0 +1 @@ +throw new Error("Module should not be executed"); diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/package.json b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/package.json new file mode 100644 index 0000000000000..a43829151e142 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/x.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/x.js new file mode 100644 index 0000000000000..985ed7b9d82e5 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/x.js @@ -0,0 +1 @@ +export const x = "x"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/y.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/y.js new file mode 100644 index 0000000000000..7e92113032c4c --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named-local/y.js @@ -0,0 +1,3 @@ +export * from "./x.js"; + +export const y = "y"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named/index.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named/index.js index b0f6fbe6d4214..2607288865a33 100644 --- a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named/index.js +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-named/index.js @@ -10,5 +10,3 @@ export { x as c } from "./x.js"; export { y as d } from "./y.js"; export { x as e } from "./y.js"; export { default as def } from "./default.js"; -export const local = "local"; -export default "local-default"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-star/index.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-star/index.js index ee0717661118d..a9932284c5cf4 100644 --- a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-star/index.js +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/basic/input/node_modules/package-star/index.js @@ -1,5 +1,4 @@ export { notCompiled } from "./not-compiled.js"; -export { notExisting } from "./not-existing.js"; export { notExecuted } from "./not-executed.js"; export * from "./not-executed.js"; export * from "./a.js"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/index.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/index.js new file mode 100644 index 0000000000000..dab6b80b1bce2 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/index.js @@ -0,0 +1,5 @@ +import getValue from "./reexport.js"; + +it("should not optimize away side effects", () => { + expect(getValue()).toBe(42); +}); diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/package.json b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/package.json new file mode 100644 index 0000000000000..ad9f3bdb826df --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/package.json @@ -0,0 +1,6 @@ +{ + "sideEffects": [ + "./index.js", + "./valueSetter.js" + ] +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/reexport.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/reexport.js new file mode 100644 index 0000000000000..43e26e14878b6 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/reexport.js @@ -0,0 +1,7 @@ +import { value } from "./valueSetter.js"; + +export { value } from "./valueSetter.js"; + +export default () => { + return value +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/valueContainer.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/valueContainer.js new file mode 100644 index 0000000000000..d31ec4e34e2b8 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/valueContainer.js @@ -0,0 +1,4 @@ +export let value = undefined; +export function setValue(newValue) { + value = newValue; +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/valueSetter.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/valueSetter.js new file mode 100644 index 0000000000000..3d64dab93fd07 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/input/valueSetter.js @@ -0,0 +1,3 @@ +import { setValue } from "./valueContainer.js"; +setValue(42); +export * from "./valueContainer.js"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/options.json b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/options.json new file mode 100644 index 0000000000000..af13697f09f93 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/side-effects-optimization/follow-keeps-side-effect/options.json @@ -0,0 +1,3 @@ +{ + "treeShakingMode": "reexports-only" +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/follow-keeps-side-effect/input/index.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/follow-keeps-side-effect/input/index.js new file mode 100644 index 0000000000000..69c69a74041e1 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/follow-keeps-side-effect/input/index.js @@ -0,0 +1 @@ +import "../../../side-effects-optimization/follow-keeps-side-effect/input/index.js"; diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/follow-keeps-side-effect/options.json b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/follow-keeps-side-effect/options.json new file mode 100644 index 0000000000000..000d78a6b3cbb --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/tree-shaking/follow-keeps-side-effect/options.json @@ -0,0 +1,3 @@ +{ + "treeShakingMode": "module-fragments" +}