Speedup ObjectExpressionKeysTransformer.ts (#1331)

This commit is contained in:
Timofey Kachalov
2025-11-29 21:40:32 +04:00
committed by GitHub
parent 39f7ff43e6
commit 6640907504
5 changed files with 32 additions and 20 deletions
+6
View File
@@ -1,5 +1,11 @@
Change Log
v4.1.2
---
* Fix `transformObjectKeys` performance in some edge-cases
* Update `class-validator` version. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1324
* Update other dependencies
v4.1.1
---
* Update supported Node.js versions up to `node@22`. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1100
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "javascript-obfuscator",
"version": "4.1.1",
"version": "4.1.2",
"description": "JavaScript obfuscator",
"keywords": [
"obfuscator",
@@ -27,7 +27,7 @@
"assert": "2.1.0",
"chalk": "4.1.2",
"chance": "1.1.13",
"class-validator": "0.14.2",
"class-validator": "0.14.3",
"commander": "12.1.0",
"eslint-scope": "8.4.0",
"eslint-visitor-keys": "4.2.1",
@@ -102,7 +102,7 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
objectExpressionNode: ESTree.ObjectExpression,
objectExpressionHostNode: ESTree.Node,
): boolean {
const identifierNamesSet: string[] = [];
const identifierNamesSet: Set<string> = new Set();
let isReferencedIdentifierName: boolean = false;
let isCurrentNode: boolean = false;
@@ -119,17 +119,19 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
}
if (!isCurrentNode) {
identifierNamesSet.push(ObjectExpressionKeysTransformer.getReferencedIdentifierName(node));
identifierNamesSet.add(ObjectExpressionKeysTransformer.getReferencedIdentifierName(node));
return;
}
const hasReferencedIdentifierName: boolean = identifierNamesSet.includes(
const hasReferencedIdentifierName: boolean = identifierNamesSet.has(
ObjectExpressionKeysTransformer.getReferencedIdentifierName(node)
);
if (hasReferencedIdentifierName) {
isReferencedIdentifierName = true;
return estraverse.VisitorOption.Break;
}
},
leave: (node: ESTree.Node): void | estraverse.VisitorOption => {
@@ -128,7 +128,11 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
this.filterExtractedObjectExpressionProperties(objectExpressionNode, removablePropertyIds);
NodeAppender.insertAfter(hostNodeWithStatements, expressionStatements, hostStatement);
NodeUtils.parentizeAst(hostNodeWithStatements);
// Only parentize the newly inserted statements, not the entire scope
expressionStatements.forEach((statement) => {
NodeUtils.parentizeAst(statement);
NodeUtils.parentizeNode(statement, hostNodeWithStatements);
});
return {
nodeToReplace: objectExpressionNode,
+14 -14
View File
@@ -749,10 +749,10 @@
resolved "https://registry.yarnpkg.com/@types/string-template/-/string-template-1.0.7.tgz#593fd97fd7515ae6eba80a142738daadc961c895"
integrity sha512-sQWEsTbB0pKCc1eAC9mwTKftyXuWfSZVfDTskhlQLE/xTtuevqOlFG/t4Djf/VFbRdt7PROaovoqpWfZWhMRfA==
"@types/validator@^13.11.8":
version "13.15.4"
resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.4.tgz#38a97ae54747416f745afdfc678f041713082635"
integrity sha512-LSFfpSnJJY9wbC0LQxgvfb+ynbHftFo0tMsFOl/J4wexLnYMmDSPaj2ZyDv3TkfL1UePxPrxOWJfbiRS8mQv7A==
"@types/validator@^13.15.3":
version "13.15.10"
resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.10.tgz#742b77ec34d58554b94a76a14cef30d59e3c16b9"
integrity sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==
"@types/webpack-env@1.18.8":
version "1.18.8"
@@ -1520,14 +1520,14 @@ ci-info@^4.0.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa"
integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==
class-validator@0.14.2:
version "0.14.2"
resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.2.tgz#a3de95edd26b703e89c151a2023d3c115030340d"
integrity sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==
class-validator@0.14.3:
version "0.14.3"
resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.3.tgz#834a4caafa8359aed73d7708badb4cf271be50fe"
integrity sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==
dependencies:
"@types/validator" "^13.11.8"
"@types/validator" "^13.15.3"
libphonenumber-js "^1.11.1"
validator "^13.9.0"
validator "^13.15.20"
clean-regexp@^1.0.0:
version "1.0.0"
@@ -5333,10 +5333,10 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
validator@^13.9.0:
version "13.15.20"
resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.20.tgz#054e9238109538a1bf46ae3e1290845a64fa2186"
integrity sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==
validator@^13.15.20:
version "13.15.23"
resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.23.tgz#59a874f84e4594588e3409ab1edbe64e96d0c62d"
integrity sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==
watchpack@^2.4.4:
version "2.4.4"