From b7c9b279bb1e47434494655745b5e4076caffcf5 Mon Sep 17 00:00:00 2001 From: Bacra Date: Wed, 14 Nov 2018 20:55:45 +0800 Subject: [PATCH 1/2] Fix lint err --- lib/esshorten.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/esshorten.js b/lib/esshorten.js index 1fb2f9f..60753ff 100644 --- a/lib/esshorten.js +++ b/lib/esshorten.js @@ -89,7 +89,7 @@ let generator = new NameGenerator(scope, options); let prefix = options.renamePrefix; - const shouldRename = options && options.shouldRename || () => true; + const shouldRename = options && options.shouldRename || (() => true); if (scope.isStatic()) { let name = '9'; From cc5e0b566f7a14ae526506161321e2bbd6b44348 Mon Sep 17 00:00:00 2001 From: Bacra Date: Thu, 15 Nov 2018 15:03:25 +0800 Subject: [PATCH 2/2] Get same result of sort between node8 and node11 --- .travis.yml | 6 ++++-- lib/esshorten.js | 9 ++++++++- test/mangle.coffee | 8 ++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1b8b5f4..03e14bf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ sudo: false language: node_js node_js: - - "5" - - "4" + - "6" + - "8" + - "10" + - "11" diff --git a/lib/esshorten.js b/lib/esshorten.js index 60753ff..63a5d71 100644 --- a/lib/esshorten.js +++ b/lib/esshorten.js @@ -93,6 +93,11 @@ if (scope.isStatic()) { let name = '9'; + let variableIndexMap = new Map(); + + scope.variables.forEach((variable, index) => { + variableIndexMap.set(variable, index); + }); scope.variables.sort((a, b) => { if (a.tainted) { @@ -101,7 +106,9 @@ if (b.tainted) { return -1; } - return (b.identifiers.length + b.references.length) - (a.identifiers.length + a.references.length); + + let diff = (b.identifiers.length + b.references.length) - (a.identifiers.length + a.references.length); + return diff === 0 ? variableIndexMap.get(a) - variableIndexMap.get(b) : diff; }); for (let variable of scope.variables) { diff --git a/test/mangle.coffee b/test/mangle.coffee index 33347c7..576a893 100644 --- a/test/mangle.coffee +++ b/test/mangle.coffee @@ -79,6 +79,14 @@ describe 'mangle:', -> expect(f.params[0].name).not.to.equal a.body.body[0].expression.name expect(a.id.name).not.to.equal a.body.body[0].expression.name + it 'sort for node11', -> + program = esprima.parse 'function f(a1, a2, a3, a4, a5) { var b1, b2, b3, b4, b5 }' + + result = esshorten.mangle program + expect(result.body[0].params[0].name).to.equal 'a' + expect(result.body[0].body.body[0].declarations[0].id.name).to.equal 'f' + + describe 'nested scope handling:', -> it 'shortens nested function names', -> program = esprima.parse 'function f() { function g() {} }'