I've created an issue as a bug as partial ECMAScript 2019 support is declared on web site.
const { ...fields } = req.body; should be obfuscated
For now seems like many features of ECMAScript 2018 is supported except at least one when AssignmentRestProperty alone is used at the LeftHandSideExpression of destructuring assignment.
Example:
const { ...fields } = req.body;
Runing javascript-obfuscator against that string gives:
[javascript-obfuscator-cli] Error in file: playground/test.js...
Although it works well when AssignmentPropertyList is present before the rest.
This string will not cause an error:
const { foo, ...fields } = req.body;
javascript-obfuscator ./test.js --output .//Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2226
if (property.value.type !== Syntax.Identifier) {
^
TypeError: Cannot read property 'type' of undefined
at CodeGenerator.ObjectPattern (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2226:36)
at CodeGenerator.generateExpression (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2469:28)
at CodeGenerator.VariableDeclarator (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1438:26)
at CodeGenerator.generateStatement (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2482:33)
at block (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1465:38)
at CodeGenerator.VariableDeclaration (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1483:17)
at CodeGenerator.generateStatement (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:2482:33)
at /Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1075:51
at withIndent (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:576:9)
at CodeGenerator.BlockStatement (/Users/lonedone/.nvm/versions/node/v12.13.1/lib/node_modules/javascript-obfuscator/node_modules/escodegen/escodegen.js:1025:13)
const req = {
foo: 'foo_str',
bar: 'bar_str',
};
const { ...fields } = req;
console.log(fields);
This is a bug in escodegen
If you changes it to
const { foo, ...fields } = req;
it will work
I created PR with fix some time ago. Please ping this PR
https://github.com/estools/escodegen/pull/408
thx, just mailed maintainer.
Expect the release in an hour or so.
Fixed and released as 0.28.5
Most helpful comment
I created PR with fix some time ago. Please ping this PR
https://github.com/estools/escodegen/pull/408