From 5baddb14d7d1617a7ecbca7ed7f6d03ec41fa909 Mon Sep 17 00:00:00 2001 From: hardfist Date: Thu, 21 May 2026 20:55:04 +0800 Subject: [PATCH 1/2] Revert "fix(es/minifier): respect ecma for iife temp vars (#11873)" This reverts commit e481934a63c0ee891e4a770c4f0cd5ec3fd8624e. --- .changeset/respect-ecma-iife-temp-vars.md | 7 ------- crates/swc/tests/fixture/issues-5xxx/5865/output/index.js | 2 +- crates/swc/tests/fixture/issues-8xxx/8246/output/input.js | 8 ++++---- crates/swc_ecma_minifier/src/compress/optimize/iife.rs | 6 +----- crates/swc_ecma_minifier/tests/benches-full/terser.js | 6 +++--- .../tests/fixture/issues/ecma5-iife-temp-var/config.json | 5 ----- .../tests/fixture/issues/ecma5-iife-temp-var/input.js | 5 ----- .../tests/fixture/issues/ecma5-iife-temp-var/output.js | 5 ----- .../fixture/issues/react-instancesearch/002/output.js | 2 +- .../fixture/issues/react-instancesearch/003/output.js | 2 +- .../swc_ecma_minifier/tests/fixture/next/47005/output.js | 3 ++- crates/swc_ecma_minifier/tests/libs-size.snapshot.md | 2 +- 12 files changed, 14 insertions(+), 39 deletions(-) delete mode 100644 .changeset/respect-ecma-iife-temp-vars.md delete mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/config.json delete mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/input.js delete mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/output.js diff --git a/.changeset/respect-ecma-iife-temp-vars.md b/.changeset/respect-ecma-iife-temp-vars.md deleted file mode 100644 index 0193cb5e8a22..000000000000 --- a/.changeset/respect-ecma-iife-temp-vars.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -swc: patch -swc_core: patch -swc_ecma_minifier: patch ---- - -fix(es/minifier): respect ecma when emitting IIFE temp vars diff --git a/crates/swc/tests/fixture/issues-5xxx/5865/output/index.js b/crates/swc/tests/fixture/issues-5xxx/5865/output/index.js index e9a402e4eac1..28697d497a5e 100644 --- a/crates/swc/tests/fixture/issues-5xxx/5865/output/index.js +++ b/crates/swc/tests/fixture/issues-5xxx/5865/output/index.js @@ -1 +1 @@ -var a;v=(a=r,b=>a.map(t=>{if(t)return t.foo})); +let a;v=(a=r,b=>a.map(t=>{if(t)return t.foo})); diff --git a/crates/swc/tests/fixture/issues-8xxx/8246/output/input.js b/crates/swc/tests/fixture/issues-8xxx/8246/output/input.js index 455b995972c6..23c747448002 100644 --- a/crates/swc/tests/fixture/issues-8xxx/8246/output/input.js +++ b/crates/swc/tests/fixture/issues-8xxx/8246/output/input.js @@ -1,9 +1,9 @@ function withLog(t) { let e = {}; - for(let n in t){ - var o; - e[n] = (o = n, function() { - return console.log(o + ' invoked'), t[o].apply(this, arguments); + for(let o in t){ + let n; + e[o] = (n = o, function() { + return console.log(n + ' invoked'), t[n].apply(this, arguments); }); } return e; diff --git a/crates/swc_ecma_minifier/src/compress/optimize/iife.rs b/crates/swc_ecma_minifier/src/compress/optimize/iife.rs index 9af3cf2d7c43..91ecb4de7f56 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/iife.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/iife.rs @@ -686,11 +686,7 @@ impl Optimizer<'_> { self.prepend_stmts.push( VarDecl { span: DUMMY_SP, - kind: if self.options.ecma >= EsVersion::Es2015 { - VarDeclKind::Let - } else { - VarDeclKind::Var - }, + kind: VarDeclKind::Let, declare: Default::default(), decls: vars, ..Default::default() diff --git a/crates/swc_ecma_minifier/tests/benches-full/terser.js b/crates/swc_ecma_minifier/tests/benches-full/terser.js index 8bcd44a44ebb..94dce79447b0 100644 --- a/crates/swc_ecma_minifier/tests/benches-full/terser.js +++ b/crates/swc_ecma_minifier/tests/benches-full/terser.js @@ -7449,8 +7449,7 @@ def_eval(AST_BigInt, function() { return supports_bigint ? BigInt(this.value) : this; }), def_eval(AST_RegExp, function(compressor) { - var source; - let evaluated = compressor.evaluated_regexps.get(this.value); + let source, evaluated = compressor.evaluated_regexps.get(this.value); if (void 0 === evaluated && (source = this.value.source, re_safe_regexp.test(source))) { try { let { source, flags } = this.value; @@ -10109,7 +10108,8 @@ }).optimize(compressor); break; case "RegExp": - var source, params = []; + let source; + var params = []; if (self1.args.length >= 1 && self1.args.length <= 2 && self1.args.every((arg)=>{ var value = arg.evaluate(compressor); return params.push(value), arg !== value; diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/config.json b/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/config.json deleted file mode 100644 index 7d75db8c7bdc..000000000000 --- a/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "defaults": true, - "ecma": 5, - "toplevel": false -} diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/input.js deleted file mode 100644 index 2243a5bef831..000000000000 --- a/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/input.js +++ /dev/null @@ -1,5 +0,0 @@ -function run() { - return ((value) => value + value)(Math.random()); -} - -console.log(run()); diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/output.js deleted file mode 100644 index 01747dc3a77d..000000000000 --- a/crates/swc_ecma_minifier/tests/fixture/issues/ecma5-iife-temp-var/output.js +++ /dev/null @@ -1,5 +0,0 @@ -function run() { - var value; - return (value = Math.random()) + value; -} -console.log(run()); diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/002/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/002/output.js index 8d2799c5adb4..fa9915ad91d0 100644 --- a/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/002/output.js +++ b/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/002/output.js @@ -67,7 +67,7 @@ let isMultiIndexContext = (widget)=>hasMultipleIndices({ return { ...request, params: Object.keys(parameters = request.params).map((key)=>{ - var value; + let value; return ((format, ...args)=>{ let i = 0; return format.replace(/%s/g, ()=>encodeURIComponent(args[i++])); diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/003/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/003/output.js index f460dfa89b2f..0a91a5917ce9 100644 --- a/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/003/output.js +++ b/crates/swc_ecma_minifier/tests/fixture/issues/react-instancesearch/003/output.js @@ -83,7 +83,7 @@ let isMultiIndexContext = (widget)=>hasMultipleIndices({ return { ...request, params: Object.keys(parameters = request.params).map((key)=>{ - var value; + let value; return ((format, ...args)=>{ let i = 0; return format.replace(/%s/g, ()=>encodeURIComponent(args[i++])); diff --git a/crates/swc_ecma_minifier/tests/fixture/next/47005/output.js b/crates/swc_ecma_minifier/tests/fixture/next/47005/output.js index 5aedc24a0b7a..f7ce1b3180bc 100644 --- a/crates/swc_ecma_minifier/tests/fixture/next/47005/output.js +++ b/crates/swc_ecma_minifier/tests/fixture/next/47005/output.js @@ -5,12 +5,13 @@ { /***/ 9145: /***/ function(m, S, h) { "use strict"; + let E, k; /* harmony export */ h.d(S, { /* harmony export */ u: function() { return /* binding */ ei; } }); - /* unused harmony exports TooltipProvider, TooltipWrapper */ /* harmony import */ var E, k, R, A = h(7294); + /* unused harmony exports TooltipProvider, TooltipWrapper */ /* harmony import */ var R, A = h(7294); /* harmony import */ var O = h(5893); var L = Object.create; var j = Object.defineProperty; diff --git a/crates/swc_ecma_minifier/tests/libs-size.snapshot.md b/crates/swc_ecma_minifier/tests/libs-size.snapshot.md index f204956e5ddf..e3246f132a13 100644 --- a/crates/swc_ecma_minifier/tests/libs-size.snapshot.md +++ b/crates/swc_ecma_minifier/tests/libs-size.snapshot.md @@ -7,7 +7,7 @@ | lodash.js | 531.35 KiB | 68.92 KiB | 24.60 KiB | | moment.js | 169.83 KiB | 57.34 KiB | 18.25 KiB | | react.js | 70.45 KiB | 22.45 KiB | 8.04 KiB | -| terser.js | 1.08 MiB | 446.63 KiB | 120.50 KiB | +| terser.js | 1.08 MiB | 446.63 KiB | 120.49 KiB | | three.js | 1.19 MiB | 630.55 KiB | 154.77 KiB | | typescript.js | 10.45 MiB | 3.17 MiB | 840.61 KiB | | victory.js | 2.30 MiB | 694.04 KiB | 154.18 KiB | From 4408e2edc46bbe5c307e33fd63532e506bc6e72f Mon Sep 17 00:00:00 2001 From: DongYun Kang Date: Fri, 22 May 2026 01:46:19 +0900 Subject: [PATCH 2/2] chore: add changeset for minifier revert --- .changeset/revert-iife-temp-var-ecma.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/revert-iife-temp-var-ecma.md diff --git a/.changeset/revert-iife-temp-var-ecma.md b/.changeset/revert-iife-temp-var-ecma.md new file mode 100644 index 000000000000..5a11bf456631 --- /dev/null +++ b/.changeset/revert-iife-temp-var-ecma.md @@ -0,0 +1,7 @@ +--- +swc: patch +swc_core: patch +swc_ecma_minifier: patch +--- + +fix(es/minifier): revert ecma-dependent IIFE temp var declarations