diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f2a55c8..78f4a67c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/package.json b/package.json index c7d7dc0c..666183d5 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts b/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts index 312d5ee6..20efc1d3 100644 --- a/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts +++ b/src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts @@ -102,7 +102,7 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer { objectExpressionNode: ESTree.ObjectExpression, objectExpressionHostNode: ESTree.Node, ): boolean { - const identifierNamesSet: string[] = []; + const identifierNamesSet: Set = 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 => { diff --git a/src/node-transformers/converting-transformers/object-expression-extractors/BasePropertiesExtractor.ts b/src/node-transformers/converting-transformers/object-expression-extractors/BasePropertiesExtractor.ts index 49575ddf..ee45587a 100644 --- a/src/node-transformers/converting-transformers/object-expression-extractors/BasePropertiesExtractor.ts +++ b/src/node-transformers/converting-transformers/object-expression-extractors/BasePropertiesExtractor.ts @@ -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, diff --git a/yarn.lock b/yarn.lock index 59a16797..d2fddd2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"