diff --git a/internal/bundler_tests/snapshots/snapshots_default.txt b/internal/bundler_tests/snapshots/snapshots_default.txt index beea18c0690..107c7d30a6e 100644 --- a/internal/bundler_tests/snapshots/snapshots_default.txt +++ b/internal/bundler_tests/snapshots/snapshots_default.txt @@ -5281,14 +5281,12 @@ foo(); TestStrictModeNestedFnDeclKeepNamesVariableInliningIssue1552 ---------- /out/entry.js ---------- export function outer() { - { - let inner = function() { - return Math.random(); - }; - __name(inner, "inner"); - const x = inner(); - console.log(x); - } + let inner = function() { + return Math.random(); + }; + __name(inner, "inner"); + const x = inner(); + console.log(x); } __name(outer, "outer"), outer(); diff --git a/internal/js_parser/js_parser.go b/internal/js_parser/js_parser.go index f4942299717..14c42cfdaba 100644 --- a/internal/js_parser/js_parser.go +++ b/internal/js_parser/js_parser.go @@ -10275,6 +10275,12 @@ func (p *parser) visitAndAppendStmt(stmts []js_ast.Stmt, stmt js_ast.Stmt) []js_ } } + if p.options.minifySyntax && len(s.Fn.Body.Block.Stmts) == 1 { + if block, ok := s.Fn.Body.Block.Stmts[0].Data.(*js_ast.SBlock); ok { + s.Fn.Body.Block = *block + } + } + // Handle exporting this function from a namespace if s.IsExport && p.enclosingNamespaceArgRef != nil { s.IsExport = false @@ -11027,6 +11033,11 @@ func (p *parser) visitClass(nameScopeLoc logger.Loc, class *js_ast.Class, defaul if p.options.minifySyntax && len(property.ClassStaticBlock.Block.Stmts) == 0 { continue } + if p.options.minifySyntax && len(property.ClassStaticBlock.Block.Stmts) == 1 { + if block, ok := property.ClassStaticBlock.Block.Stmts[0].Data.(*js_ast.SBlock); ok { + property.ClassStaticBlock.Block = *block + } + } // Keep this property class.Properties[end] = *property @@ -14353,6 +14364,9 @@ func (p *parser) visitExprInOut(expr js_ast.Expr, in exprIn) (js_ast.Expr, exprO e.PreferExpr = true } } + if s, ok := e.Body.Block.Stmts[0].Data.(*js_ast.SBlock); ok { + e.Body.Block = *s + } } p.fnOnlyDataVisit.isInsideAsyncArrowFn = oldInsideAsyncArrowFn @@ -14399,6 +14413,12 @@ func (p *parser) visitExprInOut(expr js_ast.Expr, in exprIn) (js_ast.Expr, exprO } } + if p.options.minifySyntax && len(e.Fn.Body.Block.Stmts) == 1 { + if s, ok := e.Fn.Body.Block.Stmts[0].Data.(*js_ast.SBlock); ok { + e.Fn.Body.Block = *s + } + } + case *js_ast.EClass: // Check for a propagated name to keep from the parent context var nameToKeep string diff --git a/internal/js_parser/js_parser_test.go b/internal/js_parser/js_parser_test.go index c3e092dbe13..4be403274f2 100644 --- a/internal/js_parser/js_parser_test.go +++ b/internal/js_parser/js_parser_test.go @@ -3189,6 +3189,16 @@ func TestMangleBlock(t *testing.T) { expectPrintedMangle(t, "while(1) { function* x() {} }", "for (; ; ) {\n function* x() {\n }\n}\n") expectPrintedMangle(t, "while(1) { async function x() {} }", "for (; ; ) {\n async function x() {\n }\n}\n") expectPrintedMangle(t, "while(1) { async function* x() {} }", "for (; ; ) {\n async function* x() {\n }\n}\n") + + expectPrintedMangle(t, "function f() {{ let a = ''; console.log(a); console.log(a); }}", "function f() {\n let a = \"\";\n console.log(a), console.log(a);\n}\n") + expectPrintedMangle(t, "const f = () => {{ let a = ''; console.log(a); console.log(a); }}", "const f = () => {\n let a = \"\";\n console.log(a), console.log(a);\n};\n") + expectPrintedMangle(t, "const f = function() {{ let a = ''; console.log(a); console.log(a); }}", "const f = function() {\n let a = \"\";\n console.log(a), console.log(a);\n};\n") + expectPrintedMangle(t, "const obj = { m() {{ let a = ''; console.log(a); console.log(a); }} }", "const obj = { m() {\n let a = \"\";\n console.log(a), console.log(a);\n} };\n") + expectPrintedMangle(t, "class F { static {{ let a = ''; console.log(a); console.log(a); }} }", "class F {\n static {\n let a = \"\";\n console.log(a), console.log(a);\n }\n}\n") + expectPrintedMangle(t, "class F { m() {{ let a = ''; console.log(a); console.log(a); }} }", "class F {\n m() {\n let a = \"\";\n console.log(a), console.log(a);\n }\n}\n") + expectPrintedMangle(t, "function f() {if (true) { let a = ''; console.log(a); console.log(a); }}", "function f() {\n let a = \"\";\n console.log(a), console.log(a);\n}\n") + expectPrintedMangle(t, "function f() {if (true) { let a = ''; console.log(a); console.log(a); } else { console.log() }}", "function f() {\n let a = \"\";\n console.log(a), console.log(a);\n}\n") + expectPrintedMangle(t, "function f() {{ let a = ''; console.log(a); console.log(a); }; let b = '';}", "function f() {\n {\n let a = \"\";\n console.log(a), console.log(a);\n }\n let b = \"\";\n}\n") } func TestMangleSwitch(t *testing.T) {