From 10fbf8e295d6062fbaefe1b716878b95051dce2a Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 2 Apr 2021 23:00:19 +0100 Subject: [PATCH] support `mangle.properties` on `class` (#4838) --- lib/propmangle.js | 13 +++++++++---- test/compress/classes.js | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/lib/propmangle.js b/lib/propmangle.js index 254780f935..e7dc509771 100644 --- a/lib/propmangle.js +++ b/lib/propmangle.js @@ -81,7 +81,9 @@ var builtins = function() { function reserve_quoted_keys(ast, reserved) { ast.walk(new TreeWalker(function(node) { - if (node instanceof AST_ObjectProperty) { + if (node instanceof AST_ClassProperty) { + if (node.start && node.start.quote) add(node.key); + } else if (node instanceof AST_ObjectProperty) { if (node.start && node.start.quote) add(node.key); } else if (node instanceof AST_Sub) { addStrings(node.property, add); @@ -163,6 +165,8 @@ function mangle_properties(ast, options) { addStrings(node.args[0], add); break; } + } else if (node instanceof AST_ClassProperty) { + if (typeof node.key == "string") add(node.key); } else if (node instanceof AST_Dot) { add(node.property); } else if (node instanceof AST_ObjectProperty) { @@ -193,6 +197,8 @@ function mangle_properties(ast, options) { mangleStrings(node.args[0]); break; } + } else if (node instanceof AST_ClassProperty) { + if (typeof node.key == "string") node.key = mangle(node.key); } else if (node instanceof AST_Dot) { node.property = mangle(node.property); } else if (node instanceof AST_ObjectProperty) { @@ -222,9 +228,7 @@ function mangle_properties(ast, options) { } function mangle(name) { - if (!should_mangle(name)) { - return name; - } + if (!should_mangle(name)) return name; var mangled = cache.get(name); if (!mangled) { if (debug) { @@ -236,6 +240,7 @@ function mangle_properties(ast, options) { if (!mangled) do { mangled = base54(++cname); } while (!can_mangle(mangled)); + if (/^#/.test(name)) mangled = "#" + mangled; cache.set(name, mangled); } return mangled; diff --git a/test/compress/classes.js b/test/compress/classes.js index 8e7b1dc928..44bb2786af 100644 --- a/test/compress/classes.js +++ b/test/compress/classes.js @@ -1400,3 +1400,45 @@ issue_4829_2: { expect_stdout: "PASS" node_version: ">=4" } + +mangle_properties: { + mangle = { + properties: { + keep_quoted: true, + }, + } + input: { + class A { + static #P = "PASS"; + static get Q() { + return this.#P; + } + #p(n) { + return (this["q"] = n) * this.r; + } + set q(v) { + this.r = v + 1; + } + r = this.#p(6); + } + console.log(A.Q, new A().r); + } + expect: { + class A { + static #t = "PASS"; + static get s() { + return this.#t; + } + #i(t) { + return (this["q"] = t) * this.e; + } + set q(t) { + this.e = t + 1; + } + e = this.#i(6); + } + console.log(A.s, new A().e); + } + expect_stdout: "PASS 42" + node_version: ">=14.6" +}