Merge pull request #697 from javascript-obfuscator/optiona-chaining-support

Optiona chaining support
This commit is contained in:
Timofey Kachalov
2020-08-06 12:00:57 +03:00
committed by GitHub
11 changed files with 88 additions and 42 deletions
+1
View File
@@ -2,6 +2,7 @@ Change Log
v1.10.0
---
* **Feature:** Optional chaining support!
* Improved `disableConsoleOutput` template. https://github.com/javascript-obfuscator/javascript-obfuscator/issues/691
v1.9.0
+1 -1
View File
@@ -1089,7 +1089,7 @@ Performance will slightly slower than without obfuscation
### What javascript versions are supported?
`es3`, `es5`, `es2015`, `es2016` and `es2017`
`es3`, `es5`, `es2015`, `es2016`, `es2017`, `es2018`, `es2019` and partially `es2020`
### I want to use feature that described in `README.md` but it's not working!
+7 -7
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+7 -4
View File
@@ -28,9 +28,9 @@
"chance": "1.1.6",
"class-validator": "0.12.2",
"commander": "6.0.0",
"escodegen": "1.14.3",
"escodegen": "2.0.0",
"eslint-scope": "5.1.0",
"estraverse": "5.1.0",
"estraverse": "5.2.0",
"eventemitter3": "4.0.4",
"fast-deep-equal": "3.1.3",
"inversify": "5.0.1",
@@ -43,6 +43,9 @@
"string-template": "1.0.0",
"tslib": "2.0.0"
},
"resolutions": {
"eslint-scope/esrecurse/estraverse": "5.2.0"
},
"devDependencies": {
"@types/chai": "4.2.12",
"@types/chance": "1.1.0",
@@ -65,13 +68,13 @@
"coveralls": "3.1.0",
"eslint": "7.6.0",
"eslint-plugin-import": "2.22.0",
"eslint-plugin-jsdoc": "30.2.0",
"eslint-plugin-jsdoc": "30.2.1",
"eslint-plugin-no-null": "1.0.2",
"eslint-plugin-prefer-arrow": "1.2.2",
"eslint-plugin-unicorn": "21.0.0",
"fork-ts-checker-notifier-webpack-plugin": "3.0.0",
"fork-ts-checker-webpack-plugin": "5.0.14",
"mocha": "8.1.0",
"mocha": "8.1.1",
"nyc": "15.1.0",
"pjson": "1.0.9",
"pre-commit": "1.2.2",
+1
View File
@@ -10,6 +10,7 @@ export enum NodeType {
BreakStatement = 'BreakStatement',
CallExpression = 'CallExpression',
CatchClause = 'CatchClause',
ChainExpression = 'ChainExpression',
ClassDeclaration = 'ClassDeclaration',
ConditionalExpression = 'ConditionalExpression',
ContinueStatement = 'ContinueStatement',
+7 -4
View File
@@ -7,10 +7,13 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
`
function foo () {
const {bar, baz} = {bar: 1, baz: 2};
console.log(bar, baz);
}
const foo = {
bar: {
baz: 1
}
};
console.log(foo.bar.baz);
`,
{
...NO_ADDITIONAL_NODES_PRESET,
@@ -682,6 +682,32 @@ describe('JavaScriptObfuscator', () => {
});
});
describe('Optional chaining support', () => {
const regExp: RegExp = new RegExp(
'const _0x(\\w){4,6} *= *{ *' +
'\'bar\': *\\(\\) *=> *{} *' +
'}; *' +
'_0x(\\w){4,6}\\?\\.\\[\'bar\']\\?\\.\\(\\);'
);
let obfuscatedCode: string;
beforeEach(() => {
const code: string = readFileAsString(__dirname + '/fixtures/optional-chaining-support.js');
obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET
}
).getObfuscatedCode();
});
it('should support optional chaining', () => {
assert.match(obfuscatedCode, regExp);
});
});
describe('mangled identifier names generator', () => {
const regExp: RegExp = /var c *= *0x1/;
@@ -0,0 +1,7 @@
function test() {
const foo = {
bar: () => {}
};
foo?.bar?.();
}
+29 -24
View File
@@ -1907,13 +1907,13 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escodegen@1.14.3:
version "1.14.3"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
escodegen@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
dependencies:
esprima "^4.0.1"
estraverse "^4.2.0"
estraverse "^5.2.0"
esutils "^2.0.2"
optionator "^0.8.1"
optionalDependencies:
@@ -1962,15 +1962,15 @@ eslint-plugin-import@2.22.0:
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
eslint-plugin-jsdoc@30.2.0:
version "30.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.2.0.tgz#b6407a33410112e6bc12de3486ecdbbd488735a2"
integrity sha512-gBC5Wp7vSgMBRiGtCfjCgRQ9Wzdus6Hc8WuDNetYxuJoJ5rDHQMkJzBZ0/Qdg3fFh2eIpM7EcJD0pbrYKPxKLw==
eslint-plugin-jsdoc@30.2.1:
version "30.2.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.2.1.tgz#6cac1a70ec239b4672888193d8a4e084a7e2d7bf"
integrity sha512-9Nx+BKMBoCTDRIbVpMV4MYfw+lvfnfsWTWYX9vwRRZrkXBpZkKtE3dsFcG6MhF7N/vW1cwpjEnoAIAtn0+a6gw==
dependencies:
comment-parser "^0.7.5"
debug "^4.1.1"
jsdoctypeparser "^8.0.0"
lodash "^4.17.15"
jsdoctypeparser "^9.0.0"
lodash "^4.17.19"
regextras "^0.7.1"
semver "^7.3.2"
spdx-expression-parse "^3.0.1"
@@ -2145,16 +2145,21 @@ esrecurse@^4.1.0:
dependencies:
estraverse "^4.1.0"
estraverse@5.1.0, estraverse@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
estraverse@5.2.0, estraverse@^4.1.0, estraverse@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
estraverse@^4.1.1:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
estraverse@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@@ -3208,10 +3213,10 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
jsdoctypeparser@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-8.0.0.tgz#a04a944539d3f86e30040c1ece6f6730f865f81a"
integrity sha512-eLCs6s4JqN8TjFJfgdiLHRvogLhOAJz+5RIA2FtoMe6ZDyuvghvppnlIToqAEnVbxRqLMrfnNXpW8FpmR6IMBw==
jsdoctypeparser@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26"
integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==
jsesc@^2.5.1:
version "2.5.2"
@@ -3610,10 +3615,10 @@ mkdirp@^0.5.3:
dependencies:
minimist "^1.2.5"
mocha@8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.0.tgz#e651d05dcc5e42389f3412c2173ca13352a8bacd"
integrity sha512-sI0gaI1I/jPVu3KFpnveWGadfe3JNBAENqgTUPgLZAUppu725zS2mrVztzAgIR8DUscuS4doEBTx9LATC+HSeA==
mocha@8.1.1:
version "8.1.1"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.1.tgz#1de1ba4e9a2c955d96b84e469d7540848223592d"
integrity sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==
dependencies:
ansi-colors "4.1.1"
browser-stdout "1.3.1"