Jelajahi Sumber

Slightly changed regexps of variable kinds

sanex3339 5 tahun lalu
induk
melakukan
178adcbfaa
26 mengubah file dengan 269 tambahan dan 269 penghapusan
  1. 7 7
      test/functional-tests/cli/JavaScriptObfuscatorCLI.spec.ts
  2. 11 11
      test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts
  3. 16 16
      test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts
  4. 3 3
      test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts
  5. 4 4
      test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts
  6. 5 5
      test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts
  7. 2 2
      test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts
  8. 10 10
      test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts
  9. 6 6
      test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts
  10. 2 2
      test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts
  11. 59 59
      test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts
  12. 13 13
      test/functional-tests/node-transformers/converting-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts
  13. 9 9
      test/functional-tests/node-transformers/converting-transformers/split-string-transformer/SplitStringTransformer.spec.ts
  14. 7 7
      test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts
  15. 15 15
      test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts
  16. 19 19
      test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts
  17. 2 2
      test/functional-tests/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.spec.ts
  18. 1 1
      test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts
  19. 2 2
      test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function-declaration/FunctionDeclaration.spec.ts
  20. 2 2
      test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function/Function.spec.ts
  21. 18 18
      test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/variable-declaration/VariableDeclaration.spec.ts
  22. 4 4
      test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts
  23. 3 3
      test/functional-tests/node-transformers/preparing-transformers/eval-call-expression-transformer/EvalCallExpressionTransformer.spec.ts
  24. 1 1
      test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts
  25. 14 14
      test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts
  26. 34 34
      test/functional-tests/storages/string-array-storage/StringArrayStorage.spec.ts

+ 7 - 7
test/functional-tests/cli/JavaScriptObfuscatorCLI.spec.ts

@@ -185,8 +185,8 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                 const outputFileName2: string = 'bar-obfuscated.js';
                 const outputFileName3: string = 'baz-obfuscated.js';
                 const readFileEncoding: string = 'utf8';
-                const regExp1: RegExp = /^var *a1_0x(\w){4,6} *= *0x1;$/;
-                const regExp2: RegExp = /^var *a0_0x(\w){4,6} *= *0x2;$/;
+                const regExp1: RegExp = /^var a1_0x(\w){4,6} *= *0x1;$/;
+                const regExp2: RegExp = /^var a0_0x(\w){4,6} *= *0x2;$/;
 
                 let outputFixturesFilePath1: string,
                     outputFixturesFilePath2: string,
@@ -250,8 +250,8 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                 const outputFileName1: string = 'foo-obfuscated.js';
                 const outputFileName2: string = 'bar-obfuscated.js';
                 const readFileEncoding: string = 'utf8';
-                const regExp1: RegExp = /^var *foo1_0x(\w){4,6} *= *0x1;$/;
-                const regExp2: RegExp = /^var *foo0_0x(\w){4,6} *= *0x2;$/;
+                const regExp1: RegExp = /^var foo1_0x(\w){4,6} *= *0x1;$/;
+                const regExp2: RegExp = /^var foo0_0x(\w){4,6} *= *0x2;$/;
 
                 let outputFixturesFilePath1: string,
                     outputFixturesFilePath2: string,
@@ -372,8 +372,8 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     const outputFileName2: string = 'bar-obfuscated.js';
                     const outputFileName3: string = 'baz-obfuscated.js';
                     const readFileEncoding: string = 'utf8';
-                    const regExp1: RegExp = /^var *a1_0x(\w){4,6} *= *0x1;$/;
-                    const regExp2: RegExp = /^var *a0_0x(\w){4,6} *= *0x2;$/;
+                    const regExp1: RegExp = /^var a1_0x(\w){4,6} *= *0x1;$/;
+                    const regExp2: RegExp = /^var a0_0x(\w){4,6} *= *0x2;$/;
 
                     let outputFixturesFilePath1: string,
                         outputFixturesFilePath2: string,
@@ -439,7 +439,7 @@ describe('JavaScriptObfuscatorCLI', function (): void {
                     const outputFileName2: string = 'bar-obfuscated.js';
                     const outputFileName3: string = 'baz-obfuscated.js';
                     const readFileEncoding: string = 'utf8';
-                    const regExp1: RegExp = /^var *a0_0x(\w){4,6} *= *0x2;$/;
+                    const regExp1: RegExp = /^var a0_0x(\w){4,6} *= *0x2;$/;
 
                     let outputFixturesFilePath1: string,
                         outputFixturesFilePath2: string,

+ 11 - 11
test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts

@@ -188,7 +188,7 @@ describe('JavaScriptObfuscator', () => {
 
         describe('variable inside global scope', () => {
             describe('Variant #1: without `renameGlobals` option', () => {
-                const regExp: RegExp = /^var *test *= *0x\d+;$/;
+                const regExp: RegExp = /^var test *= *0x\d+;$/;
 
                 let obfuscatedCode: string;
 
@@ -209,7 +209,7 @@ describe('JavaScriptObfuscator', () => {
             });
 
             describe('Variant #2: with `renameGlobals` option', () => {
-                const regExp: RegExp = /^var *_0x(\w){4,6} *= *0x\d+;$/;
+                const regExp: RegExp = /^var _0x(\w){4,6} *= *0x\d+;$/;
 
                 let obfuscatedCode: string;
 
@@ -231,7 +231,7 @@ describe('JavaScriptObfuscator', () => {
             });
 
             describe('Variant #3: with `renameGlobals` and `identifiersPrefix` options', () => {
-                const regExp: RegExp = /^var *foo_0x(\w){4,6} *= *0x\d+;$/;
+                const regExp: RegExp = /^var foo_0x(\w){4,6} *= *0x\d+;$/;
 
                 let obfuscatedCode: string;
 
@@ -255,7 +255,7 @@ describe('JavaScriptObfuscator', () => {
 
             describe('Variant #4: with `stringArray`, `renameGlobals` and `identifiersPrefix` options', () => {
                 const stringArrayRegExp: RegExp = /^var foo_0x(\w){4} *= *\['abc'\];/;
-                const stringArrayCallRegExp: RegExp = /var *foo_0x(\w){4,6} *= *foo_0x(\w){4}\('0x0'\);$/;
+                const stringArrayCallRegExp: RegExp = /var foo_0x(\w){4,6} *= *foo_0x(\w){4}\('0x0'\);$/;
 
                 let obfuscatedCode: string;
 
@@ -285,7 +285,7 @@ describe('JavaScriptObfuscator', () => {
         });
 
         describe('variable inside block scope', () => {
-            const regExp: RegExp = /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/;
+            const regExp: RegExp = /^\(function *\(\) *\{ *var _0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/;
 
             let obfuscatedCode: string;
 
@@ -347,7 +347,7 @@ describe('JavaScriptObfuscator', () => {
 
         describe('latin literal variable value', () => {
             const stringArrayLatinRegExp: RegExp = /^var _0x(\w){4} *= *\['abc'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *_0x(\w){4}\('0x0'\);$/;
+            const stringArrayCallRegExp: RegExp = /var test *= *_0x(\w){4}\('0x0'\);$/;
 
             let obfuscatedCode: string;
 
@@ -375,7 +375,7 @@ describe('JavaScriptObfuscator', () => {
 
         describe('cyrillic literal variable value', () => {
             const stringArrayCyrillicRegExp: RegExp = /^var _0x(\w){4} *= *\['абц'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *_0x(\w){4}\('0x0'\);$/;
+            const stringArrayCallRegExp: RegExp = /var test *= *_0x(\w){4}\('0x0'\);$/;
 
             let obfuscatedCode: string;
 
@@ -573,7 +573,7 @@ describe('JavaScriptObfuscator', () => {
         });
 
         describe('mangled identifier names generator', () => {
-            const regExp: RegExp = /var *c *= *0x1/;
+            const regExp: RegExp = /var c *= *0x1/;
 
             let obfuscatedCode: string;
 
@@ -594,7 +594,7 @@ describe('JavaScriptObfuscator', () => {
         });
 
         describe('dictionary identifier names generator', () => {
-            const regExp: RegExp = /var *[abc] *= *0x1; *var *[ABC] *= *0x2; *var *[ABC] *= *0x3;/;
+            const regExp: RegExp = /var [abc] *= *0x1; *var [ABC] *= *0x2; *var [ABC] *= *0x3;/;
 
             let obfuscatedCode: string;
 
@@ -619,7 +619,7 @@ describe('JavaScriptObfuscator', () => {
         describe('parse module', () => {
             describe('Variant #1: import', () => {
                 const importRegExp: RegExp = /import *{foo} *from *'.\/foo';/;
-                const variableDeclarationRegExp: RegExp = /var *test *= *0x1/;
+                const variableDeclarationRegExp: RegExp = /var test *= *0x1/;
 
                 let obfuscatedCode: string;
 
@@ -639,7 +639,7 @@ describe('JavaScriptObfuscator', () => {
             });
 
             describe('Variant #2: export', () => {
-                const regExp: RegExp = /export *const *foo *= *0x1;/;
+                const regExp: RegExp = /export *const foo *= *0x1;/;
 
                 let obfuscatedCode: string;
 

+ 16 - 16
test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts

@@ -84,9 +84,9 @@ describe('BlockStatementControlFlowTransformer', function () {
             });
 
             describe('switch-case map', () => {
-                const switchCaseMapVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/;
-                const switchCaseMapIndexVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *0x0;/;
-                const switchCaseMapStringRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
+                const switchCaseMapVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/;
+                const switchCaseMapIndexVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *0x0;/;
+                const switchCaseMapStringRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
                 const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4'];
 
                 let switchCaseMap: string[];
@@ -177,8 +177,8 @@ describe('BlockStatementControlFlowTransformer', function () {
             });
 
             describe('switch-case map', () => {
-                const switchCaseMapVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/;
-                const switchCaseMapStringRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
+                const switchCaseMapVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/;
+                const switchCaseMapStringRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
                 const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4'];
 
                 let switchCaseMap: string[];
@@ -223,7 +223,7 @@ describe('BlockStatementControlFlowTransformer', function () {
         });
 
         describe('Variant #4: block statement contain variable declaration with `const` kind', () => {
-            const statementRegExp: RegExp = /^\(function *\( *\) *\{ *const *_0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/;
+            const statementRegExp: RegExp = /^\(function *\( *\) *\{ *const _0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/;
 
             let obfuscatedCode: string;
 
@@ -246,7 +246,7 @@ describe('BlockStatementControlFlowTransformer', function () {
         });
 
         describe('Variant #5: block statement contain variable declaration with `let` kind', () => {
-            const statementRegExp: RegExp = /^\(function *\( *\) *\{ *let *_0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/;
+            const statementRegExp: RegExp = /^\(function *\( *\) *\{ *let _0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/;
 
             let obfuscatedCode: string;
 
@@ -674,9 +674,9 @@ describe('BlockStatementControlFlowTransformer', function () {
                 });
 
                 describe('switch-case map', () => {
-                    const switchCaseMapVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/;
-                    const switchCaseMapIndexVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *0x0;/;
-                    const switchCaseMapStringRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
+                    const switchCaseMapVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/;
+                    const switchCaseMapIndexVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *0x0;/;
+                    const switchCaseMapStringRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
                     const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4'];
 
                     let switchCaseMap: string[];
@@ -718,9 +718,9 @@ describe('BlockStatementControlFlowTransformer', function () {
                 });
 
                 describe('switch-case map', () => {
-                    const switchCaseMapVariableRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/;
-                    const switchCaseMapIndexVariableRegExp: RegExp = /let *_0x(?:[a-f0-9]){4,6} *= *0x0;/;
-                    const switchCaseMapStringRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
+                    const switchCaseMapVariableRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/;
+                    const switchCaseMapIndexVariableRegExp: RegExp = /let _0x(?:[a-f0-9]){4,6} *= *0x0;/;
+                    const switchCaseMapStringRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
                     const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4'];
 
                     let switchCaseMap: string[];
@@ -762,9 +762,9 @@ describe('BlockStatementControlFlowTransformer', function () {
                 });
 
                 describe('switch-case map', () => {
-                    const switchCaseMapVariableRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/;
-                    const switchCaseMapIndexVariableRegExp: RegExp = /let *_0x(?:[a-f0-9]){4,6} *= *0x0;/;
-                    const switchCaseMapStringRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
+                    const switchCaseMapVariableRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/;
+                    const switchCaseMapIndexVariableRegExp: RegExp = /let _0x(?:[a-f0-9]){4,6} *= *0x0;/;
+                    const switchCaseMapStringRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/;
                     const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4'];
 
                     let switchCaseMap: string[];

+ 3 - 3
test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts

@@ -11,7 +11,7 @@ describe('BinaryExpressionControlFlowReplacer', function () {
 
     describe('replace', () => {
         describe('Variant #1 - single binary expression', () => {
-            const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(0x1, *0x2\);/;
+            const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(0x1, *0x2\);/;
 
             let obfuscatedCode: string;
 
@@ -40,8 +40,8 @@ describe('BinaryExpressionControlFlowReplacer', function () {
             const samplesCount: number = 1000;
             const delta: number = 0.1;
 
-            const controlFlowStorageCallRegExp1: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x1, *0x2\);/;
-            const controlFlowStorageCallRegExp2: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x2, *0x3\);/;
+            const controlFlowStorageCallRegExp1: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x1, *0x2\);/;
+            const controlFlowStorageCallRegExp2: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x2, *0x3\);/;
 
             let matchErrorsCount: number = 0,
                 usingExistingIdentifierChance: number;

+ 4 - 4
test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts

@@ -11,7 +11,7 @@ describe('CallExpressionControlFlowReplacer', function () {
 
     describe('replace', () => {
         describe('Variant #1 - single call expression', () => {
-            const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/;
+            const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/;
 
             let obfuscatedCode: string;
 
@@ -40,8 +40,8 @@ describe('CallExpressionControlFlowReplacer', function () {
             const samplesCount: number = 1000;
             const delta: number = 0.1;
 
-            const controlFlowStorageCallRegExp1: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/;
-            const controlFlowStorageCallRegExp2: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x2, *0x3\);/;
+            const controlFlowStorageCallRegExp1: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/;
+            const controlFlowStorageCallRegExp2: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x2, *0x3\);/;
 
             let matchErrorsCount: number = 0,
                 usingExistingIdentifierChance: number;
@@ -96,7 +96,7 @@ describe('CallExpressionControlFlowReplacer', function () {
         });
 
         describe('Variant #3 - call expression callee is member expression node', () => {
-            const regExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['sum'\]\(0x1, *0x2\);/;
+            const regExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['sum'\]\(0x1, *0x2\);/;
 
             let obfuscatedCode: string;
 

+ 5 - 5
test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts

@@ -11,7 +11,7 @@ describe('LogicalExpressionControlFlowReplacer', function () {
 
     describe('replace', () => {
         describe('Variant #1 - single logical expression', () => {
-            const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!!\[\], *!\[\]\);/;
+            const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!!\[\], *!\[\]\);/;
 
             let obfuscatedCode: string;
 
@@ -40,8 +40,8 @@ describe('LogicalExpressionControlFlowReplacer', function () {
             const samplesCount: number = 1000;
             const delta: number = 0.1;
 
-            const controlFlowStorageCallRegExp1: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!!\[\], *!\[\]\);/;
-            const controlFlowStorageCallRegExp2: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!\[\], *!!\[\]\);/;
+            const controlFlowStorageCallRegExp1: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!!\[\], *!\[\]\);/;
+            const controlFlowStorageCallRegExp2: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!\[\], *!!\[\]\);/;
 
             let matchErrorsCount: number = 0,
                 usingExistingIdentifierChance: number;
@@ -96,7 +96,7 @@ describe('LogicalExpressionControlFlowReplacer', function () {
         });
 
         describe('Variant #3 - single logical expression with unary expression', () => {
-            const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!_0x([a-f0-9]){4,6}, *!_0x([a-f0-9]){4,6}\);/;
+            const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!_0x([a-f0-9]){4,6}, *!_0x([a-f0-9]){4,6}\);/;
 
             let obfuscatedCode: string;
 
@@ -119,7 +119,7 @@ describe('LogicalExpressionControlFlowReplacer', function () {
         });
 
         describe('prohibited nodes Variant #1', () => {
-            const regExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\[_0x([a-f0-9]){4,6}\] *&& *!\[\];/;
+            const regExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\[_0x([a-f0-9]){4,6}\] *&& *!\[\];/;
 
             let obfuscatedCode: string;
 

+ 2 - 2
test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts

@@ -8,8 +8,8 @@ import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscator
 
 describe('StringLiteralControlFlowReplacer', () => {
     describe('replace', () => {
-        const controlFlowStorageStringLiteralRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *\{'\w{5}' *: *'test'\};/;
-        const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\];/;
+        const controlFlowStorageStringLiteralRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *\{'\w{5}' *: *'test'\};/;
+        const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\];/;
 
         let obfuscatedCode: string;
 

+ 10 - 10
test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts

@@ -11,14 +11,14 @@ describe('FunctionControlFlowTransformer', function () {
 
     const variableMatch: string = '_0x([a-f0-9]){4,6}';
     const rootControlFlowStorageNodeMatch: string = `` +
-        `var *${variableMatch} *= *\\{` +
+        `var ${variableMatch} *= *\\{` +
             `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` +
                 `return *${variableMatch} *\\+ *${variableMatch};` +
             `\\}` +
         `\\};` +
     ``;
     const innerControlFlowStorageNodeMatch: string = `` +
-        `var *${variableMatch} *= *\\{` +
+        `var ${variableMatch} *= *\\{` +
             `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` +
                 `return *${variableMatch}\\['\\w{5}'\\]\\(${variableMatch}, *${variableMatch}\\);` +
             `\\}` +
@@ -101,7 +101,7 @@ describe('FunctionControlFlowTransformer', function () {
 
         describe('Variant #3 - single `control flow storage` node with multiple items', () => {
             const regexp: RegExp = new RegExp(
-                `var *${variableMatch} *= *\\{` +
+                `var ${variableMatch} *= *\\{` +
                     `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` +
                         `return *${variableMatch} *\\+ *${variableMatch};` +
                     `\\}, *` +
@@ -132,7 +132,7 @@ describe('FunctionControlFlowTransformer', function () {
         });
 
         describe('Variant #4 - transformed node in the root block scope', () => {
-            const regExp: RegExp = /^var *test *= *0x1 *\+ *0x2;$/;
+            const regExp: RegExp = /^var test *= *0x1 *\+ *0x2;$/;
 
             let obfuscatedCode: string;
 
@@ -159,7 +159,7 @@ describe('FunctionControlFlowTransformer', function () {
             const samplesCount: number = 20;
 
             const regExp: RegExp = new RegExp(
-                `var *[a-zA-Z]{6} *= *\\{` +
+                `var [a-zA-Z]{6} *= *\\{` +
                     `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` +
                         `return *${variableMatch} *\\+ *${variableMatch};` +
                     `\\}` +
@@ -194,7 +194,7 @@ describe('FunctionControlFlowTransformer', function () {
         });
 
         describe('Variant #6 - threshold is `0`', () => {
-            const regexp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x1 *\+ *0x2;/;
+            const regexp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1 *\+ *0x2;/;
             const controlFlowStorageRegExp: RegExp = new RegExp(rootControlFlowStorageNodeMatch);
 
             let obfuscatedCode: string;
@@ -246,7 +246,7 @@ describe('FunctionControlFlowTransformer', function () {
             });
 
             describe('Variant #2 - arrow function expression without body', () => {
-                const regexp: RegExp = new RegExp(`var *${variableMatch} *= *\\(\\) *=> *0x1 *\\+ *0x2;`);
+                const regexp: RegExp = new RegExp(`var ${variableMatch} *= *\\(\\) *=> *0x1 *\\+ *0x2;`);
 
                 let obfuscatedCode: string;
 
@@ -271,7 +271,7 @@ describe('FunctionControlFlowTransformer', function () {
 
         describe('prevailing kind of variables', () => {
             describe('Variant #1 - `var` kind', () => {
-                const regexp: RegExp = new RegExp(`var *${variableMatch} *= *\\{`);
+                const regexp: RegExp = new RegExp(`var ${variableMatch} *= *\\{`);
 
                 let obfuscatedCode: string;
 
@@ -294,7 +294,7 @@ describe('FunctionControlFlowTransformer', function () {
             });
 
             describe('Variant #2 - `const` kind', () => {
-                const regexp: RegExp = new RegExp(`const *${variableMatch} *= *\\{`);
+                const regexp: RegExp = new RegExp(`const ${variableMatch} *= *\\{`);
 
                 let obfuscatedCode: string;
 
@@ -317,7 +317,7 @@ describe('FunctionControlFlowTransformer', function () {
             });
 
             describe('Variant #3 - `let` kind', () => {
-                const regexp: RegExp = new RegExp(`const *${variableMatch} *= *\\{`);
+                const regexp: RegExp = new RegExp(`const ${variableMatch} *= *\\{`);
 
                 let obfuscatedCode: string;
 

+ 6 - 6
test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts

@@ -9,7 +9,7 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac
 describe('MemberExpressionTransformer', () => {
     describe('transformation of member expression node with dot notation', () => {
         describe('`stringArray` option is disabled', () => {
-            const regExp: RegExp = /var *test *= *console\['log'\];/;
+            const regExp: RegExp = /var test *= *console\['log'\];/;
 
             let obfuscatedCode: string;
 
@@ -30,8 +30,8 @@ describe('MemberExpressionTransformer', () => {
         });
 
         describe('`stringArray` option is enabled', () => {
-            const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['log'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/;
+            const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['log'\];/;
+            const stringArrayCallRegExp: RegExp = /var test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/;
 
             let obfuscatedCode: string;
 
@@ -60,8 +60,8 @@ describe('MemberExpressionTransformer', () => {
 
     describe('transformation of member expression node with square brackets', () => {
         describe('Variant #1: square brackets literal ', () => {
-            const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['log'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/;
+            const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['log'\];/;
+            const stringArrayCallRegExp: RegExp = /var test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/;
 
             let obfuscatedCode: string;
 
@@ -88,7 +88,7 @@ describe('MemberExpressionTransformer', () => {
         });
 
         describe('Variant #2: square brackets identifier', () => {
-            const regExp: RegExp = /var *test *= *console\[identifier\];/;
+            const regExp: RegExp = /var test *= *console\[identifier\];/;
 
             let obfuscatedCode: string;
 

+ 2 - 2
test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts

@@ -30,7 +30,7 @@ describe('MethodDefinitionTransformer', () => {
         });
 
         describe('Variant #2: `stringArray` option is enabled', () => {
-            const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['bar'\];/;
+            const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['bar'\];/;
             const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\('0x0'\)\]\(\)\{\}/;
 
             let obfuscatedCode: string;
@@ -102,7 +102,7 @@ describe('MethodDefinitionTransformer', () => {
         });
 
         describe('Variant #2: `stringArray` option is enabled', () => {
-            const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['constructor', *'bar'];/;
+            const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['constructor', *'bar'];/;
             const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\('0x1'\)\]\(\)\{\}/;
 
             let obfuscatedCode: string;

+ 59 - 59
test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts

@@ -12,7 +12,7 @@ describe('ObjectExpressionKeysTransformer', () => {
     describe('transformation of object keys', () => {
         describe('Variant #1: simple', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
             ``;
@@ -68,7 +68,7 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #3: return statement', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
                 `return *${variableMatch};` +
@@ -96,10 +96,10 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #4: object expression inside array expression', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
-                `var *${variableMatch} *= *\\[${variableMatch}];` +
+                `var ${variableMatch} *= *\\[${variableMatch}];` +
             ``;
             const regExp: RegExp = new RegExp(match);
 
@@ -124,7 +124,7 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #5: object expression inside call expression', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
                 `console\\['log']\\(${variableMatch}\\);` +
@@ -152,11 +152,11 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #6: nested objects #1', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['inner1'] *= *${variableMatch};` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['inner'] *= *${variableMatch};` +
                 `var object *= *${variableMatch};` +
@@ -184,17 +184,17 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #7: nested objects #2', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['hawk'] *= *'geek';` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
                 `${variableMatch}\\['inner1'] *= *${variableMatch};` +
                 `${variableMatch}\\['cow'] *= *'bear';` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['inner'] *= *${variableMatch};` +
                 `${variableMatch}\\['ball'] *= *'door';` +
-                `var *object *= *${variableMatch};` +
+                `var object *= *${variableMatch};` +
             ``;
             const regExp: RegExp = new RegExp(match);
 
@@ -219,13 +219,13 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #8: nested objects #3', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['hawk'] *= *'geek';` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
                 `${variableMatch}\\['inner1'] *= *${variableMatch};` +
                 `${variableMatch}\\['cow'] *= *'bear';` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['inner'] *= *${variableMatch};` +
                 `${variableMatch}\\['ball'] *= *'door';` +
@@ -254,12 +254,12 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #9: correct integration with control flow flattening object #1', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['\\w{5}'] *= *function *\\(${variableMatch}, *${variableMatch}\\) *{` +
                     `return *${variableMatch} *\\+ *${variableMatch};` +
                 `};` +
-                `var *${variableMatch} *= *${variableMatch};` +
-                `var *${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(0x1, *0x2\\);` +
+                `var ${variableMatch} *= *${variableMatch};` +
+                `var ${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(0x1, *0x2\\);` +
             ``;
             const regExp: RegExp = new RegExp(match);
 
@@ -286,16 +286,16 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #10: correct integration with control flow flattening object #2', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['\\w{5}'] *= *function *\\(${variableMatch}, *${variableMatch}\\) *{` +
                     `return *${variableMatch} *\\+ *${variableMatch};` +
                 `};` +
-                `var *${variableMatch} *= *${variableMatch};` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *${variableMatch};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *0x1;` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['bar'] *= *0x2;` +
-                `var *${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(${variableMatch}\\['foo'], *${variableMatch}\\['bar']\\);` +
+                `var ${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(${variableMatch}\\['foo'], *${variableMatch}\\['bar']\\);` +
             ``;
             const regExp: RegExp = new RegExp(match);
 
@@ -323,9 +323,9 @@ describe('ObjectExpressionKeysTransformer', () => {
         describe('Variant #11: variable declarator object call inside other variable declarator', () => {
             describe('Variant #1', () => {
                 const match: string = `` +
-                    `var *${variableMatch} *= *{};` +
+                    `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['foo'] *= *'foo';` +
-                    `var *${variableMatch} *= *${variableMatch}, *` +
+                    `var ${variableMatch} *= *${variableMatch}, *` +
                     `${variableMatch} *= *${variableMatch}\\['foo'];` +
                 ``;
                 const regExp: RegExp = new RegExp(match);
@@ -351,9 +351,9 @@ describe('ObjectExpressionKeysTransformer', () => {
 
             describe('Variant #2', () => {
                 const match: string = `` +
-                    `var *${variableMatch} *= *{};` +
+                    `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['foo'] *= *'foo';` +
-                    `var *${variableMatch} *= *${variableMatch}, *` +
+                    `var ${variableMatch} *= *${variableMatch}, *` +
                     `${variableMatch} *= *\\[${variableMatch}\\['foo']];` +
                 ``;
                 const regExp: RegExp = new RegExp(match);
@@ -379,7 +379,7 @@ describe('ObjectExpressionKeysTransformer', () => {
 
             describe('Variant #3', () => {
                 const match: string = `` +
-                    `var *${variableMatch} *= *0x1, *${variableMatch} *= *{'foo' *: *${variableMatch}};` +
+                    `var ${variableMatch} *= *0x1, *${variableMatch} *= *{'foo' *: *${variableMatch}};` +
                 ``;
                 const regExp: RegExp = new RegExp(match);
 
@@ -433,7 +433,7 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #13: should keep numeric object keys', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['0'] *= *'foo';` +
                 `${variableMatch}\\['bar'] *= *'bar';` +
                 `${variableMatch}\\['2'] *= *'baz';` +
@@ -461,10 +461,10 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #14: template literal', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
-                `var *foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` +
+                `var foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` +
             ``;
             const regExp: RegExp = new RegExp(match);
 
@@ -490,7 +490,7 @@ describe('ObjectExpressionKeysTransformer', () => {
         // issue https://github.com/javascript-obfuscator/javascript-obfuscator/issues/516
         describe('Variant #15: function default values', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['value'] *= *0x1;` +
                 `function test *\\(${variableMatch} *= *0x1, *${variableMatch} *= *${variableMatch}\\) *{ *}` +
             ``;
@@ -520,8 +520,8 @@ describe('ObjectExpressionKeysTransformer', () => {
             describe('Without reference on other property', () => {
                 describe('Variant #1: Single variable declarator and object expression parent node is expression node', () => {
                     const match: string = `` +
-                        `var *passthrough *= *${variableMatch} *=> *${variableMatch};` +
-                        `var *${variableMatch} *= *{};` +
+                        `var passthrough *= *${variableMatch} *=> *${variableMatch};` +
+                        `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['foo'] *= *0x1;` +
                         `var foo *= *passthrough *\\(${variableMatch}\\);` +
                     ``;
@@ -579,8 +579,8 @@ describe('ObjectExpressionKeysTransformer', () => {
             describe('With reference on other property', () => {
                 describe('Variant #1: Object expression parent node is variable declarator node', () => {
                     const match: string = `` +
-                        `var *passthrough *= *${variableMatch} *=> *${variableMatch};` +
-                        `var *${variableMatch} *= *{};` +
+                        `var passthrough *= *${variableMatch} *=> *${variableMatch};` +
+                        `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['foo'] *= *0x1;` +
                         `var foo *= *${variableMatch}, *bar *= *{'bar': *foo\\['foo']};` +
                     ``;
@@ -607,8 +607,8 @@ describe('ObjectExpressionKeysTransformer', () => {
 
                 describe('Variant #2: Object expression parent node is any expression node', () => {
                     const match: string = `` +
-                        `var *passthrough *= *${variableMatch} *=> *${variableMatch};` +
-                        `var *${variableMatch} *= *{};` +
+                        `var passthrough *= *${variableMatch} *=> *${variableMatch};` +
+                        `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['foo'] *= *0x1;` +
                         `var foo *= *${variableMatch}, *bar *= *passthrough *\\({ *'bar' *: *foo\\['foo'] *}\\);` +
                     ``;
@@ -855,7 +855,7 @@ describe('ObjectExpressionKeysTransformer', () => {
         describe('Variant #2: for statement', () => {
             describe('Variant #1: with block statement', () => {
                 const match: string = `` +
-                    `for *\\(var *${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *{` +
+                    `for *\\(var ${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *{` +
                         `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['foo'] *= *'bar';` +
                         `var ${variableMatch} *= *${variableMatch};` +
@@ -887,7 +887,7 @@ describe('ObjectExpressionKeysTransformer', () => {
                     `var ${variableMatch};` +
                     `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['bar'] *= *'bar';` +
-                    `for *\\(var *${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *` +
+                    `for *\\(var ${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *` +
                         `${variableMatch} *= *${variableMatch};` +
                 ``;
                 const regExp: RegExp = new RegExp(match);
@@ -916,7 +916,7 @@ describe('ObjectExpressionKeysTransformer', () => {
             describe('Variant #1: with block statement', () => {
                 const match: string = `` +
                     `var ${variableMatch} *= *{};` +
-                    `for *\\(var *${variableMatch} in *${variableMatch}\\) *{` +
+                    `for *\\(var ${variableMatch} in *${variableMatch}\\) *{` +
                         `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['bar'] *= *'bar';` +
                         `${variableMatch} *= *${variableMatch};` +
@@ -948,7 +948,7 @@ describe('ObjectExpressionKeysTransformer', () => {
                     `var ${variableMatch} *= *{};` +
                     `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['bar'] *= *'bar';` +
-                    `for *\\(var *${variableMatch} in *${variableMatch}\\) *` +
+                    `for *\\(var ${variableMatch} in *${variableMatch}\\) *` +
                         `${variableMatch} *= *${variableMatch};` +
                 ``;
                 const regExp: RegExp = new RegExp(match);
@@ -977,7 +977,7 @@ describe('ObjectExpressionKeysTransformer', () => {
             describe('Variant #1: with block statement', () => {
                 const match: string = `` +
                     `var ${variableMatch} *= *\\[];` +
-                    `for *\\(var *${variableMatch} of *${variableMatch}\\) *{` +
+                    `for *\\(var ${variableMatch} of *${variableMatch}\\) *{` +
                         `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['bar'] *= *'bar';` +
                         `${variableMatch} *= *${variableMatch};` +
@@ -1009,7 +1009,7 @@ describe('ObjectExpressionKeysTransformer', () => {
                     `var ${variableMatch} *= *\\[];` +
                     `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['bar'] *= *'bar';` +
-                    `for *\\(var *${variableMatch} of *${variableMatch}\\) *` +
+                    `for *\\(var ${variableMatch} of *${variableMatch}\\) *` +
                         `${variableMatch} *= *${variableMatch};` +
                     ``;
                 const regExp: RegExp = new RegExp(match);
@@ -1038,7 +1038,7 @@ describe('ObjectExpressionKeysTransformer', () => {
             describe('Variant #1: with block statement', () => {
                 const match: string = `` +
                     `while *\\(!!\\[]\\) *{` +
-                        `var *${variableMatch} *= *{};` +
+                        `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['foo'] *= *'bar';` +
                         `var ${variableMatch} *= *${variableMatch};` +
                     `}` +
@@ -1125,7 +1125,7 @@ describe('ObjectExpressionKeysTransformer', () => {
         describe('Variant #6: try statement', () => {
             const match: string = `` +
                 `try *{` +
-                    `var *${variableMatch} *= *{};` +
+                    `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['foo'] *= *'bar';` +
                     `var ${variableMatch} *= *${variableMatch};` +
                 `} *catch *\\(${variableMatch}\\) *{` +
@@ -1156,7 +1156,7 @@ describe('ObjectExpressionKeysTransformer', () => {
             const match: string = `` +
                 `try *{` +
                 `} *catch *\\(${variableMatch}\\) *{` +
-                    `var *${variableMatch} *= *{};` +
+                    `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['foo'] *= *'bar';` +
                     `var ${variableMatch} *= *${variableMatch};` +
                 `}` +
@@ -1186,7 +1186,7 @@ describe('ObjectExpressionKeysTransformer', () => {
             const match: string = `` +
                 `switch *\\(!!\\[]\\) *{` +
                     `case *!!\\[]:` +
-                        `var *${variableMatch} *= *{};` +
+                        `var ${variableMatch} *= *{};` +
                         `${variableMatch}\\['foo'] *= *'bar';` +
                     `var ${variableMatch} *= *${variableMatch};` +
                 `}` +
@@ -1215,10 +1215,10 @@ describe('ObjectExpressionKeysTransformer', () => {
         describe('Variant #9: variable declarator with object call', () => {
             describe('Variant #1', () => {
                 const match: string = `` +
-                    `const *${variableMatch} *= *{}; *` +
+                    `const ${variableMatch} *= *{}; *` +
                     `${variableMatch}\\['foo'] *= *'foo'; *` +
                     `const ${variableMatch} *= *${variableMatch};` +
-                    `const *${variableMatch} *= *${variableMatch}\\['foo'];` +
+                    `const ${variableMatch} *= *${variableMatch}\\['foo'];` +
                 ``;
                 const regExp: RegExp = new RegExp(match);
 
@@ -1272,11 +1272,11 @@ describe('ObjectExpressionKeysTransformer', () => {
 
             describe('Variant #3: two objects', () => {
                 const match: string = `` +
-                    `var *${variableMatch} *= *{};` +
+                    `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['foo'] *= *'foo';` +
-                    `var *${variableMatch} *= *{};` +
+                    `var ${variableMatch} *= *{};` +
                     `${variableMatch}\\['bar'] *= *'bar';` +
-                    `var *${variableMatch} *= *${variableMatch}, *` +
+                    `var ${variableMatch} *= *${variableMatch}, *` +
                         `${variableMatch} *= *${variableMatch}, *` +
                         `${variableMatch} *= *${variableMatch}\\['bar']; *` +
                     `console\\['log']\\(${variableMatch}\\);` +
@@ -1307,7 +1307,7 @@ describe('ObjectExpressionKeysTransformer', () => {
     describe('prevailing kind of variables', () => {
         describe('Variant #1: `var` kind`', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{};` +
+                `var ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
             ``;
@@ -1334,7 +1334,7 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #2: `const` kind`', () => {
             const match: string = `` +
-                `const *${variableMatch} *= *{};` +
+                `const ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
             ``;
@@ -1361,7 +1361,7 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #3: `let` kind`', () => {
             const match: string = `` +
-                `const *${variableMatch} *= *{};` +
+                `const ${variableMatch} *= *{};` +
                 `${variableMatch}\\['foo'] *= *'bar';` +
                 `${variableMatch}\\['baz'] *= *'bark';` +
             ``;
@@ -1390,7 +1390,7 @@ describe('ObjectExpressionKeysTransformer', () => {
     describe('Ignore transformation', () => {
         describe('Variant #1: disabled option', () => {
             const match: string = `` +
-                `var *${variableMatch} *= *{` +
+                `var ${variableMatch} *= *{` +
                     `'foo': *'bar',` +
                     `'baz': *'bark'` +
                 `}` +
@@ -1416,7 +1416,7 @@ describe('ObjectExpressionKeysTransformer', () => {
         });
 
         describe('Variant #2: empty object expression', () => {
-            const match: string = `var *${variableMatch} *= *{};`;
+            const match: string = `var ${variableMatch} *= *{};`;
             const regExp: RegExp = new RegExp(match);
 
             let obfuscatedCode: string;
@@ -1701,7 +1701,7 @@ describe('ObjectExpressionKeysTransformer', () => {
 
         describe('Variant #8: variable declarator identifier reference', () => {
             const match: string = `` +
-                `var *passthrough *= *${variableMatch} *=> *${variableMatch};` +
+                `var passthrough *= *${variableMatch} *=> *${variableMatch};` +
                 `var foo *= *0x1, *bar *= *{'baz' *: *passthrough\\(foo\\)};` +
             ``;
             const regExp: RegExp = new RegExp(match);

+ 13 - 13
test/functional-tests/node-transformers/converting-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts

@@ -9,7 +9,7 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac
 describe('ObjectExpressionTransformer', () => {
     describe('default behaviour', () => {
         describe('Variant #1: `unicodeEscapeSequence` option is disabled\'', () => {
-            const regExp: RegExp = /var *test *= *\{'foo':0x0\};/;
+            const regExp: RegExp = /var test *= *\{'foo':0x0\};/;
 
             let obfuscatedCode: string;
 
@@ -31,7 +31,7 @@ describe('ObjectExpressionTransformer', () => {
         });
 
         describe('Variant #2: `unicodeEscapeSequence` option is enabled', () => {
-            const regExp: RegExp = /var *test *= *\{'\\x66\\x6f\\x6f':0x0\};/;
+            const regExp: RegExp = /var test *= *\{'\\x66\\x6f\\x6f':0x0\};/;
 
             let obfuscatedCode: string;
 
@@ -54,7 +54,7 @@ describe('ObjectExpressionTransformer', () => {
     });
 
     describe('shorthand ES6 object expression', () => {
-        const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'a': *_0x[a-f0-9]{4,6}\, *'b': *_0x[a-f0-9]{4,6}\};/;
+        const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'a': *_0x[a-f0-9]{4,6}\, *'b': *_0x[a-f0-9]{4,6}\};/;
 
         let obfuscatedCode: string;
 
@@ -76,7 +76,7 @@ describe('ObjectExpressionTransformer', () => {
 
     describe('computed property name', () => {
         describe('Variant #1: computed property name with identifier', () => {
-            const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/;
+            const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/;
 
             let obfuscatedCode: string;
 
@@ -98,7 +98,7 @@ describe('ObjectExpressionTransformer', () => {
 
         describe('Variant #2: computed property name with literal', () => {
             describe('Variant #1: `unicodeEscapeSequence` option is disabled', () => {
-                const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\['foo'\]: *0x1\};/;
+                const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\['foo'\]: *0x1\};/;
 
                 let obfuscatedCode: string;
 
@@ -120,7 +120,7 @@ describe('ObjectExpressionTransformer', () => {
             });
 
             describe('Variant #2: `unicodeEscapeSequence` option is enabled', () => {
-                const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\['\\x66\\x6f\\x6f'\]: *0x1\};/;
+                const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\['\\x66\\x6f\\x6f'\]: *0x1\};/;
 
                 let obfuscatedCode: string;
 
@@ -144,8 +144,8 @@ describe('ObjectExpressionTransformer', () => {
     });
 
     describe('object rest', () => {
-        const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/;
-        const objectRestRegExp: RegExp = /var *\{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/;
+        const objectRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/;
+        const objectRestRegExp: RegExp = /var \{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/;
 
         let obfuscatedCode: string;
 
@@ -170,9 +170,9 @@ describe('ObjectExpressionTransformer', () => {
     });
 
     describe('object spread', () => {
-        const object1RegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1\};/;
-        const object2RegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'bar': *0x2\};/;
-        const objectSpreadRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\.\.\._0x[a-f0-9]{4,6}, *\.\.\._0x[a-f0-9]{4,6}\};/;
+        const object1RegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'foo': *0x1\};/;
+        const object2RegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'bar': *0x2\};/;
+        const objectSpreadRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\.\.\._0x[a-f0-9]{4,6}, *\.\.\._0x[a-f0-9]{4,6}\};/;
 
         let obfuscatedCode: string;
 
@@ -201,9 +201,9 @@ describe('ObjectExpressionTransformer', () => {
     });
 
     describe('object spread: unicode escape sequence', () => {
-        const object1RegExp: RegExp = /const *_0x[a-f0-9]{4,6} *= *\{\};/;
+        const object1RegExp: RegExp = /const _0x[a-f0-9]{4,6} *= *\{\};/;
         const object2RegExp: RegExp = /_0x[a-f0-9]{4,6}\['\\x61'\] *= *0x1;/;
-        const object3RegExp: RegExp = /const *\{a\} *= *_0x[a-f0-9]{4,6};/;
+        const object3RegExp: RegExp = /const \{a\} *= *_0x[a-f0-9]{4,6};/;
 
         let obfuscatedCode: string;
 

+ 9 - 9
test/functional-tests/node-transformers/converting-transformers/split-string-transformer/SplitStringTransformer.spec.ts

@@ -22,7 +22,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/);
+            assert.match(obfuscatedCode,  /^var test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/);
         });
     });
 
@@ -39,7 +39,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'abcdefg';$/);
+            assert.match(obfuscatedCode,  /^var test *= *'abcdefg';$/);
         });
     });
 
@@ -56,7 +56,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'abcdefg';$/);
+            assert.match(obfuscatedCode,  /^var test *= *'abcdefg';$/);
         });
     });
 
@@ -90,7 +90,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'ab' *\+ *'cd' *\+ *\( *'ef' *\+ *'g' *\);$/);
+            assert.match(obfuscatedCode,  /^var test *= *'ab' *\+ *'cd' *\+ *\( *'ef' *\+ *'g' *\);$/);
         });
     });
 
@@ -108,7 +108,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'\\x61\\x62' *\+ *'\\x63\\x64' *\+ *'\\x65\\x66' *\+ *'\\x67';$/);
+            assert.match(obfuscatedCode,  /^var test *= *'\\x61\\x62' *\+ *'\\x63\\x64' *\+ *'\\x65\\x66' *\+ *'\\x67';$/);
         });
     });
 
@@ -125,7 +125,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/);
+            assert.match(obfuscatedCode,  /^var test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/);
         });
     });
 
@@ -142,7 +142,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *{'abcdefg' *: *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g'};$/);
+            assert.match(obfuscatedCode,  /^var test *= *{'abcdefg' *: *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g'};$/);
         });
     });
 
@@ -159,7 +159,7 @@ describe('SplitStringTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *{\['ab' *\+ *'cd' *\+ *'ef' *\+ *'g'] *: *0x1};$/);
+            assert.match(obfuscatedCode,  /^var test *= *{\['ab' *\+ *'cd' *\+ *'ef' *\+ *'g'] *: *0x1};$/);
         });
     });
 
@@ -205,7 +205,7 @@ describe('SplitStringTransformer', () => {
 
             assert.match(
                 obfuscatedCode,
-                /^var *foo *= *'foo' *\+ *'foo'; *var *bar *= *'barbar'; *var *baz *= *'baz' *\+ *'baz';$/
+                /^var foo *= *'foo' *\+ *'foo'; *var bar *= *'barbar'; *var baz *= *'baz' *\+ *'baz';$/
             );
         });
     });

+ 7 - 7
test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts

@@ -21,7 +21,7 @@ describe('TemplateLiteralTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'abc\\x20' *\+ *foo;$/);
+            assert.match(obfuscatedCode,  /^var test *= *'abc\\x20' *\+ *foo;$/);
         });
     });
 
@@ -37,7 +37,7 @@ describe('TemplateLiteralTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'foo\\x0abar';$/);
+            assert.match(obfuscatedCode,  /^var test *= *'foo\\x0abar';$/);
         });
 
         it('Variant #2: should transform es6 multiline template literal inside return statement', () => {
@@ -109,7 +109,7 @@ describe('TemplateLiteralTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'' *\+ *foo;$/);
+            assert.match(obfuscatedCode,  /^var test *= *'' *\+ *foo;$/);
         });
     });
 
@@ -125,7 +125,7 @@ describe('TemplateLiteralTransformer', () => {
                 }
             ).getObfuscatedCode();
 
-            assert.match(obfuscatedCode,  /^var *test *= *'abc';$/);
+            assert.match(obfuscatedCode,  /^var test *= *'abc';$/);
         });
     });
 
@@ -143,7 +143,7 @@ describe('TemplateLiteralTransformer', () => {
 
             assert.match(
                 obfuscatedCode,
-                /^var *test *= *0x1 *\+ *0x1 *\+ *'\\x20abc\\x20' *\+ *\(0x1 *\+ *0x1\);$/
+                /^var test *= *0x1 *\+ *0x1 *\+ *'\\x20abc\\x20' *\+ *\(0x1 *\+ *0x1\);$/
             );
         });
     });
@@ -185,9 +185,9 @@ describe('TemplateLiteralTransformer', () => {
 
     describe('Variant #8: parentize node', () => {
         const match: string = `` +
-            `var *_0x[a-f0-9]{4,6} *= *{};` +
+            `var _0x[a-f0-9]{4,6} *= *{};` +
             `_0x[a-f0-9]{4,6}\\['foo'] *= *'bar';` +
-            `var *foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` +
+            `var foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` +
         ``;
         const regExp: RegExp = new RegExp(match);
 

+ 15 - 15
test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts

@@ -56,7 +56,7 @@ describe('DeadCodeInjectionTransformer', () => {
 
         describe('Variant #2 - block statements count is less than `5`', () => {
             const regexp: RegExp = new RegExp(
-                `var *${variableMatch} *= *function *\\(\\) *\\{` +
+                `var ${variableMatch} *= *function *\\(\\) *\\{` +
                     `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` +
                 `\\};`,
                 'g'
@@ -92,7 +92,7 @@ describe('DeadCodeInjectionTransformer', () => {
 
         describe('Variant #3 - deadCodeInjectionThreshold: 0', () => {
             const regexp: RegExp = new RegExp(
-                `var *${variableMatch} *= *function *\\(\\) *\\{` +
+                `var ${variableMatch} *= *function *\\(\\) *\\{` +
                     `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` +
                 `\\};`,
                 'g'
@@ -129,13 +129,13 @@ describe('DeadCodeInjectionTransformer', () => {
         describe('Variant #4 - break or continue statement in block statement', () => {
             describe('Variant #1', () => {
                 const functionRegExp: RegExp = new RegExp(
-                    `var *${variableMatch} *= *function *\\(\\) *\\{` +
+                    `var ${variableMatch} *= *function *\\(\\) *\\{` +
                         `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` +
                     `\\};`,
                     'g'
                 );
                 const loopRegExp: RegExp = new RegExp(
-                    `for *\\(var *${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *\\{` +
+                    `for *\\(var ${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *\\{` +
                         `(?:continue|break);` +
                     `\\}`,
                     'g'
@@ -182,13 +182,13 @@ describe('DeadCodeInjectionTransformer', () => {
 
             describe('Variant #2', () => {
                 const functionRegExp: RegExp = new RegExp(
-                    `var *${variableMatch} *= *function *\\(\\) *\\{` +
+                    `var ${variableMatch} *= *function *\\(\\) *\\{` +
                         `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` +
                     `\\};`,
                     'g'
                 );
                 const loopRegExp: RegExp = new RegExp(
-                    `for *\\(var *${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *` +
+                    `for *\\(var ${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *` +
                         `(?:continue|break);`,
                     'g'
                 );
@@ -235,7 +235,7 @@ describe('DeadCodeInjectionTransformer', () => {
 
         describe('Variant #5 - await expression in block statement', () => {
             const functionRegExp: RegExp = new RegExp(
-                `var *${variableMatch} *= *function *\\(\\) *\\{` +
+                `var ${variableMatch} *= *function *\\(\\) *\\{` +
                     `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` +
                 `\\};`,
                 'g'
@@ -286,7 +286,7 @@ describe('DeadCodeInjectionTransformer', () => {
 
         describe('Variant #6 - super expression in block statement', () => {
             const functionRegExp: RegExp = new RegExp(
-                `var *${variableMatch} *= *function *\\(\\) *\\{` +
+                `var ${variableMatch} *= *function *\\(\\) *\\{` +
                     `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` +
                 `\\};`,
                 'g'
@@ -341,7 +341,7 @@ describe('DeadCodeInjectionTransformer', () => {
             const expectedDistribution: number = 0.25;
 
             const ifMatch: string = `if *\\(!!\\[\\]\\) *\\{`;
-            const functionMatch: string = `var *${variableMatch} *= *function *\\(\\) *\\{`;
+            const functionMatch: string = `var ${variableMatch} *= *function *\\(\\) *\\{`;
 
             const match1: string = `` +
                 `if *\\(${variableMatch}\\('${hexMatch}'\\) *=== *${variableMatch}\\('${hexMatch}'\\)\\) *\\{` +
@@ -556,7 +556,7 @@ describe('DeadCodeInjectionTransformer', () => {
                 const deadCodeMatch: string = `` +
                     `function \\w *\\(\\w\\) *{` +
                         `if *\\(.{0,30}\\) *{` +
-                            `var *(\\w).*?;` +
+                            `var (\\w).*?;` +
                         `} *else *{` +
                             `return *(\\w).*?;` +
                         `}` +
@@ -622,7 +622,7 @@ describe('DeadCodeInjectionTransformer', () => {
                         `if *\\(.{0,30}\\) *{` +
                             `return *(\\w).{0,40};` +
                         `} *else *{` +
-                            `var *(\\w).*?;` +
+                            `var (\\w).*?;` +
                         `}` +
                     `}` +
                 ``;
@@ -719,7 +719,7 @@ describe('DeadCodeInjectionTransformer', () => {
             describe('Variant #1: collecting of block statements', () => {
                 const regExp: RegExp = new RegExp(
                     `${variableMatch} *\\(\\); *` +
-                    `var *${variableMatch} *= *0x2; *` +
+                    `var ${variableMatch} *= *0x2; *` +
                     `function *${variableMatch} *\\(\\) *{ *} *`,
                     'g'
                 );
@@ -756,11 +756,11 @@ describe('DeadCodeInjectionTransformer', () => {
             describe('Variant #2: wrapping of block statements in dead code conditions', () => {
                 const regExp: RegExp = new RegExp(
                     `function *${variableMatch} *\\(\\) *{ *` +
-                        `var *${variableMatch} *= *0x1; *` +
+                        `var ${variableMatch} *= *0x1; *` +
                         `${variableMatch} *\\(\\); *` +
-                        `var *${variableMatch} *= *0x2; *` +
+                        `var ${variableMatch} *= *0x2; *` +
                         `function *${variableMatch} *\\(\\) *{ *} *` +
-                        `var *${variableMatch} *= *0x3; *` +
+                        `var ${variableMatch} *= *0x3; *` +
                     `}`,
                     'g'
                 );

+ 19 - 19
test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts

@@ -13,8 +13,8 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac
 describe('LiteralTransformer', () => {
     describe('transformation of literal node with string value', () => {
         describe('Variant #1: default behaviour', () => {
-            const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['test'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/;
+            const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['test'\];/;
+            const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/;
 
             let obfuscatedCode: string;
 
@@ -41,7 +41,7 @@ describe('LiteralTransformer', () => {
         });
 
         describe('Variant #2: `stringArray` option is disabled', () => {
-            const regExp: RegExp = /^var *test *= *'test';/;
+            const regExp: RegExp = /^var test *= *'test';/;
 
             let obfuscatedCode: string;
 
@@ -83,8 +83,8 @@ describe('LiteralTransformer', () => {
         });
 
         describe('Variant #4: same literal node values', () => {
-            const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['test'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/;
+            const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['test'\];/;
+            const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/;
 
             let obfuscatedCode: string;
 
@@ -111,7 +111,7 @@ describe('LiteralTransformer', () => {
         });
 
         describe('Variant #5: `unicodeEscapeSequence` option is enabled', () => {
-            const regExp: RegExp = /^var *test *= *'\\x74\\x65\\x73\\x74';$/;
+            const regExp: RegExp = /^var test *= *'\\x74\\x65\\x73\\x74';$/;
 
             let obfuscatedCode: string;
 
@@ -134,8 +134,8 @@ describe('LiteralTransformer', () => {
         });
 
         describe('Variant #6: `unicodeEscapeSequence` and `stringArray` options are enabled', () => {
-            const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['\\x74\\x65\\x73\\x74'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('\\x30\\x78\\x30'\);/;
+            const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['\\x74\\x65\\x73\\x74'\];/;
+            const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('\\x30\\x78\\x30'\);/;
 
             let obfuscatedCode: string;
 
@@ -163,7 +163,7 @@ describe('LiteralTransformer', () => {
         });
 
         describe('Variant #7: short literal node value', () => {
-            const regExp: RegExp = /var *test *= *'te';/;
+            const regExp: RegExp = /var test *= *'te';/;
 
             let obfuscatedCode: string;
 
@@ -186,8 +186,8 @@ describe('LiteralTransformer', () => {
         });
 
         describe('Variant #8: base64 encoding', () => {
-            const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['dGVzdA=='\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/;
+            const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['dGVzdA=='\];/;
+            const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/;
 
             let obfuscatedCode: string;
 
@@ -216,7 +216,7 @@ describe('LiteralTransformer', () => {
 
         describe('Variant #9: rc4 encoding', () => {
             describe('Variant #1: single string literal', () => {
-                const regExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0', *'.{4}'\);/;
+                const regExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0', *'.{4}'\);/;
 
                 let obfuscatedCode: string;
 
@@ -240,8 +240,8 @@ describe('LiteralTransformer', () => {
             });
 
             describe('Variant #2: multiple string literals', () => {
-                const variableRegExp1: RegExp = /var *test *= *_0x(?:[a-f0-9]){4}\('0x0', *'(.{4})'\);/;
-                const variableRegExp2: RegExp = /var *test *= *_0x(?:[a-f0-9]){4}\('0x1', *'(.{4})'\);/;
+                const variableRegExp1: RegExp = /var test *= *_0x(?:[a-f0-9]){4}\('0x0', *'(.{4})'\);/;
+                const variableRegExp2: RegExp = /var test *= *_0x(?:[a-f0-9]){4}\('0x1', *'(.{4})'\);/;
 
                 let encodedLiteralValue1: string;
                 let encodedLiteralValue2: string;
@@ -285,8 +285,8 @@ describe('LiteralTransformer', () => {
             const stringArrayThreshold: number = 0.5;
             const delta: number = 0.1;
 
-            const regExp1: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
-            const regExp2: RegExp = /var *test *= *'test';/g;
+            const regExp1: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
+            const regExp2: RegExp = /var test *= *'test';/g;
 
             let stringArrayProbability: number,
                 noStringArrayProbability: number;
@@ -579,7 +579,7 @@ describe('LiteralTransformer', () => {
     });
 
     describe('transformation of literal node with boolean value', () => {
-        const regExp: RegExp = /^var *test *= *!!\[\];$/;
+        const regExp: RegExp = /^var test *= *!!\[\];$/;
 
         let obfuscatedCode: string;
 
@@ -602,7 +602,7 @@ describe('LiteralTransformer', () => {
     });
 
     describe('transformation of literal node with number value', () => {
-        const regExp: RegExp = /^var *test *= *0x0;$/;
+        const regExp: RegExp = /^var test *= *0x0;$/;
 
         let obfuscatedCode: string;
 
@@ -625,7 +625,7 @@ describe('LiteralTransformer', () => {
     });
 
     describe('RegExp literal', () => {
-        const regExp: RegExp = /^var *regExp *= *\/\(\\d\+\)\/;$/;
+        const regExp: RegExp = /^var regExp *= *\/\(\\d\+\)\/;$/;
 
         let obfuscatedCode: string;
 

+ 2 - 2
test/functional-tests/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.spec.ts

@@ -26,7 +26,7 @@ describe('BaseIdentifierObfuscatingReplacer', () => {
             it('Should keep reserved names without transformations when `reservedNames` option is enabled', () => {
                 assert.match(
                     obfuscatedCode,
-                    /var *abc *= *0x1; *var *_0x([a-f0-9]){4,6} *= *0x2; *var *ghi *= *0x3;/
+                    /var abc *= *0x1; *var _0x([a-f0-9]){4,6} *= *0x2; *var ghi *= *0x3;/
                 );
             });
         });
@@ -50,7 +50,7 @@ describe('BaseIdentifierObfuscatingReplacer', () => {
             it('Should keep reserved names without transformations when `reservedNames` option is enabled', () => {
                 assert.match(
                     obfuscatedCode,
-                    /var *abc *= *0x1; *var *_0x([a-f0-9]){4,6} *= *0x2; *var *ghi *= *0x3;/
+                    /var abc *= *0x1; *var _0x([a-f0-9]){4,6} *= *0x2; *var ghi *= *0x3;/
                 );
             });
         });

+ 1 - 1
test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts

@@ -122,7 +122,7 @@ describe('ScopeIdentifiersTransformer ClassDeclaration identifiers', () => {
 
         describe('Variant #3: already renamed identifiers shouldn\'t be renamed twice', () => {
             const classDeclarationRegExp: RegExp = /class *d *{/;
-            const variableDeclarationsRegExp: RegExp = /let *e, *f, *g, *h;/;
+            const variableDeclarationsRegExp: RegExp = /let e, *f, *g, *h;/;
             const classReferenceRegExp: RegExp = /new d\(\);/;
 
             let obfuscatedCode: string;

+ 2 - 2
test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function-declaration/FunctionDeclaration.spec.ts

@@ -93,7 +93,7 @@ describe('ScopeIdentifiersTransformer FunctionDeclaration identifiers', () => {
 
         describe('Variant #3: generator `functionDeclaration`', () => {
             const functionNameIdentifierRegExp: RegExp = /function *\* *(_0x[a-f0-9]{4,6}) *\(\) *\{/;
-            const functionCallIdentifierRegExp: RegExp = /let *_0x[a-f0-9]{4,6} *= *(_0x[a-f0-9]{4,6}) *\( *\);/;
+            const functionCallIdentifierRegExp: RegExp = /let _0x[a-f0-9]{4,6} *= *(_0x[a-f0-9]{4,6}) *\( *\);/;
 
             let obfuscatedCode: string,
                 functionNameIdentifier: string,
@@ -146,7 +146,7 @@ describe('ScopeIdentifiersTransformer FunctionDeclaration identifiers', () => {
         describe('Variant #5: already renamed identifiers shouldn\'t be renamed twice', () => {
             describe('Variant #1', () => {
                 const functionDeclarationRegExp: RegExp = /function *d\(\) *{/;
-                const variableDeclarationsRegExp: RegExp = /let *e, *f, *g, *h;/;
+                const variableDeclarationsRegExp: RegExp = /let e, *f, *g, *h;/;
 
                 let obfuscatedCode: string;
 

+ 2 - 2
test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function/Function.spec.ts

@@ -456,7 +456,7 @@ describe('ScopeIdentifiersTransformer Function identifiers', () => {
         });
 
         describe('Variant #2: identifier as right value', () => {
-            const variableDeclarationRegExp: RegExp = /var *(_0x[a-f0-9]{4,6}) *= *0x1;/;
+            const variableDeclarationRegExp: RegExp = /var (_0x[a-f0-9]{4,6}) *= *0x1;/;
             const functionParameterRegExp: RegExp = /function *\((_0x[a-f0-9]{4,6}) *= *(_0x[a-f0-9]{4,6})\) *\{/;
             const functionBodyRegExp: RegExp = /return *(_0x[a-f0-9]{4,6});/;
 
@@ -503,7 +503,7 @@ describe('ScopeIdentifiersTransformer Function identifiers', () => {
         });
 
         describe('Variant #3: identifier as right value', () => {
-            const variableDeclarationRegExp: RegExp = /var *(_0x[a-f0-9]{4,6}) *= *0x1;/;
+            const variableDeclarationRegExp: RegExp = /var (_0x[a-f0-9]{4,6}) *= *0x1;/;
             const functionParameterRegExp: RegExp = /function *\((_0x[a-f0-9]{4,6}), *(_0x[a-f0-9]{4,6}) *= *(_0x[a-f0-9]{4,6})\) *\{/;
             const functionBodyRegExp: RegExp = /return *(_0x[a-f0-9]{4,6}) *\+ *(_0x[a-f0-9]{4,6});/;
 

+ 18 - 18
test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/variable-declaration/VariableDeclaration.spec.ts

@@ -11,7 +11,7 @@ import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscator
 
 describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     describe('Variant #1: default behaviour', () => {
-        const variableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *'abc';/;
+        const variableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *'abc';/;
         const variableCallRegExp: RegExp = /console\['log'\]\(_0x([a-f0-9]){4,6}\);/;
 
         let obfuscatedCode: string;
@@ -38,7 +38,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
 
     describe('Variant #2: parent block scope node is `Program` node', () => {
         describe('Variant #1: `renameGlobals` option is disabled', () => {
-            const variableDeclarationRegExp: RegExp = /var *test *= *0xa;/;
+            const variableDeclarationRegExp: RegExp = /var test *= *0xa;/;
             const variableCallRegExp: RegExp = /console\['log'\]\(test\);/;
 
             let obfuscatedCode: string;
@@ -64,7 +64,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
         });
 
         describe('Variant #2: `renameGlobals` option is enabled', () => {
-            const variableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0xa;/;
+            const variableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0xa;/;
             const variableCallRegExp: RegExp = /console\['log'\]\(_0x([a-f0-9]){4,6}\);/;
 
             let obfuscatedCode: string;
@@ -164,7 +164,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
         const innerFunctionParamIdentifierRegExp: RegExp = /function _0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\) *\{/;
         const consoleLogIdentifierRegExp: RegExp = /console\['log'\]\((_0x[a-f0-9]{4,6})\)/;
         const objectIdentifierRegExp: RegExp = /return\{'t':(_0x[a-f0-9]{4,6})\}/;
-        const variableDeclarationIdentifierRegExp: RegExp = /var *(_0x[a-f0-9]{4,6});/;
+        const variableDeclarationIdentifierRegExp: RegExp = /var (_0x[a-f0-9]{4,6});/;
 
         let outerFunctionParamIdentifierName: string|null,
             innerFunctionParamIdentifierName: string|null,
@@ -219,7 +219,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
         const innerFunctionParamIdentifierRegExp: RegExp = /function _0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\) *\{/;
         const consoleLogIdentifierRegExp: RegExp = /console\['log'\]\((_0x[a-f0-9]{4,6})\)/;
         const objectIdentifierRegExp: RegExp = /return\{'t':(_0x[a-f0-9]{4,6})\}/;
-        const variableDeclarationIdentifierRegExp: RegExp = /var *(_0x[a-f0-9]{4,6});/;
+        const variableDeclarationIdentifierRegExp: RegExp = /var (_0x[a-f0-9]{4,6});/;
 
         let catchClauseParamIdentifierName: string|null,
             innerFunctionParamIdentifierName: string|null,
@@ -314,7 +314,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     });
 
     describe('Variant #9: object pattern as variable declarator', () => {
-        const objectPatternVariableDeclaratorRegExp: RegExp = /var *\{ *bar *\} *= *\{ *'bar' *: *'foo' *\};/;
+        const objectPatternVariableDeclaratorRegExp: RegExp = /var \{ *bar *\} *= *\{ *'bar' *: *'foo' *\};/;
         const variableUsageRegExp: RegExp = /console\['log'\]\(bar\);/;
 
         let obfuscatedCode: string;
@@ -340,7 +340,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     });
 
     describe('Variant #10: array pattern as variable declarator', () => {
-        const objectPatternVariableDeclaratorRegExp: RegExp = /var *\[ *(_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6}) *\] *= *\[0x1, *0x2\];/;
+        const objectPatternVariableDeclaratorRegExp: RegExp = /var \[ *(_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6}) *\] *= *\[0x1, *0x2\];/;
         const variableUsageRegExp: RegExp = /console\['log'\]\((_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6})\);/;
 
         let obfuscatedCode: string,
@@ -383,7 +383,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     });
 
     describe('Variant #11: computed object expression identifier', () => {
-        const computedObjectExpressionRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/;
+        const computedObjectExpressionRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/;
 
         let obfuscatedCode: string;
 
@@ -426,7 +426,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
 
     describe('Variant #13: already renamed identifiers shouldn\'t be renamed twice', () => {
         describe('Variant #1', () => {
-            const variableDeclarationRegExp: RegExp = /var *d *= *0x1;/;
+            const variableDeclarationRegExp: RegExp = /var d *= *0x1;/;
             const functionDeclarationRegExp1: RegExp = /function *e *\(\) *{}/;
             const functionDeclarationRegExp2: RegExp = /function *f *\(\) *{}/;
             const functionDeclarationRegExp3: RegExp = /function *g *\(\) *{}/;
@@ -468,10 +468,10 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
         });
 
         describe('Variant #2', () => {
-            const variableDeclarationRegExp1: RegExp = /var *d *= *0x1;/;
-            const variableDeclarationRegExp2: RegExp = /var *e;/;
+            const variableDeclarationRegExp1: RegExp = /var d *= *0x1;/;
+            const variableDeclarationRegExp2: RegExp = /var e;/;
             const functionDeclarationRegExp: RegExp = /function *f *\(\) *{/;
-            const variableDeclarationRegExp3: RegExp = /var *g *= *function *\(\) *{}/;
+            const variableDeclarationRegExp3: RegExp = /var g *= *function *\(\) *{}/;
 
             let obfuscatedCode: string;
 
@@ -555,8 +555,8 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     });
 
     describe('Variant #16: array rest', () => {
-        const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\['foo', *'bar', *'baz'\];/;
-        const objectRestRegExp: RegExp = /var *\[_0x[a-f0-9]{4,6}, *\.\.\.*_0x[a-f0-9]{4,6}] *= *_0x[a-f0-9]{4,6};/;
+        const objectRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\['foo', *'bar', *'baz'\];/;
+        const objectRestRegExp: RegExp = /var \[_0x[a-f0-9]{4,6}, *\.\.\.*_0x[a-f0-9]{4,6}] *= *_0x[a-f0-9]{4,6};/;
 
         let obfuscatedCode: string;
 
@@ -581,8 +581,8 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     });
 
     describe('Variant #17: object rest', () => {
-        const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/;
-        const objectRestRegExp: RegExp = /var *\{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/;
+        const objectRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/;
+        const objectRestRegExp: RegExp = /var \{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/;
 
         let obfuscatedCode: string;
 
@@ -607,7 +607,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     });
 
     describe('Variant #18: destructing assignment without declaration #1', () => {
-        const variablesDeclaration: RegExp = /var *a, *b, *_0x[a-f0-9]{4,6};/;
+        const variablesDeclaration: RegExp = /var a, *b, *_0x[a-f0-9]{4,6};/;
         const destructingAssignmentRegExp: RegExp = /\({ *a, *b *} *= *{ *'a' *: *0x1, *'b' *: *0x2 *}\);/;
         const identifierAssignmentRegExp: RegExp = /_0x[a-f0-9]{4,6} *= *0x3;/;
         const variablesUsageRegExp: RegExp = /console\['log']\(a, *b, *_0x[a-f0-9]{4,6}\);/;
@@ -643,7 +643,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => {
     });
 
     describe('Variant #19: destructing assignment without declaration #2', () => {
-        const variablesDeclaration: RegExp = /var *_0x[a-f0-9]{4,6} *= *'a', *_0x[a-f0-9]{4,6} *= *'b', *_0x[a-f0-9]{4,6};/;
+        const variablesDeclaration: RegExp = /var _0x[a-f0-9]{4,6} *= *'a', *_0x[a-f0-9]{4,6} *= *'b', *_0x[a-f0-9]{4,6};/;
         const destructingAssignmentRegExp: RegExp = /\({ *\[_0x[a-f0-9]{4,6}]: *_0x[a-f0-9]{4,6}, *\[_0x[a-f0-9]{4,6}]: *_0x[a-f0-9]{4,6} *} *= *{ *'a' *: *0x1, *'b' *: *0x2 *}\);/;
         const identifierAssignmentRegExp: RegExp = /_0x[a-f0-9]{4,6} *= *0x3;/;
         const variablesUsageRegExp: RegExp = /console\['log']\(_0x[a-f0-9]{4,6}, *_0x[a-f0-9]{4,6}, *_0x[a-f0-9]{4,6}\);/;

+ 4 - 4
test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts

@@ -8,7 +8,7 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac
 
 describe('CommentsTransformer', () => {
     describe('Variant #1: simple comment without preserved words', () => {
-        const regExp: RegExp = /^var *test *= *0x1;$/;
+        const regExp: RegExp = /^var test *= *0x1;$/;
 
         let obfuscatedCode: string;
 
@@ -29,7 +29,7 @@ describe('CommentsTransformer', () => {
     });
 
     describe('Variant #2: simple comment with preserved words', () => {
-        const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var *test *= *0x1;$/;
+        const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var test *= *0x1;$/;
 
         let obfuscatedCode: string;
 
@@ -50,7 +50,7 @@ describe('CommentsTransformer', () => {
     });
 
     describe('Variant #3: comment with preserved and non-preserved words', () => {
-        const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var *test *= *0x1;$/;
+        const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var test *= *0x1;$/;
 
         let obfuscatedCode: string;
 
@@ -76,7 +76,7 @@ describe('CommentsTransformer', () => {
             ` *\\* *@license *\\n` +
             ` *\\* *test\\n` +
             ` *\\*\\/\\n` +
-            `var *test *= *0x1;` +
+            `var test *= *0x1;` +
             ` *\\/\\*\\* *@preserved *\\*\\/$` +
         ``);
 

+ 3 - 3
test/functional-tests/node-transformers/preparing-transformers/eval-call-expression-transformer/EvalCallExpressionTransformer.spec.ts

@@ -92,7 +92,7 @@ describe('EvalCallExpressionTransformer', () => {
     });
 
     describe('Variant #4: string array calls wrapper call', () => {
-        const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['log', *'bar'];/;
+        const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['log', *'bar'];/;
         const stringArrayCallsWrapperRegExp: RegExp = /eval *\('console\[_0x([a-f0-9]){4,6}\(\\'0x0\\'\)]\(_0x([a-f0-9]){4,6}\(\\'0x1\\'\)\);'\);/;
 
         let obfuscatedCode: string;
@@ -154,7 +154,7 @@ describe('EvalCallExpressionTransformer', () => {
         const functionIdentifierRegExp: RegExp = /function *_0x(?:[a-f0-9]){4,6} *\((_0x(?:[a-f0-9]){4,6}), *(_0x(?:[a-f0-9]){4,6})\)/;
         const evalExpressionMatch: string = `` +
             `eval *\\('` +
-                `var *(_0x(?:[a-f0-9]){4,6}) *= *(_0x(?:[a-f0-9]){4,6}) *\\+ *(_0x(?:[a-f0-9]){4,6});` +
+                `var (_0x(?:[a-f0-9]){4,6}) *= *(_0x(?:[a-f0-9]){4,6}) *\\+ *(_0x(?:[a-f0-9]){4,6});` +
                 `eval\\(\\\\'` +
                     `(_0x(?:[a-f0-9]){4,6}) *\\+ *(_0x(?:[a-f0-9]){4,6});` +
                 `\\\\'\\);` +
@@ -280,7 +280,7 @@ describe('EvalCallExpressionTransformer', () => {
     describe('Variant #9: integration with control flow flattening', () => {
         const variableMatch: string = '_0x([a-f0-9]){4,6}';
         const controlFlowStorageNodeMatch: string = `` +
-            `var *${variableMatch} *= *\\{` +
+            `var ${variableMatch} *= *\\{` +
                 `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` +
                     `return *${variableMatch} *\\+ *${variableMatch};` +
                 `\\}` +

+ 1 - 1
test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts

@@ -11,7 +11,7 @@ describe('BlackListObfuscatingGuard', () => {
         describe('`\'use strict\';` operator', () => {
             const useStrictOperatorRegExp: RegExp = /'use *strict';/;
             const stringArrayLatinRegExp: RegExp = /var _0x(\w){4} *= *\['abc'\];/;
-            const stringArrayCallRegExp: RegExp = /var *test *= *_0x(\w){4}\('0x0'\);$/;
+            const stringArrayCallRegExp: RegExp = /var test *= *_0x(\w){4}\('0x0'\);$/;
 
             let obfuscatedCode: string;
 

+ 14 - 14
test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts

@@ -9,8 +9,8 @@ import { readFileAsString } from '../../../../../helpers/readFileAsString';
 describe('ConditionalCommentObfuscatingGuard', () => {
     describe('check', () => {
         describe('Variant #1: `disable` conditional comment', () => {
-            const obfuscatedVariableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x1;/;
-            const ignoredVariableDeclarationRegExp: RegExp = /var *bar *= *2;/;
+            const obfuscatedVariableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1;/;
+            const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *2;/;
             const consoleLogRegExp: RegExp = /console.log\(_0x([a-f0-9]){4,6}\);/;
 
             let obfuscatedCode: string;
@@ -40,9 +40,9 @@ describe('ConditionalCommentObfuscatingGuard', () => {
         });
 
         describe('Variant #2: `disable` and `enable` conditional comments #1', () => {
-            const obfuscatedVariableDeclaration1RegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x1;/;
-            const obfuscatedVariableDeclaration2RegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x3;/;
-            const ignoredVariableDeclarationRegExp: RegExp = /var *bar *= *2;/;
+            const obfuscatedVariableDeclaration1RegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1;/;
+            const obfuscatedVariableDeclaration2RegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x3;/;
+            const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *2;/;
 
             let obfuscatedCode: string;
 
@@ -71,8 +71,8 @@ describe('ConditionalCommentObfuscatingGuard', () => {
         });
 
         describe('Variant #3: `disable` and `enable` conditional comments #2', () => {
-            const ignoredVariableDeclarationRegExp: RegExp = /var *foo *= *1;/;
-            const obfuscatedVariableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x2;/;
+            const ignoredVariableDeclarationRegExp: RegExp = /var foo *= *1;/;
+            const obfuscatedVariableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x2;/;
 
             let obfuscatedCode: string;
 
@@ -98,8 +98,8 @@ describe('ConditionalCommentObfuscatingGuard', () => {
         });
 
         describe('Variant #4: `disable` conditional comment from beginning of the code', () => {
-            const ignoredVariableDeclaration1RegExp: RegExp = /var *foo *= *1;/;
-            const ignoredVariableDeclaration2RegExp: RegExp = /var *bar *= *2;/;
+            const ignoredVariableDeclaration1RegExp: RegExp = /var foo *= *1;/;
+            const ignoredVariableDeclaration2RegExp: RegExp = /var bar *= *2;/;
 
             let obfuscatedCode: string;
 
@@ -124,11 +124,11 @@ describe('ConditionalCommentObfuscatingGuard', () => {
         });
 
         describe('Variant #5: `disable` and `enable` conditional comments with dead code injection', () => {
-            const obfuscatedFunctionExpressionRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *function *\(_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}\) *{/g;
+            const obfuscatedFunctionExpressionRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *function *\(_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}\) *{/g;
             const expectedObfuscatedFunctionExpressionLength: number = 3;
 
-            const ignoredFunctionExpression1RegExp: RegExp = /var *bar *= *function *\(a, *b, *c\) *{/;
-            const ignoredFunctionExpression2RegExp: RegExp = /var *baz *= *function *\(a, *b, *c\) *{/;
+            const ignoredFunctionExpression1RegExp: RegExp = /var bar *= *function *\(a, *b, *c\) *{/;
+            const ignoredFunctionExpression2RegExp: RegExp = /var baz *= *function *\(a, *b, *c\) *{/;
 
             const obfuscatedFunctionCallRegExp: RegExp = /_0x([a-f0-9]){4,6}\( *\);/g;
             const expectedObfuscatedFunctionCallsLength: number = 3;
@@ -194,8 +194,8 @@ describe('ConditionalCommentObfuscatingGuard', () => {
         });
 
         describe('Variant #6: `disable` and `enable` conditional comments with control flow flattening', () => {
-            const obfuscatedVariableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['[a-zA-Z0-9]{1,5}'];/;
-            const ignoredVariableDeclarationRegExp: RegExp = /var *bar *= *'bar';/;
+            const obfuscatedVariableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['[a-zA-Z0-9]{1,5}'];/;
+            const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *'bar';/;
 
             let obfuscatedCode: string;
 

+ 34 - 34
test/functional-tests/storages/string-array-storage/StringArrayStorage.spec.ts

@@ -15,8 +15,8 @@ describe('StringArrayStorage', () => {
             const delta: number = 0.1;
             const expectedVariantProbability: number = 1;
 
-            const stringArrayVariant1RegExp1: RegExp = /var *_0x([a-f0-9]){4} *= *\['test'];/g;
-            const literalNodeVariant1RegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
+            const stringArrayVariant1RegExp1: RegExp = /var _0x([a-f0-9]){4} *= *\['test'];/g;
+            const literalNodeVariant1RegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
 
             let stringArrayVariant1Probability: number,
                 literalNodeVariant1Probability: number;
@@ -74,15 +74,15 @@ describe('StringArrayStorage', () => {
             const literalNodeVariantsCount: number = 1;
 
             const stringArrayVariantRegExps: RegExp[] = [
-                /var *_0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g,
-                /var *_0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g,
-                /var *_0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g
+                /var _0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g,
+                /var _0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g,
+                /var _0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g
             ];
             const literalNodeVariantRegExps: RegExp[] = [
                 new RegExp(
-                    `var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
-                    `var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
-                    `var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
+                    `var foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
+                    `var bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
+                    `var baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
                 )
             ];
 
@@ -156,8 +156,8 @@ describe('StringArrayStorage', () => {
             const delta: number = 0.1;
             const expectedVariantProbability: number = 1;
 
-            const stringArrayVariantRegExp1: RegExp = /var *_0x([a-f0-9]){4} *= *\['test'];/g;
-            const literalNodeVariant1RegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
+            const stringArrayVariantRegExp1: RegExp = /var _0x([a-f0-9]){4} *= *\['test'];/g;
+            const literalNodeVariant1RegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
 
             let stringArrayVariant1Probability: number,
                 literalNodeVariant1Probability: number;
@@ -213,44 +213,44 @@ describe('StringArrayStorage', () => {
             const variantsCount: number = 6;
 
             const stringArrayVariantRegExps: RegExp[] = [
-                /var *_0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g,
-                /var *_0x([a-f0-9]){4} *= *\['foo', *'baz', *'bar'];/g,
-                /var *_0x([a-f0-9]){4} *= *\['bar', *'foo', *'baz'];/g,
-                /var *_0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g,
-                /var *_0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g,
-                /var *_0x([a-f0-9]){4} *= *\['baz', *'bar', *'foo'];/g
+                /var _0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g,
+                /var _0x([a-f0-9]){4} *= *\['foo', *'baz', *'bar'];/g,
+                /var _0x([a-f0-9]){4} *= *\['bar', *'foo', *'baz'];/g,
+                /var _0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g,
+                /var _0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g,
+                /var _0x([a-f0-9]){4} *= *\['baz', *'bar', *'foo'];/g
             ];
 
             const literalNodeVariantRegExps: RegExp[] = [
                 new RegExp(
-                    `var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
-                    `var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
-                    `var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
+                    `var foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
+                    `var bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
+                    `var baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
                 ),
                 new RegExp(
-                    `var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
-                    `var *bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
-                    `var *baz *= *_0x([a-f0-9]){4}\\('0x1'\\);`
+                    `var foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
+                    `var bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
+                    `var baz *= *_0x([a-f0-9]){4}\\('0x1'\\);`
                 ),
                 new RegExp(
-                    `var *foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
-                    `var *bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
-                    `var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
+                    `var foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
+                    `var bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
+                    `var baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
                 ),
                 new RegExp(
-                    `var *foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
-                    `var *bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
-                    `var *baz *= *_0x([a-f0-9]){4}\\('0x0'\\);`
+                    `var foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
+                    `var bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
+                    `var baz *= *_0x([a-f0-9]){4}\\('0x0'\\);`
                 ),
                 new RegExp(
-                    `var *foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
-                    `var *bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
-                    `var *baz *= *_0x([a-f0-9]){4}\\('0x1'\\);`
+                    `var foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
+                    `var bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
+                    `var baz *= *_0x([a-f0-9]){4}\\('0x1'\\);`
                 ),
                 new RegExp(
-                    `var *foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
-                    `var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
-                    `var *baz *= *_0x([a-f0-9]){4}\\('0x0'\\);`
+                    `var foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
+                    `var bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
+                    `var baz *= *_0x([a-f0-9]){4}\\('0x0'\\);`
                 )
             ];