Explorar o código

Renamed MethodDefinitionTransformer => ClassFieldTransformer. Added tests.

sanex %!s(int64=3) %!d(string=hai) anos
pai
achega
f6d865d6e9

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/index.browser.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/index.cli.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/index.js


+ 2 - 2
package.json

@@ -30,7 +30,7 @@
     "chance": "1.1.7",
     "class-validator": "0.13.1",
     "commander": "8.0.0",
-    "eslint-scope": "github:eslint/eslint-scope#ad618bc5001f02492fe9bdc6318fa1ae179b0260",
+    "eslint-scope": "github:eslint/eslint-scope#master",
     "fast-deep-equal": "3.1.3",
     "inversify": "5.1.1",
     "js-string-escape": "1.0.1",
@@ -75,7 +75,7 @@
     "eslint-plugin-unicorn": "34.0.1",
     "fork-ts-checker-notifier-webpack-plugin": "4.0.0",
     "fork-ts-checker-webpack-plugin": "6.2.12",
-    "mocha": "9.0.1",
+    "mocha": "9.0.2",
     "nyc": "15.1.0",
     "pjson": "1.0.9",
     "pre-commit": "1.2.2",

+ 1 - 1
src/JavaScriptObfuscator.ts

@@ -65,6 +65,7 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator {
         NodeTransformer.BooleanLiteralTransformer,
         NodeTransformer.BlockStatementControlFlowTransformer,
         NodeTransformer.BlockStatementSimplifyTransformer,
+        NodeTransformer.ClassFieldTransformer,
         NodeTransformer.CommentsTransformer,
         NodeTransformer.CustomCodeHelpersTransformer,
         NodeTransformer.DeadCodeInjectionTransformer,
@@ -78,7 +79,6 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator {
         NodeTransformer.RenamePropertiesTransformer,
         NodeTransformer.MemberExpressionTransformer,
         NodeTransformer.MetadataTransformer,
-        NodeTransformer.MethodDefinitionTransformer,
         NodeTransformer.NumberLiteralTransformer,
         NodeTransformer.NumberToNumericalExpressionTransformer,
         NodeTransformer.ObfuscatingGuardsTransformer,

+ 3 - 3
src/container/modules/node-transformers/ConvertingTransformersModule.ts

@@ -12,7 +12,7 @@ import { BasePropertiesExtractor } from '../../../node-transformers/converting-t
 import { BooleanLiteralTransformer } from '../../../node-transformers/converting-transformers/BooleanLiteralTransformer';
 import { ExportSpecifierTransformer } from '../../../node-transformers/converting-transformers/ExportSpecifierTransformer';
 import { MemberExpressionTransformer } from '../../../node-transformers/converting-transformers/MemberExpressionTransformer';
-import { MethodAndPropertyDefinitionTransformer } from '../../../node-transformers/converting-transformers/MethodAndPropertyDefinitionTransformer';
+import { ClassFieldTransformer } from '../../../node-transformers/converting-transformers/ClassFieldTransformer';
 import { NumberLiteralTransformer } from '../../../node-transformers/converting-transformers/NumberLiteralTransformer';
 import { NumberToNumericalExpressionTransformer } from '../../../node-transformers/converting-transformers/NumberToNumericalExpressionTransformer';
 import { ObjectExpressionKeysTransformer } from '../../../node-transformers/converting-transformers/ObjectExpressionKeysTransformer';
@@ -37,8 +37,8 @@ export const convertingTransformersModule: interfaces.ContainerModule = new Cont
         .whenTargetNamed(NodeTransformer.MemberExpressionTransformer);
 
     bind<INodeTransformer>(ServiceIdentifiers.INodeTransformer)
-        .to(MethodAndPropertyDefinitionTransformer)
-        .whenTargetNamed(NodeTransformer.MethodDefinitionTransformer);
+        .to(ClassFieldTransformer)
+        .whenTargetNamed(NodeTransformer.ClassFieldTransformer);
 
     bind<INodeTransformer>(ServiceIdentifiers.INodeTransformer)
         .to(NumberLiteralTransformer)

+ 1 - 1
src/enums/node-transformers/NodeTransformer.ts

@@ -2,6 +2,7 @@ export enum NodeTransformer {
     BooleanLiteralTransformer = 'BooleanLiteralTransformer',
     BlockStatementControlFlowTransformer = 'BlockStatementControlFlowTransformer',
     BlockStatementSimplifyTransformer = 'BlockStatementSimplifyTransformer',
+    ClassFieldTransformer = 'ClassFieldTransformer',
     CommentsTransformer = 'CommentsTransformer',
     CustomCodeHelpersTransformer = 'CustomCodeHelpersTransformer',
     DeadCodeInjectionIdentifiersTransformer = 'DeadCodeInjectionIdentifiersTransformer',
@@ -16,7 +17,6 @@ export enum NodeTransformer {
     LabeledStatementTransformer = 'LabeledStatementTransformer',
     MemberExpressionTransformer = 'MemberExpressionTransformer',
     MetadataTransformer = 'MetadataTransformer',
-    MethodDefinitionTransformer = 'MethodDefinitionTransformer',
     NumberLiteralTransformer = 'NumberLiteralTransformer',
     NumberToNumericalExpressionTransformer = 'NumberToNumericalExpressionTransformer',
     ObfuscatingGuardsTransformer = 'ObfuscatingGuardsTransformer',

+ 6 - 3
src/node-transformers/converting-transformers/MethodAndPropertyDefinitionTransformer.ts → src/node-transformers/converting-transformers/ClassFieldTransformer.ts

@@ -16,17 +16,20 @@ import { NodeGuards } from '../../node/NodeGuards';
 /**
  * replaces:
  *     foo () { //... };
+ *     foo = 1;
  *
  * or
  *     'foo' () { //... };
+ *     'foo' = 1;
  *
  * on:
  *     ['foo'] () { //... };
+ *     ['foo'] = 1;
  *
  * Literal node will be obfuscated by LiteralTransformer
  */
 @injectable()
-export class MethodAndPropertyDefinitionTransformer extends AbstractNodeTransformer {
+export class ClassFieldTransformer extends AbstractNodeTransformer {
     /**
      * @type {string[]}
      */
@@ -99,7 +102,7 @@ export class MethodAndPropertyDefinitionTransformer extends AbstractNodeTransfor
         keyNode: ESTree.Identifier
     ): ESTree.MethodDefinition | ESTree.PropertyDefinition {
         if (
-            !MethodAndPropertyDefinitionTransformer.ignoredNames.includes(keyNode.name)
+            !ClassFieldTransformer.ignoredNames.includes(keyNode.name)
             && !classFieldNode.computed
         ) {
             classFieldNode.computed = true;
@@ -120,7 +123,7 @@ export class MethodAndPropertyDefinitionTransformer extends AbstractNodeTransfor
     ): ESTree.MethodDefinition | ESTree.PropertyDefinition {
         if (
             typeof keyNode.value === 'string'
-            && !MethodAndPropertyDefinitionTransformer.ignoredNames.includes(keyNode.value)
+            && !ClassFieldTransformer.ignoredNames.includes(keyNode.value)
             && !classFieldNode.computed
         ) {
             classFieldNode.computed = true;

+ 311 - 0
test/functional-tests/node-transformers/converting-transformers/class-field-transformer/ClassFieldTransformer.spec.ts

@@ -0,0 +1,311 @@
+import { assert } from 'chai';
+
+import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes';
+
+import { readFileAsString } from '../../../../helpers/readFileAsString';
+
+import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';
+
+describe('ClassFieldTransformer', () => {
+    describe('Variant #1: `MethodDefinition` node', () => {
+        describe('Variant #1: identifier key', () => {
+            describe('Variant #1: default behaviour', () => {
+                const regExp: RegExp = /\['bar'\]\(\)\{\}/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should replace method definition node `key` property with square brackets literal', () => {
+                    assert.match(obfuscatedCode, regExp);
+                });
+            });
+
+            describe('Variant #2: `stringArray` option is enabled', () => {
+                const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['property', *'bar'\];/;
+                const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\(0x1\)\]\(\)\{\}/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET,
+                            stringArray: true,
+                            stringArrayThreshold: 1
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should add method definition node `key` property to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayRegExp);
+                });
+
+                it('should replace method definition node `key` property with call to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayCallRegExp);
+                });
+            });
+
+            describe('Variant #3: `constructor` key', () => {
+                const regExp: RegExp = /constructor\(\)\{\}/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('shouldn\'t transform method definition node with `constructor` key', () => {
+                    assert.match(obfuscatedCode, regExp);
+                });
+            });
+        });
+
+        describe('Variant #2: literal key', () => {
+            describe('Variant #1: Default behaviour', () => {
+                const regExp: RegExp = /\['bar'\]\(\)\{\}/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should replace method definition node `key` property with square brackets literal', () => {
+                    assert.match(obfuscatedCode, regExp);
+                });
+            });
+
+            describe('Variant #2: `stringArray` option is enabled', () => {
+                const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['property', *'constructor', *'bar'];/;
+                const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\(0x2\)\]\(\)\{\}/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET,
+                            stringArray: true,
+                            stringArrayThreshold: 1
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should add method definition node `key` property to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayRegExp);
+                });
+
+                it('should replace method definition node `key` property with call to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayCallRegExp);
+                });
+            });
+
+            describe('Variant #3: `constructor` key', () => {
+                const regExp: RegExp = /'constructor'\(\)\{\}/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('shouldn\'t transform method definition node with `constructor` key', () => {
+                    assert.match(obfuscatedCode, regExp);
+                });
+            });
+        });
+
+        describe('Variant #3: async `get()` method', () => {
+            const classDeclarationRegExp: RegExp = /class *(_0x[a-f0-9]{4,6}) *{/;
+            const asyncMethodRegExp: RegExp = /static *async *\['get'] *\(\) *{}/;
+
+            let obfuscatedCode: string;
+
+            before(() => {
+                const code: string = readFileAsString(__dirname + '/fixtures/async-get-method.js');
+
+                obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                    code,
+                    {
+                        ...NO_ADDITIONAL_NODES_PRESET,
+                    }
+                ).getObfuscatedCode();
+            });
+
+            it('Match #1: should rename class declaration name', () => {
+                assert.match(obfuscatedCode, classDeclarationRegExp);
+            });
+
+            it('Match #2: should correctly rename async method name', () => {
+                assert.match(obfuscatedCode, asyncMethodRegExp);
+            });
+        });
+    });
+
+    describe('Variant #2: `PropertyDefinition` node', () => {
+        describe('Variant #1: identifier key', () => {
+            describe('Variant #1: default behaviour', () => {
+                const regExp: RegExp = /\['property'\] *= *0x1;/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should replace property definition node `key` property with square brackets literal', () => {
+                    assert.match(obfuscatedCode, regExp);
+                });
+            });
+
+            describe('Variant #2: `stringArray` option is enabled', () => {
+                const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['property', *'bar'\];/;
+                const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\(0x0\)\] *= *0x1;/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET,
+                            stringArray: true,
+                            stringArrayThreshold: 1
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should add property definition node `key` property to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayRegExp);
+                });
+
+                it('should replace property definition node `key` property with call to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayCallRegExp);
+                });
+            });
+        });
+
+        describe('Variant #2: literal key', () => {
+            describe('Variant #1: Default behaviour', () => {
+                const regExp: RegExp = /\['property'\] *= *0x1;/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should replace property definition node `key` property with square brackets literal', () => {
+                    assert.match(obfuscatedCode, regExp);
+                });
+            });
+
+            describe('Variant #2: `stringArray` option is enabled', () => {
+                const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['property', *'constructor', *'bar'];/;
+                const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\(0x0\)\] *= *0x1;/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET,
+                            stringArray: true,
+                            stringArrayThreshold: 1
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('should add property definition node `key` property to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayRegExp);
+                });
+
+                it('should replace property definition node `key` property with call to string array', () => {
+                    assert.match(obfuscatedCode,  stringArrayCallRegExp);
+                });
+            });
+        });
+
+        describe('Variant #3: async `property` method', () => {
+            const classDeclarationRegExp: RegExp = /class *(_0x[a-f0-9]{4,6}) *{/;
+            const asyncMethodRegExp: RegExp = /static \['property'] *= *async *\(\) *=> *{}/;
+
+            let obfuscatedCode: string;
+
+            before(() => {
+                const code: string = readFileAsString(__dirname + '/fixtures/async-get-method.js');
+
+                obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                    code,
+                    {
+                        ...NO_ADDITIONAL_NODES_PRESET,
+                    }
+                ).getObfuscatedCode();
+            });
+
+            it('Match #1: should rename class declaration name', () => {
+                assert.match(obfuscatedCode, classDeclarationRegExp);
+            });
+
+            it('Match #2: should correctly rename async property method name', () => {
+                assert.match(obfuscatedCode, asyncMethodRegExp);
+            });
+        });
+    });
+});

+ 1 - 0
test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/fixtures/async-get-method.js → test/functional-tests/node-transformers/converting-transformers/class-field-transformer/fixtures/async-get-method.js

@@ -1,5 +1,6 @@
 (function () {
     class Foo {
+        static property = async () => {};
         static async get() {}
     }
 })();

+ 1 - 0
test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/fixtures/identifier-key.js → test/functional-tests/node-transformers/converting-transformers/class-field-transformer/fixtures/identifier-key.js

@@ -1,4 +1,5 @@
 class Foo {
+    property = 1;
     constructor () {}
     bar () {}
 }

+ 1 - 0
test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/fixtures/literal-key.js → test/functional-tests/node-transformers/converting-transformers/class-field-transformer/fixtures/literal-key.js

@@ -1,4 +1,5 @@
 class Foo {
+    'property' = 1;
     'constructor' () {}
     'bar' () {}
 }

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

@@ -1,179 +0,0 @@
-import { assert } from 'chai';
-
-import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes';
-
-import { readFileAsString } from '../../../../helpers/readFileAsString';
-
-import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';
-
-describe('MethodDefinitionTransformer', () => {
-    describe('Variant #1: identifier key', () => {
-        describe('Variant #1: default behaviour', () => {
-            const regExp: RegExp = /\['bar'\]\(\)\{\}/;
-
-            let obfuscatedCode: string;
-
-            before(() => {
-                const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
-
-                obfuscatedCode = JavaScriptObfuscator.obfuscate(
-                    code,
-                    {
-                        ...NO_ADDITIONAL_NODES_PRESET
-                    }
-                ).getObfuscatedCode();
-            });
-
-            it('should replace method definition node `key` property with square brackets literal', () => {
-                assert.match(obfuscatedCode, regExp);
-            });
-        });
-
-        describe('Variant #2: `stringArray` option is enabled', () => {
-            const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['bar'\];/;
-            const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\(0x0\)\]\(\)\{\}/;
-
-            let obfuscatedCode: string;
-
-            before(() => {
-                const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
-
-                obfuscatedCode = JavaScriptObfuscator.obfuscate(
-                    code,
-                    {
-                        ...NO_ADDITIONAL_NODES_PRESET,
-                        stringArray: true,
-                        stringArrayThreshold: 1
-                    }
-                ).getObfuscatedCode();
-            });
-
-            it('should add method definition node `key` property to string array', () => {
-                assert.match(obfuscatedCode,  stringArrayRegExp);
-            });
-
-            it('should replace method definition node `key` property with call to string array', () => {
-                assert.match(obfuscatedCode,  stringArrayCallRegExp);
-            });
-        });
-
-        describe('Variant #3: `constructor` key', () => {
-            const regExp: RegExp = /constructor\(\)\{\}/;
-
-            let obfuscatedCode: string;
-
-            before(() => {
-                const code: string = readFileAsString(__dirname + '/fixtures/identifier-key.js');
-
-                obfuscatedCode = JavaScriptObfuscator.obfuscate(
-                    code,
-                    {
-                        ...NO_ADDITIONAL_NODES_PRESET
-                    }
-                ).getObfuscatedCode();
-            });
-
-            it('shouldn\'t transform method definition node with `constructor` key', () => {
-                assert.match(obfuscatedCode, regExp);
-            });
-        });
-    });
-
-    describe('Variant #2: literal key', () => {
-        describe('Variant #1: Default behaviour', () => {
-            const regExp: RegExp = /\['bar'\]\(\)\{\}/;
-
-            let obfuscatedCode: string;
-
-            before(() => {
-                const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
-
-                obfuscatedCode = JavaScriptObfuscator.obfuscate(
-                    code,
-                    {
-                        ...NO_ADDITIONAL_NODES_PRESET
-                    }
-                ).getObfuscatedCode();
-            });
-
-            it('should replace method definition node `key` property with square brackets literal', () => {
-                assert.match(obfuscatedCode, regExp);
-            });
-        });
-
-        describe('Variant #2: `stringArray` option is enabled', () => {
-            const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['constructor', *'bar'];/;
-            const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\(0x1\)\]\(\)\{\}/;
-
-            let obfuscatedCode: string;
-
-            before(() => {
-                const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
-
-                obfuscatedCode = JavaScriptObfuscator.obfuscate(
-                    code,
-                    {
-                        ...NO_ADDITIONAL_NODES_PRESET,
-                        stringArray: true,
-                        stringArrayThreshold: 1
-                    }
-                ).getObfuscatedCode();
-            });
-
-            it('should add method definition node `key` property to string array', () => {
-                assert.match(obfuscatedCode,  stringArrayRegExp);
-            });
-
-            it('should replace method definition node `key` property with call to string array', () => {
-                assert.match(obfuscatedCode,  stringArrayCallRegExp);
-            });
-        });
-
-        describe('Variant #3: `constructor` key', () => {
-            const regExp: RegExp = /'constructor'\(\)\{\}/;
-
-            let obfuscatedCode: string;
-
-            before(() => {
-                const code: string = readFileAsString(__dirname + '/fixtures/literal-key.js');
-
-                obfuscatedCode = JavaScriptObfuscator.obfuscate(
-                    code,
-                    {
-                        ...NO_ADDITIONAL_NODES_PRESET
-                    }
-                ).getObfuscatedCode();
-            });
-
-            it('shouldn\'t transform method definition node with `constructor` key', () => {
-                assert.match(obfuscatedCode, regExp);
-            });
-        });
-    });
-
-    describe('Variant #3: async `get()` method', () => {
-        const classDeclarationRegExp: RegExp = /class *(_0x[a-f0-9]{4,6}) *{/;
-        const asyncMethodRegExp: RegExp = /static *async *\['get'] *\(\) *{}/;
-
-        let obfuscatedCode: string;
-
-        before(() => {
-            const code: string = readFileAsString(__dirname + '/fixtures/async-get-method.js');
-
-            obfuscatedCode = JavaScriptObfuscator.obfuscate(
-                code,
-                {
-                    ...NO_ADDITIONAL_NODES_PRESET,
-                }
-            ).getObfuscatedCode();
-        });
-
-        it('Match #1: should rename class declaration name', () => {
-            assert.match(obfuscatedCode, classDeclarationRegExp);
-        });
-
-        it('Match #2: should correctly rename async method name', () => {
-            assert.match(obfuscatedCode, asyncMethodRegExp);
-        });
-    });
-});

+ 1 - 1
test/index.spec.ts

@@ -91,9 +91,9 @@ import './functional-tests/node-transformers/control-flow-transformers/control-f
 import './functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec';
 import './functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec';
 import './functional-tests/node-transformers/converting-transformers/boolean-literal-transformer/BooleanLiteralTransformer.spec';
+import './functional-tests/node-transformers/converting-transformers/class-field-transformer/ClassFieldTransformer.spec';
 import './functional-tests/node-transformers/converting-transformers/export-specifier-transformer/ExportSpecifierTransformer.spec';
 import './functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec';
-import './functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec';
 import './functional-tests/node-transformers/converting-transformers/number-literal-transformer/NumberLiteralTransformer.spec';
 import './functional-tests/node-transformers/converting-transformers/numbers-to-numerical-expressions-transformer/NumbersToNumericalExpressionsTransformer.spec';
 import './functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec';

+ 48 - 26
yarn.lock

@@ -1105,6 +1105,14 @@ anymatch@~3.1.1:
     normalize-path "^3.0.0"
     picomatch "^2.0.4"
 
+anymatch@~3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
 append-transform@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz"
@@ -1367,20 +1375,20 @@ check-error@^1.0.2:
   resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz"
   integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
 
[email protected].1:
-  version "3.5.1"
-  resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz"
-  integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
[email protected].2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
+  integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
   dependencies:
-    anymatch "~3.1.1"
+    anymatch "~3.1.2"
     braces "~3.0.2"
-    glob-parent "~5.1.0"
+    glob-parent "~5.1.2"
     is-binary-path "~2.1.0"
     is-glob "~4.0.1"
     normalize-path "~3.0.0"
-    readdirp "~3.5.0"
+    readdirp "~3.6.0"
   optionalDependencies:
-    fsevents "~2.3.1"
+    fsevents "~2.3.2"
 
 chokidar@^3.4.2:
   version "3.4.3"
@@ -1945,12 +1953,12 @@ [email protected]:
     esrecurse "^4.1.0"
     estraverse "^4.1.1"
 
[email protected], eslint-scope@^5.1.1, "eslint-scope@github:eslint/eslint-scope#ad618bc5001f02492fe9bdc6318fa1ae179b0260":
[email protected], eslint-scope@^5.1.1, "eslint-scope@github:eslint/eslint-scope#master":
   version "5.1.1"
-  resolved "https://codeload.github.com/eslint/eslint-scope/tar.gz/ad618bc5001f02492fe9bdc6318fa1ae179b0260"
+  resolved "https://codeload.github.com/eslint/eslint-scope/tar.gz/0b4a5f132fb65520eee31bcd166078656b6e158e"
   dependencies:
     esrecurse "^4.3.0"
-    estraverse "^4.1.1"
+    estraverse "^5.2.0"
 
 eslint-template-visitor@^2.3.2:
   version "2.3.2"
@@ -2309,9 +2317,9 @@ fsevents@~2.1.2:
   resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz"
   integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
 
-fsevents@~2.3.1:
+fsevents@~2.3.2:
   version "2.3.2"
-  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
   integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
 
 function-bind@^1.1.1:
@@ -2363,7 +2371,7 @@ get-stream@^6.0.0:
   resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz"
   integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==
 
-glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0:
+glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
   integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -3166,15 +3174,15 @@ [email protected]:
   resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
   integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
 
[email protected].1:
-  version "9.0.1"
-  resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.1.tgz#01e66b7af0012330c0a38c4b6eaa6d92b8a81bf9"
-  integrity sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw==
[email protected].2:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.2.tgz#e84849b61f406a680ced85af76425f6f3108d1a0"
+  integrity sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==
   dependencies:
     "@ungap/promise-all-settled" "1.1.2"
     ansi-colors "4.1.1"
     browser-stdout "1.3.1"
-    chokidar "3.5.1"
+    chokidar "3.5.2"
     debug "4.3.1"
     diff "5.0.0"
     escape-string-regexp "4.0.0"
@@ -3187,12 +3195,12 @@ [email protected]:
     minimatch "3.0.4"
     ms "2.1.3"
     nanoid "3.1.23"
-    serialize-javascript "5.0.1"
+    serialize-javascript "6.0.0"
     strip-json-comments "3.1.1"
     supports-color "8.1.1"
     which "2.0.2"
     wide-align "1.1.3"
-    workerpool "6.1.4"
+    workerpool "6.1.5"
     yargs "16.2.0"
     yargs-parser "20.2.4"
     yargs-unparser "2.0.0"
@@ -3774,6 +3782,13 @@ readdirp@~3.5.0:
   dependencies:
     picomatch "^2.2.1"
 
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
 rechoir@^0.7.0:
   version "0.7.0"
   resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz"
@@ -3955,7 +3970,14 @@ semver@^7.3.5:
   dependencies:
     lru-cache "^6.0.0"
 
[email protected], serialize-javascript@^5.0.1:
[email protected]:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
+  integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
+  dependencies:
+    randombytes "^2.1.0"
+
+serialize-javascript@^5.0.1:
   version "5.0.1"
   resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz"
   integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
@@ -4684,10 +4706,10 @@ word-wrap@^1.2.3, word-wrap@~1.2.3:
   resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
   integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
 
[email protected].4:
-  version "6.1.4"
-  resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.4.tgz#6a972b6df82e38d50248ee2820aa98e2d0ad3090"
-  integrity sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==
[email protected].5:
+  version "6.1.5"
+  resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581"
+  integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==
 
 wrap-ansi@^6.2.0:
   version "6.2.0"

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio