mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Merge pull request #697 from javascript-obfuscator/optiona-chaining-support
Optiona chaining support
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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!
|
||||
|
||||
|
||||
Vendored
+7
-7
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+7
-4
@@ -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",
|
||||
|
||||
@@ -10,6 +10,7 @@ export enum NodeType {
|
||||
BreakStatement = 'BreakStatement',
|
||||
CallExpression = 'CallExpression',
|
||||
CatchClause = 'CatchClause',
|
||||
ChainExpression = 'ChainExpression',
|
||||
ClassDeclaration = 'ClassDeclaration',
|
||||
ConditionalExpression = 'ConditionalExpression',
|
||||
ContinueStatement = 'ContinueStatement',
|
||||
|
||||
+7
-4
@@ -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?.();
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user